linux(RK3308)添加CH9434(SPI串口扩展)驱动

linux(RK3308)添加CH9434(SPI串口扩展)驱动

1、CH9434驱动下载

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

2、驱动移植

2.1、移植准备

1、查看系统是否支持DTS设备树支持,若支持DTS可以直接在DTS文件中定义SPI节点。如下所示:

&spi2 {
    status = "okay";
    max-freq = <5000000>; //spi internal clk, don't modify
    dma-names = "tx", "rx"; //enable dma
    pinctrl-names = "default"; //pinctrl according to you board
    pinctrl-0 = <&spi2_clk &spi2_csn0 &spi2_miso &spi2_mosi>;
    ch9434: ch9434@0 {
        compatible = "wch,ch943x";
        reg = <0>;
        spi-max-frequency = <5000000>;
        interrupt-parent = <&gpio0>;
        interrupts = <RK_PB6 IRQ_TYPE_LEVEL_LOW>;
    };
};


&spi2 {
    status = "disabled";
    max-freq = <50000000>;   //spi internal clk, don't modify
    pinctrl-names = "default";
    pinctrl-0 = <&spi2_clk &spi2_csn0 &spi2_miso &spi2_mosi>;
    ch9434: ch9434@1{
        compatible = "wch,ch943x";
        reg = <0>;
        spi-max-frequency = <1000000>;
        interrupt-parent = <&gpio0>;
        interrupts = <RK_PB6 IRQ_TYPE_LEVEL_LOW>;
    };
};

2、配置IO中断引脚,确认CH9434芯片INT中断请求所连接的CPU的IO编号。次IO需支持中断功能。此编号可以直接在CH9434源码中指定:GPIO_NUMBER;若支持DTS设备树获取,可使用设备树指定,需要打开宏定义:USE_IRQ_FROM_DTS。

此外,注意有些平台上中断申请方式可能与驱动中默认实现方式不同,此时需修改ch9434.c文件中ch943x_spi_probe的相关代码。

注:默认情况下请不要修改uart时钟,若确实需修改以支持部分非标波特率,可在ch943x_probe中修改:

freq = 32 * 1000000 * 15 / clkdiv;

2.2、静态编译驱动

1、将驱动源码拷贝到内核目录中:/kernel_src/drivers/tty/serial

2、向/kernel_src/drivers/tty/serial/Konfig中添加:

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

3、向/kernel_src/drivers/tty/serial/Makefile中添加:

自动加载:
obj-$(CONFIG_SERIAL_CH9434) += ch9434.o    //obj-y表示把ch9434.o文件编译进内核
#注:是CONFIG_SERIAL_CH9434不是CONFIG_SERIAL_CH943X,如果是CONFIG_SERIAL_CH943X,驱动源码将不会被编译。

4、运行make menuconfig,选择驱动/tty/serial下的ch9434 serial support,然后保存配置。

5、最后呈现出的结果是在kernel配置文件中存在:CONFIG_SERIAL_CH9434=y的选项

手动加载:
obj-m += ch9434.o      //obj-m表示把文件ch9434.o作为"模块"进行编译,不会编译到内核,但是会生成一个独立的 "ch9434.ko" 文件
insmod ch9434.ko       //手动拉起驱动

3、加载驱动

3.1、驱动加载

驱动加载成功,会打印出如下效果。

[    0.131751] ch9434: SPI driver for spi to serial chip ch9434, etc.
[    0.131751] ch9434: V1.00 On 2020.06.17
[    0.131751] rockchip-spi ff140000.spi: no high_speed pinctrl state
[    0.138983] ch943x_spi spi2.0: gpio_to_irq:52, spi->irq:66
[    0.139019] ch943x_spi spi2.0: change to SPI MODE 3!
[    0.139223] ch943x_spi spi2.0: ch943x_port_write - reg:0x81, val:0x 0
[    0.139334] ch943x_spi spi2.0: ch943x_port_write - reg:0x84, val:0x 0
[    0.139443] ch943x_spi spi2.0: ch943x_port_read - reg:0x 6, val:0xff
[    0.139843] ch943x_spi spi2.0: ch943x_port_write - reg:0x91, val:0x 0
[    0.139921] ch943x_spi spi2.0: ch943x_port_write - reg:0x94, val:0x 0
[    0.139997] ch943x_spi spi2.0: ch943x_port_read - reg:0x16, val:0xff
[    0.140379] ch943x_spi spi2.0: ch943x_port_write - reg:0xa1, val:0x 0
[    0.140458] ch943x_spi spi2.0: ch943x_port_write - reg:0xa4, val:0x 0
[    0.140539] ch943x_spi spi2.0: ch943x_port_read - reg:0x26, val:0xff
[    0.140886] ch943x_spi spi2.0: ch943x_port_write - reg:0xb1, val:0x 0
[    0.140963] ch943x_spi spi2.0: ch943x_port_write - reg:0xb4, val:0x 0
[    0.141042] ch943x_spi spi2.0: ch943x_port_read - reg:0x36, val:0xff
[    0.141431] ch943x_spi spi2.0: ch943x_port_write - reg:0xc8, val:0xcd

3.2、查看串口节点

进入/dev/目录,可以看到出现ttyWCH0、ttyWCH1、ttyWCH2和ttyWCH3设备节点,表示加载成功。

# ls /dev/
block               mmcblk1p3           stdout
char                mmcblk1p4           tty
console             mmcblk1p5           ttyFIQ0
cpu_dma_latency     mmcblk1p6           ttyS0
disk                mmcblk1p7           ttyS1
fd                  mmcblk1p8           ttyS2
full                mmcblk1p9           ttyS3
hwrng               mmcblk1rpmb         ttyS4
iio:device0         network_latency     ttyWCH0
input               network_throughput  ttyWCH1
kmsg                null                ttyWCH2
log                 ptmx                ttyWCH3
mem                 pts                 urandom
memory_bandwidth    random              usb-ffs
mmcblk1             rfkill              vendor_storage
mmcblk1boot0        shm                 zero
mmcblk1boot1        snd                 zram0
mmcblk1p1           stderr
mmcblk1p2           stdin
# 

4、日志打印

1、需要给内核传输loglevel等级,如下:

chosen {
		bootargs = "earlycon=uart8250,mmio32,0xff0e0000 swiotlb=1 console=ttyFIQ0 root=PARTUUID=614e0000-0000 rootfstype=ext2 rootwait snd_aloop.index=7 snd_aloop.use_raw_jiffies=1 loglevel=8";
	};
	
注:loglevel:内核打印等级

2、开启ch943驱动源码的打印,如下:

转载说明:

1、https://blog.csdn.net/WCH_TechGroup/article/details/128288016?ops_request_misc=&request_id=&biz_id=102&utm_term=ch9434驱动没有被加载&utm_medium=distribute.pc_search_result.none-task-blog-2

posted @   Rxin  阅读(1276)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示