linux5.4移植ch9434驱动

1 官网下载驱动与应用例程

https://www.wch.cn/downloads/CH9434EVT_ZIP.html

2 dts 配置spi信息

&ecspi1 {
    fsl,spi-num-chipselects = <1>;
    cs-gpios = <&gpio4 26 0>;
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_csi_ecspi1>;
    status = "okay";

    ch9434: ch9434@0 {
        compatible = "wch,ch943x";
        reg = <0>;
        spi-max-frequency = <5000000>;
        interrupt-parent = <&gpio4>;
        interrupts = <21 IRQ_TYPE_LEVEL_LOW>;
    };

};

	pinctrl_csi_ecspi1: csi_ecspi1_grp {
		fsl,pins = <
			MX6UL_PAD_CSI_DATA04__ECSPI1_SCLK         0x0b0b0        /* P8:28 */
			MX6UL_PAD_CSI_DATA06__ECSPI1_MOSI         0x0b0b0        /* P8:24 */
			MX6UL_PAD_CSI_DATA07__ECSPI1_MISO         0x0b0b0        /* P8:26 */
			MX6UL_PAD_CSI_DATA05__GPIO4_IO26          0x0b0b0 
		>;
	};

3 将下载的ch9434.c文件拷贝到kernel_src\drivers\tty\serial文件夹下

4 向kernel_src\drivers\tty\serial文件夹下的kconfig文件添加选项

config SERIAL_CH9434
tristate "SERIAL_CH9434 serial support"
depends on SPI
select SERIAL_CORE
help
    This selects support for ch9434 serial ports.

5 向kernel_src\drivers\tty\serial文件夹下的makefile文件添加选项

obj-$(CONFIG_SERIAL_CH9434)+= ch9434.o

6 运行make menuconfig 选择ch9434 serial support 重新编译系统

7 运行内核后会发现tty设备多了4个,ttyWCH0,ttyWCH1,ttyWCH2,ttyWCH3

7 调试过程中发现一个问题,实际波特率与设置的波特率会有一定偏差,导致接收出错,不知道哪里造成的,直接修改波特率算法

static int ch943x_set_baud(struct uart_port *port, int baud)
{
	struct ch943x_port *s = dev_get_drvdata(port->dev);
	u8 lcr;
	unsigned long clk = port->uartclk;
	unsigned long div;
	
	dev_dbg(&s->spi_dev->dev, "%s - %d\n", __func__, baud);
	
	div = clk * 10 / 8 / baud;
	div = (div + 5) / 10;
	
	div = div * 868 /1000; //修正波特率

	lcr = ch943x_port_read(port, CH943X_LCR_REG);

	/* Open the LCR divisors for configuration */
	ch943x_port_write(port, CH943X_LCR_REG,
					CH943X_LCR_CONF_MODE_A);

	/* Write the new divisor */
	ch943x_port_write(port, CH943X_DLH_REG, div / 256);
	ch943x_port_write(port, CH943X_DLL_REG, div % 256);
	
	/* Put LCR back to the normal mode */
	ch943x_port_write(port, CH943X_LCR_REG, lcr);

	return DIV_ROUND_CLOSEST(clk / 16, div);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值