RS485

根据原理图,RS485接口使用的是FUART,并且收发方向由FUART_CTS控制。

并从kernel/drivers/sstar/include/infinity2m/gpio.h了解到FUART_CTS的GPIO_NUM为17:

# vi kernel/drivers/sstar/include/infinity2m/gpio.h

  • DTS的配置
# cd kernel/arch/arm/boot/dts
# vi infinity2m-ssc011a-s01a-padmux-display.dtsi

# vi infinity2m.dtsi

FUART对应的设备节点为/dev/ttyS2。

# vi infinity2m-ssc011a-s01a-display.dtsi

  • kernel config的配置

在调试RS232时,kernel config已经配置好了,因此这里不需要再配置。
重新编译固件并更新kernel:

# ./Release_to_customer.sh -f nand -p ssd201
  • 验证
    系统起来后,将看到/dev/ttyS2设备节点:

这里,我使用USB-RS485工具来测试(RS485不能自发自收):

同样地,使用microcom命令来测试,我们把FUART_CTS拉低,测试接收功能:

# echo 17 > /sys/class/gpio/export
# echo out > /sys/class/gpio/gpio17/direction
# echo 0 > /sys/class/gpio/gpio17/value
# microcom -s 9600 /dev/ttyS2

接着把FUART_CTS拉高,测试发送功能:

# echo 1 > /sys/class/gpio/gpio17/value
# microcom -s 9600 /dev/ttyS2

可以看到,发送和接收功能都是正常的。但收发的切换需要翻转FUART_CTS电平,操作起来较为繁琐,驱动中已经做了电平翻转相关工作,应用上面只需要指定GPIO:

# cd test/
# mkdir rs485
# cd rs485
# touch ssd201_rs485_test.c
# vi ssd201_rs485_test.c

# arm-linux-gnueabihf-gcc ssd201_rs485_test.c -o ssd201_rs485_test

把ssd201_rs485_test拷贝到开发板并运行:

# ./ssd201_rs485_test

看起来,RS485能够在应用层中收发数据了。我把ssd201_rs485_test.c保存在IDO_SSD20X/开发板/IDO-SBC2D07/开发文档/test/RS485下。
至此,RS485调试完成。

文档更新时间: 2021-08-17 14:45   作者:Aeeditor