fcccc 发表于 2021-2-2 21:41

关于UART/IIC接收时序问题

问题背景:
系统有一个高优先级中断,服务函数执行时间100us-3ms随机,硬限制,已经无法调整.
需要一个串行接口与上位机双向通信;芯片没有DMA,没有带FIFO的UART或者IIC;

现在时不时通信被中断3ms,期间发过来的数据都会丢失.
这个时序如何设计能保证可以不丢失上位机发过来的数据?


叶春勇 发表于 2021-2-2 23:21

貌似,再加个双串口单片机,做个中转?主单片机,空闲去查询串口单片机有数据没?

ayb_ice 发表于 2021-2-3 08:22

在他的服务里加个自己的函数

mailshichao 发表于 2021-2-3 08:42

这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈

ayb_ice 发表于 2021-2-3 08:51

波特率搞低些

dlutccj 发表于 2021-2-3 09:35

加入握手机制,告诉上位机什么时间下位机可以接收指令

coody 发表于 2021-2-3 15:11

再另用一个单片机先收下数据,然后用间隔大于3ms来一个一个字节发给这个单片机。

xyz549040622 发表于 2021-2-3 18:01

什么也没有,肯定是很容易被打断的。只能是尝试降低速度了。

ayb_ice 发表于 2021-2-4 08:50

本帖最后由 ayb_ice 于 2021-2-4 08:58 编辑

波特率4800完全要求,1000/4800*10=2.08MS,

串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成前将上一字节取走就可以了

2.08MS*2 > 3ms
2400波特率肯定是完全符合要求的

fcccc 发表于 2021-2-5 19:55

本帖最后由 fcccc 于 2021-2-5 20:13 编辑

dlutccj 发表于 2021-2-3 09:35
加入握手机制,告诉上位机什么时间下位机可以接收指令
对这个思路很好,问题的主要难点在于中断是外部事件驱动的,也就是说发生的时机和间隔时间无法确定.
如果中断完成时候告诉上位机发送,如果突然又发生一次中断就会出问题.
这样的话将会是一个偶尔出现的故障点.

fcccc 发表于 2021-2-5 19:56

ayb_ice 发表于 2021-2-4 08:50
波特率4800完全要求,1000/4800*10=2.08MS,

串口一般可以缓冲一个接收字节,只要保证在下一个字节接收完成 ...

这也是个办法,谢谢指点.

fcccc 发表于 2021-2-5 20:19

mailshichao 发表于 2021-2-3 08:42
这个要靠软件协议来解决了,单片机加一个收到数据反馈机制,上位机加一个发送接收反馈
...
感谢指点,目前来看确实是需要反馈机制,设计个协议来处理了.
页: [1]
查看完整版本: 关于UART/IIC接收时序问题