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