【发布时间】:2018-05-22 00:43:09
【问题描述】:
我在Simple serial point-to-point communication protocol 中查看答案,但它对我的问题没有足够的帮助。一开始我还尝试在计算机和 8 位微控制器之间进行数据通信,然后最终我想通过无线电模块将一个微控制器与大约 40 个其他微控制器进行通信。基本上一个被指定为master,其余的都是slave。
速度是个问题
手头的问题是速度。因为每个数据包的通信需要在主设备和每个从设备之间至少每秒 4 次来回进行。
假设数据的波特率为 9600bps。那是每秒 960 字节。
如果我使用 16 字节的数据包,那么:40(从属)乘以 16(字节)乘以 2(路)= 640。将其除以 960,这意味着超过 1/2 秒。不好。
如果我使用 8 字节数据包,则:40(从属)乘以 8(字节)乘以 2(路)= 320。将其除以 960,这意味着 1/3 秒。就是这样。
但问题是我需要注意我的波特率,因为太高的波特率可能意味着在更远的距离丢失数据,但您可以看到 8 字节和 16 字节数据包之间的速度差异。
数据包格式思路
在我的设计中,我可能需要传输数以百万计的数字,以便使用符合我想法的 24 位。但这是我最初的想法:
Byte 1: Recipient address 0-255
Byte 2: Sender address 0-255
Byte 3: Command
Byte 4-6: Data
Byte 7-8: 16-bit fletcher checksum of above data
我不介意上面的格式是否调整,只要我至少有6位来识别发送者和接收者(因为我只会处理40个单元),并且包含命令的数据应该总共至少 4 个字节。
我应该如何修改我的数据包想法,以便即使在接收过程中刚刚打开的设备也可以与下一组数据同步?有没有办法不从每个数据字节中剥离一点?
【问题讨论】:
-
无线链路的带宽是否大致相同?因为如果是,那么我认为您必须进一步降低您的数据速率预期。 RF 通信启动和切换可能会遭受比有线通信更长的延迟。关于协议:如果它是真正的主从,您可以取消其中一个地址字节,因为它始终是涉及的主控。此外,也许 CRC8 可以替代 Fletcher 校验和。与现场总线速度相比,CPU 内带宽成本较低。
-
是的,我将所有波特率设置为相同 (57.6K)。我也将本底噪声和偏差设置为最大设置。我使用的模块是 HM-TRP。我也在使用 8 位处理器 (AT89C4051) 进行测试。
标签: serial-port synchronization protocols microcontroller