通过单总线实现单片机之间的数据传输

单总线、没有时钟线的通信时,不能使用简单的高低电平来通信,因为接收方不知道此时发送的数据是第几位数据,容易造成错乱。

因此在使用一根线对外传输数据时,需要自定义一个通信协议,它至少要包含格式头+数据,格式头应该占整个数据发送周期的20%左右(时间不用很严谨,因为不同的单片机内部的时钟不同,可以允许一定范围内的误差)。

例如:发送16位的数据,总共要12.8ms,那么可以在它前面加个5ms的格式头。

一个简单的格式头可以根据引脚空闲状态的低电平来设置,假设引脚的空闲状态为高电平,那么可以使用连续的低电平来作为格式头。

数据位肯定是不能用高电平和低电平来表示逻辑1和0了。这里要用稍微复杂一些的信号,例如使用600us的高电平+200us的低电平表示逻辑1,用200us的高电平+600us的低电平来表示逻辑0。

这样组合起来,可以轻易的分辨出当前接收的是0还是1,也可以避免当多个相同的0或1连续发送/接收时,对于接收方来说无法分辨这其中有几个0和1的情况。

自定义的单总线协议使用案例:

  1. 自定义逻辑1和逻辑0对应的有规律的电平组合

假设用600us的高电平+200us的低电平表示逻辑1 ,用200us的高电平+600us的低电平来表示逻辑0。

  1. 确定整个数据发送所要的周期

那么发送一位信号要800us,一共要发送16位,一帧(16位)要12.8ms。

  1. 确定格式头的电平和时间长度

假设引脚空闲时由外部的上拉电阻将总线电平拉高,即引脚空闲时为高电平 ,那么使用5ms(占整个数据帧发送周期的25.6%)的低电平来作为格式头。

补充:在两帧信号之间,应该加一个时间间隔,方便发送方准备数据、接收方处理上一次收到的数。在这里,对信号的传输速度没有严格要求,便使用5~10ms的时间间隔。

最后,试着使用它来发送信号,在逻辑分析仪上可以看到:

相关推荐
UrSpecial1 小时前
GPIO 是什么?
单片机·嵌入式硬件
修船大队长3 小时前
配置接受报文每个报文对应一个mailbox配置流程记录
网络·单片机·mcu
搁浅小泽5 小时前
二极管选型技术规范
单片机·嵌入式硬件·汽车
搁浅小泽5 小时前
电感选型技术规范
单片机·嵌入式硬件·汽车
..Dauntless..5 小时前
【stm32】串口——在MCU内部的工作过程
stm32·单片机·嵌入式硬件
lzqrzpt6 小时前
临沂LED驱动电源工程选型标准与工艺对比解析
python·单片机·嵌入式硬件·物联网
小黄蚁6 小时前
使用LVGL模拟示波器创建正弦函数波形
单片机·学习
Code_Solitude9 小时前
开发板点灯实验源码
stm32·单片机·嵌入式硬件
炸膛坦客20 小时前
单片机开发工具篇:(十四)配置输出 .map 文件及其本地路径
c语言·单片机·嵌入式硬件
笨笨饿21 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网