关于IO模拟时序(SPI)的注意事项
原则:有硬件I2C、SPI时尽量用硬件操作,省去IO模拟繁琐的时序调试。但在内部资源不够时就要用IO模拟总线了。
关于短延时:模拟时序时是否需要延时要看MCU与device的相对速度。比如I2C如果400K的速率和MCU动辄几十M的速率不再一个量级,肯定要通过延时调整时序;但对于SPI因为其速度很高,甚至有的比单片机的速度还高,这时就没必要延时了。
关于IO模拟的收发函数是否要合并成一个:对于SPI因为是全双工,所以可以分开,当然也可以合并成一个(发送时不需要返回值,而接收时此时参数是要发送的数据,返回值是要读的值)
关于在什么跳变沿操作:比如芯片手册中说到在上升沿采样/锁定(也就是从上升沿开始到下降沿开始之间的时间数据的值必须稳定不变),那么单个位bit的收发都应该在1->0->1(后一个高电平之前)完成数据交互变化。
关于时钟极性和时钟相位:CPOL时钟极性只是说明了空闲时总线的电平状态:CPOL=1表明空闲时时钟是高定平;否则是低电平。
CPOA时钟相位说明了在第几个跳变沿进行采样,CPOA=0表明在第一个沿进行采样,否则在第二个沿。
模式 | CPOL | CPHA | 备注 |
---|---|---|---|
Mode0 | 0 | 0 | 数据采样是在上升沿,数据发送是在下降沿 |
Mode1 | 0 | 1 | 数据采样是在下降沿,数据发送是在上升沿 |
Mode2 | 1 | 0 | 数据采集是在下降沿,数据发送是在上升沿 |
Mode3 | 1 | 1 | 数据采集是在上升沿,数据发送是在下降沿 |
主器件是在何时刻输出bit1的呢:bit1的输出时刻实际上在SCK信号有效以前,比SCK的上升沿还要早半个时钟周期。bit1的输出时刻与SSEL信号没有关系。
主器件的输入口MISO何时读bit:同样是在时钟的前沿采样从器件输出的bit1的
从器件又是在何时刻输出bit1的呢:从器件是在SSEL信号有效后,立即输出bit1,尽管此时SCK信号还没有起效。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?