常见通信方式:SBUS/UART/I2C/SPI/USB/PPM/JTAG/CAN/MIDI/RS-232/RS-485
同步与异步
同步:有时钟信号,每个时钟发一位数据(时钟的频率和每一位数据对应)
异步:没有时钟信号,有数据起始位/停止位,从数据起始位开始间隔一定的时间取信号
串行与并行
串行:一位位发,先发低字节
并行:一次性发送
UART
异步串行(先发低字节)
接口:TXD/RXD
速度:一般9600个比特位每秒,即每秒传输9600/8=1200字节
数据长度:8位
起始位:高变低
停止位:低变高
优点:距离长
缺点:速度慢
IIC(inter-integrated circuit)
同步串行(飞利浦)
接口:SCL/SDA
频率:时钟
数据长度:多个字节
多主多从:发从机地址,再发数据,这样对应地址的从机才发送到缓存
优点:线少
缺点:速度慢
SPI(serial peripheral interface)
同步串行(摩托罗拉)
接口:sclk/mosi(master out slaver inout)/miso/ss
一主多从:通过片选使能来确定(高边低)
优点:全双工,速度快250Mbps(bit per second)
缺点:线多/距离短
高效通信
1. 不要使用死循环+read+sleep,这会导致断包和粘包。如果一定要这么做就用缓冲数组,把读到的数据存到数组,再对数组进行分包。
2. 比较好的办法是在线程中用select对不同设备的文件句柄进行监听可读/可写/异常,这样只用一个线程就可以对文件句柄进行监控,避免开启多个线程。使用select要注意:每次都要重新设置阻塞时间,重新设置监听的文件句柄集合,select的句柄是最大文件句柄+1。
3. 如果数据处理或发送的数据的时间比较长,则放入新的线程中。