## 设置通信帧格式
SPI通信的配置那只是基本的底层,要保证通信做得漂亮,设计通信的帧格式将大大降低错误概率。比如,因为我暂时最多传输一个字(16bit)的数据,设计如下7字节的帧格式:
![Frame]
将帧格式对应到数据结构就是一个结构体:
```c
struct st_msg_user {
uint8_t header;
uint8_t type;
uint8_t low_byte;
uint8_t high_byte;
uint8_t rsvd0;
uint8_t rsvd1;
uint8_t checkout; // low_byte ^ high_byte
};
```
然后,所有对帧的操作都归结到对上面结构体的操作,如:
```
extern struct st_msg_user assemble_frame(uint8_t type, uint16_t data); // 将数据组成一帧
extern void msg_printf(struct st_msg_user *msg); // 将帧发送出去
extern uint16_t unpack_frame(struct st_msg_user msg); // 解出帧中的数据
```
## SPI主从机配置注意事项
首先考虑硬件上要注意的:
1. 必需设置1个MCU为主机,另1个为从机,两者接线是CLK、MISO、MOSI、SEL一一对应连接。注意是一一对接,也就是说主机MISO就接到从机的MISO、主机MOSI就接到从机的MOSI
2. 除了要接SPI的4根线意外,还必须连接地线(共地),提供参考电势
软件配置上:
1. CLK永远是由主机发出,因此必须使用全双工模式,在读数据的时候同时写一个数据提供总线时钟
2. 时钟的空�