概述
Ameba 系列产品支持摩托罗拉的 SPI 接口,能够进行高效的四线全双工通信。
功能特性
支持主机或从机操作模式
独立的中断屏蔽功能
支持硬件/软件片选
可编程特性
支持动态控制串行接口频率(主机模式有效)
可配置的数据帧大小(4~16 bits)
可配置的时钟极性和相位
可编程延迟采样时间(主机模式有效)
传输模式
发送和接收
仅发送
仅接收
操作模式
轮询模式
中断模式
DMA 模式
串行时钟频率
接口频率(fsclk_out)支持
主机模式:支持高达 50MHz。
从机模式:支持最高 25MHz。
注意
最大频率受 Pinmux 选择的影响,请参考 引脚复用配置策略。
支持从机超频模式 :
前提条件:与之通信的主设备需支持延迟采样机制
延迟采样机制:以双方规定的下降沿采样数据为例,图中展示了标准采样边沿与延迟采样机制的对比
理论极限:50 MHz
主机延迟采样机制
分频机制
核心公式 :
fsclk_out = fssi_clk/div
其中: fssi_clk 时钟源为 PLL 。
约束条件 :
分频系数 div 仅支持偶数值
实际输出频率为离散值,这意味输出的 fsclk_out 可能与期望值存在偏差。
注意
Bootloader 阶段配置 PLL 的输出会影响 SPI 串行时钟频率。
调整 PLL 输出的方法请参考 ameba_bootcfg 。
例如,SPI 目标 工作时钟 ( fssi_clk ) 为 100MHz。在 PLL 设定为 524MHz 时,SPI 实际 工作时钟只有 86.67MHz。
此时, fsclk_out 最大只有 43.3MHz,无法达到期望的最大值 50MHz。
引脚复用配置策略
接口频率与引脚配置
配置模式 |
主设备频率 |
从设备频率 |
---|---|---|
专用引脚 |
50 MHz |
25 MHz |
全矩阵引脚 |
25 MHz |
12.5 MHz |
备注
关于专用引脚与全矩阵引脚的区别,请参考 功能复用 介绍。
工作模式
根据需要,可配置 SPI 工作在以下三种模式:
轮询模式
这是最基础的工作模式。CPU 通过轮询 SPI 的状态寄存器,然后根据需要读写 FIFO 缓冲区,以实现数据的收发。
适用对实时性要求较低的小规模数据传输。
中断模式
当满足配置的触发条件时,SPI 硬件会发送中断信号通知 CPU 处理相关事务。
该方式无需频繁轮询,使得 CPU 占用率降低且响应速度更快。
DMA 模式
通过 SPI 与 DMA 握手机制,由 DMA 控制器负责数据传输,减轻 CPU 的处理负担。
适用于需处理大量数据的应用,如音视频流处理、大数据传输等情境。
备注
有关使用 DMA 模式传输的注意事项,请参考 DMA 和缓存 介绍。
应用示例
SDK 提供了两类功能示例,帮助开发者了解和使用 SPI 功能:
mbed 示例
路径:
{SDK}\component\example\peripheral\mbed\SPI\{demo}
展示如何在 mbed 环境中实现 SPI 控制。
raw 示例
路径:
{SDK}\component\example\peripheral\raw\SPI\{demo}
展示如何在无抽象层的情况下直接控制 SPI。
以下是对 raw 示例功能的简要说明:
raw_spi_trx_polling 演示使用 SPI
轮询
工作模式收发数据;raw_spi_trx_interrupt 演示使用 SPI
中断
工作模式收发数据;raw_spi_trx_dma 演示使用 SPI
DMA
工作模式收发数据;raw_spi_dma_sblk_rx_slv 演示使用 SPI
从机模式接收
数据;raw_spi_dma_sblk_tx_mstr 演示使用 SPI
主机模式发送
数据;raw_spi_multislave 演示使用 SPI
软件控制
方式选择从设备
。
备注
要了解示例支持的芯片,请查看示例路径下的 README.md
文件。
API 参考
要详细了解和使用相关 API,请参阅 {SDK}\component\soc\amebaxxxx\fwlib\include\ameba_spi.h
。
常见问题排查
CS 信号提前拉高
现象 : 在数据传输未完成时 CS 被提前拉高,导致传输中断,数据未能完整发送。
可能原因 : FIFO 缓冲区未能及时填充,或由于数据流控制不当导致数据断流。
解决方法 :
检查 FIFO 阈值配置:确保与数据流量需求相匹配。
优化中断优先级:通过提高中断优先级,减少数据填充的延迟时间。
使用 DMA 模式传输:减轻 CPU 的负担并提升数据传输的稳定性。
DMA 模式少部分数据传输错误
现象 :初始传输的数据可能出现少量错误,而后续的数据传输正常。
原因与解决方法 :请参考 DMA 和缓存 介绍。