硬件支持
- 如果SPI使用DMA传输,必须保证以下限制:
- 传输长度需要保证8字节对齐,否则会出现数据越界的问题;
- 发送和接收数据的buffer地址必须对齐为64字节;
- Channel单次传输数据量不能超过4096字节;
- 支持SPI作为Slave功能;
- Mcu侧SPI做Slave时,速率大于9M,只能采用DMA模式;
- Mcu侧SPI在8位模式下工作时,具有以下限制:
- 1个SPI并行收发最大速度: 50M;
- 2个SPI并行收发最大速度: 33.3M;
- 3个SPI并行收发最大速度: 25M;
- 4个SPI并行收发 最大速度: 20M;
- 5个SPI并行收发最大速度: 15.6M;
- 6个SPI并行收发最大速度: 12.5M;
- SPI外设只支持MSB;
- SPI SpiCsPolarity和spitimeclk2c都不支持配置,SpiCsPolarity默认为低电平有效。
- SPI SpiCsToggleEnable配置使能后,Spi传输完一个frame后,会拉高CS引脚,仅支持TRAILING模式,LEADING模式不支持。
- SPI DMA模式相对于非DMA模式,消耗CPU负载更低。
- 当SPI采用非DMA方式发送数据时,若系统负载比较大,会因为SPI中断响应不及时导致SPI FIFO未能及时写入,从而导致CS引脚短暂拉高,此时推荐采用DMA模式。
- 如果使用场景是多个Sequence使用同一个SPI IP进行异步传输,且Sequence之间并没有传输完成先后顺序,则会存在Sequence传输排队的现象,此时需要在SchM_Spi.c文件中实现关中断临界区保护。
代码路径
- McalCdd/Spi/inc/Spi.h - SPI驱动程序的头文件
- McalCdd/Spi/inc/Spi_Lld.h - SPI底层驱动程序的头文件
- McalCdd/Spi/src/Spi.c - SPI驱动程序的源文件
- McalCdd/Spi/src/Spi_Lld.c - SPI底层驱动程序的源文件
- McalCdd/Common/Register/inc/Spi_Register.h - SPI寄存器定义文件
- Platform/Schm/SchM_Spi.h - SPI模块的调度管理头文件
- Config/McalCdd/gen_s100_sip_B_mcu1/Spi/inc/Spi_Cfg.h - SPI配置头文件
- Config/McalCdd/gen_s100_sip_B_mcu1/Spi/inc/Spi_PBcfg.h - SPI PB配置头文件
- Config/McalCdd/gen_s100_sip_B_mcu1/Spi/src/Spi_PBcfg.c - SPI PB配置源文件
- samples/Spi/SPI_sample/Spi_sample.c - SPI sample 代码
应用sample