最近要写一个协议,所以再复习一次SPI。 这个是时序图,因为是双向的传输,在主机发给从机这段时间,从机也是发数据的,但是相当于乱发无意义的: 另外:密封的菱形部分,注意要密封,表示数据有效,Valid Data这个词也显示了这点。 关于时间的标注,这也是个十分重要的信息,这些时间的标注表明了某些状态所要维持的最短或最长时间。 因为器件的工作速度也是有限的,一般都跟不上主控芯片的速度,所以它们直接之间要有时序配合。 外部12MHz晶振,指令周期就是一个时钟周期为(1/12MHz)us,所以至少确定了它执行一条指令的时间是us级别的。我们看到,以上给的时间参数全部是ns级别的,所以即便我们在程序里不加延时程序 10的-3次方 时序时间 专有的时钟引脚上面是有施密特输入的 这个名字好,DIN,然后数据锁存在下降沿上: GPIO开启了引脚的弱上拉电阻: 上升沿移出,下降沿准备: 这个是输出的一个时钟周期 这个样子的意思是,数据有高有低,靠后的线是数据输出,前面是数据准备。或者是被锁定 不确定是不是所有的这样。和上面的分析差不多 看一个连续输出 在时序上面 给MCU的数据中,一个大的时钟周期由32个小周期组成,两个字节来说明转换的结果,也就是本身的数据,MSB在前。后面两个是寄存器的回读,这里我理解是把输出的控制命令又回流一次。 2^16,两个16位 DIN是MCU给器件的信息,MSB+LSB发一次,剩下二分之一如果你不变化,就可以让这个DIN的引脚在后一个周期里面一直低或者高都可以。 你看嘛,就是这样 还有16为输出模式,可以交替的拉低CS来输出 这个是输出16位值的寄存器的样子,0~15,上面每一位都是一个0或者1,一次16位。 这个是配置的寄存器,从0开始写,一直配好到15,组成一个16位的序列,发送。 数据手册里面的写法是倒着来,先15,说这个寄存器的位置在15,名字叫SS,可以读可以写,重启之后是0h,描述是断电的时候设置一次,在转换过程中换不了。 这个是3位,8种情况,对应个个采集方式: 如果对地的话,那就是差分 增益放大器: 速率: 连续还是单发: 默认是单发 找了找就这个图出现的次数最多。 OK 扩展SPI还增加了SDR(Single Data Rate)和DDR(Double Data Rate)两种模式。在标准SPI 协议的SDR 模式下,只在SCK 的单边沿进行数据传输,即一个SCK 时钟只传输一位数据;而在DDR 模式下,会在SCK 的上升沿和下降沿都进行数据传输,即一个SCK 时钟能传输两位数据,传输速率提高一倍。 就是这样 没问题,可以看到时序图内在CLK的上下沿,数据线上的电平确实是稳定的,可以读取。 1. 2-bit Dual SPI模式 数据线:使用MOSI和MISO同时传输数据。 数据速率:相比于标准SPI,数据传输速率翻倍,因为它同时使用两条线传输数据。 使用场景:适用于需要比标准SPI更高数据传输率但又不需要四线Quad SPI的场景。 2. DDR SPI模式 数据线:通常使用一条或多条数据线,但每个时钟周期传输两次数据。 数据速率:数据速率是标准SPI的两倍,因为它在时钟的上升沿和下降沿都传输数据。 使用场景:适合高性能需求的应用,如高速数据采集或高分辨率视频传输。 区别 数据传输方式:Dual SPI利用两条数据线在时钟的每个边沿传输数据;而DDR SPI可能只使用一条数据线,但在每个时钟的上升沿和下降沿都传输数据。 HI-Z是什么? 补充: Hi-Z是数字电路常见术语,指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万用表测的话有可能是高电平也有可能是低电平,随它后面接的东西定。高阻态: 高阻态的实质电路分析时高阻态可做开路理解。 模式1: 上升沿改变,下降沿读取。 手边还有一个ESP32-C3的单片机,这个是它的数据手册,有三个SPI,或者是一个SPI配六个CS线。 外部焊盘,通过MUX,多路转换到接口上面,可以走DMA或者Cache到CPU,等等,之后再说。 这个就更专业啦 SPI 主机驱动允许总线上连接多个设备(共享单个 ESP32-C3 SPI 外设)。每个设备仅由一个任务访问时,驱动程序线程安全。反之,若多个任务尝试访问同一 SPI 设备,则驱动程序非线程安全。 所有的SPI协议都可以分成这样的步骤。 当传输事务数据等于或小于 32 位时,为数据分配一个缓冲区将是次优的选择。 SPI 主机逐字节地将数据读入和写入内存。默认情况下,数据优先以最高有效位 (MSB) 发送,极少数情况下会优先使用最低有效位 (LSB)。如果需要发送一个小于 8 位的值,这些位应以 MSB 优先的方式写入内存。 传输事务间隔时间 SPI 时钟频率 缓存缺失的 SPI 函数,包括回调 影响大传输事务传输速度的主要参数是时钟频率。而多个小传输事务的传输速度主要由传输事务间隔时长决定。 在捕捉的时候可以对 SPI 进行详细设置 三个解码层级的设置 这里的解码有几个层级,首先是bit级别,就是0,1,接着是转换,就是0,1拼成别的进制数据。还有就是转换成数据。 全是0 16进制的我喜欢使用 可以看到是一个不断分组,组装的过程 先看一个时钟的变化 有八个上升沿,也就是8个0,也就是下面的00.是转换的层级,8个字节是一位-00.
|