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);
}