RS485 rk3506
切换芯片
cd /home/user
./build.sh chip:rk3506
./build.sh lunch
基本原理
RS485 是 半双工异步 串行通信。
特点
-
支持多节点:一般支持最大32个节点。
-
传输距离远:最远通讯激励可达1200米
-
抗干扰能力强:差分信号传输。
-
连接简单:只需呀A+和B-即可传输
差分信号传输
RS485通信采用差分信号传输,通常情况下只需要两根信号线就可以进行正常通信。在差分信号中,逻辑0和逻辑1是用两根信号线(A+和B-)的电压差来表示。
-
逻辑 1:两根信号线(A+和B-)的电压差在 +2V~+6V 之间。
-
逻辑 0:两根信号线(A+和B-)的电压差在 -2V~-6V 之间。
连接方式
节点中的串口控制器使用 RX 与 TX 信号线连接到 485 收发器上,而收发器通过差分线连接到 网络总线。
串口控制器与收发器之间一般使用 TTL 信号传输,收发器与总线则使用差分信号来传输。
发送数据时,串口控制器的 TX 信号经过收发器转换成差分信号传输到总线上。
接收数据时,收发器把总线上的差分信号转化成 TTL 信号通过 RX 引脚传输到串口控制器中。
通常在这些节点中只能有一个主机,剩下的全为从机。
在总线的起止端分别加了一个 120 欧的匹配电阻。
芯片引脚
接收数据
接收数据引脚是 RS485_RX,在接收数据过程中,RS485_TX引脚一直保持高电平,NPN三极管Q1导通,RE和DE的引脚是低电平,发送禁止,接收使能,进入接收状态。
发送数据
发送数据引脚是 RS485_TX,应该 RS485_TX 发送1,AB发送1;RS485_TX 发送0,AB发送0。
-
当 RS485_TX 发送1时:NPN三极管导通,RE和DE的引脚是低电平,发送禁止,接收使能,进入接收状态,SP3485芯片的AB引脚进入高阻状态,因为R4把A拉高,R5把B拉低,所以,AB传输的是1。所以,当RS485_TX发送1时,AB引脚发送1。
-
当 RS485_TX 发送0时:NPN三极管不导通,RE和DE的引脚是高电平,进入发送状态,SP3485芯片会把DI上的电平反应到AB引脚上输出,因为DI已经接地,所以AB引脚会传输0。所以,当RS485_TX发送0时,AB引脚发送0。
测试
ADB SHELL
两块都是 RK3506G EVB1,那两边都用 /dev/ttyS3。
- Windows 查设备
.\adb devices -l
假设两块板是:
A板 transport_id:36
B板 transport_id:37
后面把 36/37 换成你实际看到的。
- 传工具到两块板
A板:
.\adb -t 36 push D:\test_tools\ts_uart /tmp/
B板:
.\adb -t 37 push D:\test_tools\ts_uart /tmp/
- 进两个 shell
A板:
.\adb -t 36 shell
B板:
.\adb -t 37 shell
- 两边都执行
chmod +x /tmp/ts_uart
stty -F /dev/ttyS3 115200 cs8 -cstopb -parenb -ixon -ixoff -crtscts raw
- A板接收
A板 shell:
while true; do /tmp/ts_uart r /tmp/recv_from_B.bin 115200 0 0 0 /dev/ttyS3; hexdump -C /tmp/recv_from_B.bin; sleep 1; done
- B板发送
B板 shell:
echo -ne "from_B_to_A\r\n" > /tmp/send_B.txt
while true; do /tmp/ts_uart s /tmp/send_B.txt 115200 0 0 0 /dev/ttyS3; sleep 1; done
反向测
B板接收:
while true; do /tmp/ts_uart r /tmp/recv_from_A.bin 115200 0 0 0 /dev/ttyS3; hexdump -C /tmp/recv_from_A.bin; sleep 1; done
A板发送:
echo -ne "from_A_to_B\r\n" > /tmp/send_A.txt
while true; do /tmp/ts_uart s /tmp/send_A.txt 115200 0 0 0 /dev/ttyS3; sleep 1; done
示波器测试:
printf '\x55' > /tmp/55.bin
while true
do
/tmp/ts_uart s /tmp/55.bin 1200 0 0 0 /dev/ttyS1
sleep 1
done
RK3506G 接收:
stty -F /dev/ttyS3 1200 cs8 -cstopb -parenb -ixon -ixoff -crtscts raw
while true
do
/tmp/ts_uart r /tmp/recv.bin 1200 0 0 0 /dev/ttyS3
hexdump -C /tmp/recv.bin
sleep 1
done