在MCU实现低延迟通信中,通信协议选择、中断优化以及UART的合理使用都是关键环节.
通信协议选择,一般都会用到高速接口,有些还会用到并口。 高速接口,SPI是串行外设接口总线,一般为四线制,全双工,主从模式,时钟频率可达几十MHz,代码实现快。QSPI是六线SPI,为加强版的SPI,应用更广泛,在需要高速通信时是不错的选择。I2C是内部集成电路总线,两线制,半双工,速率较低,但可通过快速模式400kHz或超快速模式1MHz执行优化。UART/USART是通用同步异步收发器通信,两线制,波特率需尽可能高1Mbps以上,但需注意时钟同步误差。 专用外设,CAN FD是传统CAN总线的升级版本,通过提升数据传输速率、扩展数据长度和优化帧结构,解决了传统CAN在带宽和效率上的局限,主要应用于汽车电子和工业控制领域。USB FS/HS是全速/高速USB,需要协议栈支持。 协议优化,精简协议可减少数据包的帧头和帧尾,一般情况下用1字节帧头和1字节帧尾可能就够了。尽量用BIT表示来代替BYTE表示,像一些状态信息或者错误信息等,只需要0和1即可。尽量使用固定长度的数据帧,避免额外的解析开销。还可以自定义轻量级的通信协议,包含必要的CRC校验或者LRC校验等。
再说一下中断优化,中断与DMA结合,为通信中断分配最高优先级NVIC配置,中断服务程序ISR尽量短,只放标志位,数据处理放到主循环。采用双缓冲或者队列技术,一边传输一边处理,减少等待时间,防止数据丢失,特别是高速的数据交互场景。使用DMA直接内存访问代替CPU处理数据传输SPI、I2C、UART通信,减少中断次数。 中断服务程序优化,中断服务程序ISR尽量简短,避免复杂计算或阻塞操作。在ISR中仅保留必需操作,其余处理移交任务上下文。 使用Cortex-M的LDREX/STREX指令实现无锁访问,相比传统开关中断方式可减少约20个时钟周期开销。 中断控制器配置优化,现代MCU的中断控制器NVIC支持多级优先级配置,合理设置优先级组,可实现快速中断嵌套响应。
再说一下这个UART优化,串口也是我用的蛮多的。 提高波特率,UART波特率需尽可能高1Mbps以上,但要注意时钟同步误差。在硬件条件允许的情况下,选择较高的波特率可以加快数据传输速度,降低通信延迟。 优化软件处理,在处理UART通信时,优化软件代码可以提高处理效率。采用高效的字符串处理算法,减少不必要的循环和判断语句。合理使用中断和轮询方式,在需要快速响应的场景下,优先使用中断方式。 硬件去抖动,如果UART通信受到噪声干扰,可能会导致数据错误和延迟增加。可以采用硬件去抖动电路,减少噪声对通信的影响,提高通信的可靠性,从而间接降低延迟。
以上就是我的理解。
|