之前的文章记录了 SC16IS762 SPI/I2C 转 UART 串口芯片 驱动调试过程,
本编中将记录 使用内核中自带的SC16IS7xx 驱动在RK3288平台上的移植过程。
环境:
Hardware: RK3288 (九鼎 RK3288 CV5 核心板)
SDK: linux 4.4.18
SC16IS762 电路:
1、首先参考内核中关于该芯片设备树的描述,
在设备树中添加 相关描述如下:
&spi0 {
status = "okay";
max-freq = <48000000>; //spi internal clk, don't modify
pinctrl-names = "default"; //pinctrl according to you board
pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0 &spi0_cs1>;
sc16is762@01 {
compatible = "nxp,sc16is762";
reg = <0x01>; //chip select 0:cs0 1:cs1
spi-max-frequency = <1000000>; //spi output clock
//clocks = <&cru SCLK_SPI0>;
clocks = <&ext_sc16is7xx>;
pinctrl-names = "default"; //pinctrl according to you board
pinctrl-0 = <&sc16is762_irqgpio>;
interrupt-parent = <&gpio8>;
interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
irq-gpio = <&gpio8 1 GPIO_ACTIVE_LOW>;
};
};
由于 SC16IS762 需要指定始终源 进行串口 波特率的设置,否则会出现 驱动 probe 失败的问题:
所以需要添加 clocks 描述;
ext_sc16is7xx: external-sc16is7xx-clock {
compatible = "fixed-clock";
clock-frequency = <18432000>;
clock-output-names = "ext_sc16is7xx";
#clock-cells = <0>;
};
始终频率需要根据自己的电路设置,公司板子上SC16IS762 使用的晶振为18.432MHZ
2、修改内核配置选项 使能 sc16is7xx 驱动,make menuconfig ---> /sc16is7xx , 根据提示使能,这里不赘述
3、配置好后 ./mk.sh -k -cv=5 重新编译生成 zboot.img, 烧录至主板后重启,查看启动打印信息
驱动被正常调用,查看/dev/ttysc0 是否存在
4、microcom -s 115200 /dev/ttysc0 进行收发测试
笔者在测试时发现 串口输出乱码,后检查发现是 芯片的晶振时钟没有配置正确,所以大家 一定要根据自己的电路相应修改设备树!