关于UART/IIC接收时序问题
问题背景:系统有一个高优先级中断,服务函数执行时间100us-3ms随机,硬限制,已经无法调整.
需要一个串行接口与上位机双向通信;芯片没有DMA,没有带FIFO的UART或者IIC;
现在时不时通信被中断3ms,期间发过来的数据都会丢失.
这个时序如何设计能保证可以不丢失上位机发过来的数据?
貌似,再加个双串口单片机,做个中转?主单片机,空闲去查询串口单片机有数据没? 在他的服务里加个自己的函数 这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈
波特率搞低些 加入握手机制,告诉上位机什么时间下位机可以接收指令 再另用一个单片机先收下数据,然后用间隔大于3ms来一个一个字节发给这个单片机。 什么也没有,肯定是很容易被打断的。只能是尝试降低速度了。 本帖最后由 ayb_ice 于 2021-2-4 08:58 编辑
波特率4800完全要求,1000/4800*10=2.08MS,
串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成前将上一字节取走就可以了
2.08MS*2 > 3ms
2400波特率肯定是完全符合要求的
本帖最后由 fcccc 于 2021-2-5 20:13 编辑
dlutccj 发表于 2021-2-3 09:35
加入握手机制,告诉上位机什么时间下位机可以接收指令
对这个思路很好,问题的主要难点在于中断是外部事件驱动的,也就是说发生的时机和间隔时间无法确定.
如果中断完成时候告诉上位机发送,如果突然又发生一次中断就会出问题.
这样的话将会是一个偶尔出现的故障点.
ayb_ice 发表于 2021-2-4 08:50
波特率4800完全要求,1000/4800*10=2.08MS,
串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成 ...
这也是个办法,谢谢指点. mailshichao 发表于 2021-2-3 08:42
这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈
...
感谢指点,目前来看确实是需要反馈机制,设计个协议来处理了.
页:
[1]