协议
基本的协议需求可以分为以下两大类:
- 数据分发功能,从A节点广播数据给B节点,无需应答,但保留数据校验
- 请求应答功能,请求内容支持、数据支持
- 命令应答功能,请求执行某个动作、做某件事
内容
帧头:0xAA55
帧类型:0x0000 ~ 0xFFFF,不同类型节点之间的通信
长度:0x0000 ~ 0x00FF
数据类型:0x0000 ~ 0x00FF,这个代表是数据
,还是请求
,还是命令
,还是应答
数据域:可变,N * 2
校验:CRC16算法,两个字节,计算的是从帧号到数据域的所有字段的数据校验值(除了帧头和帧尾)
帧尾:0x0D0A
数据类型
DSP通信中常见的数据类型,总的来说,可以抽象为以下几种:
① 数据:广播方式传播,比如声音、图像等数据,订阅者收到即可,无需应答或者响应
② 请求:向某人索取某些资源,一般在应答里边需要告知,也就是在应答里边需要附带数据(数据做应答)
③ 命令:叫某人做某事,事情/动作完毕还要把执行之后的结果告诉发起者
④ 应答:告诉对方事情、动作、询问的执行结果,应答可以是数据,可以是状态,也可以是事情的结果
总结
- 因为DSP里边最小的数据单元为2个byte,所以都要按2个字节对齐,无论是跟
ARM
还是X64
通信 - DSP建议开启
中断+FIFO
模式处理SCI数据(减少中断次数),如果SCI通信比较频繁,建议启用DMA - 如果是单字节中断接收,那ARM只能处理单字节的帧头(这是不好的)