本人愚钝,一直没有理解SPI协议,在这里向大侠们讨教一下,求指点一二呀。
时间:10-02
整理:3721RD
点击:
本人新手,一直想用verilog写个spi协议,可是一直没有理解清楚。
spi的基本时序我知道,就是根据CPOL和CPHA来改变。
但是有几点不太明白,如果主机想读取从机的数据,那么从机是怎么输出数据的,输出多少bit的数据呢?
比如下面的这个时序图,大部分资料的时序图都是这个样子的:

我有几点不太明白呀:
1.从机是怎么给主机发送数据的,看时序图,难道是SS一拉低就给主机发送数据?
2.从机怎么控制给主机发送多少数据?
难道是主机先发命令给从机,命令中包括了要求主机是发数据还是接收数据,以及数据的大小?然后从机按照主机的命令执行?
spi的基本时序我知道,就是根据CPOL和CPHA来改变。
但是有几点不太明白,如果主机想读取从机的数据,那么从机是怎么输出数据的,输出多少bit的数据呢?
比如下面的这个时序图,大部分资料的时序图都是这个样子的:
我有几点不太明白呀:
1.从机是怎么给主机发送数据的,看时序图,难道是SS一拉低就给主机发送数据?
2.从机怎么控制给主机发送多少数据?
难道是主机先发命令给从机,命令中包括了要求主机是发数据还是接收数据,以及数据的大小?然后从机按照主机的命令执行?
我也记不清了,不过这个时序貌似很简单
SS拉低后, 在时钟的上升沿或者是下降沿发数据, 每个时钟周期发一位数据,先发低位还是高位协议上有讲,
第二个问题, 根据时钟个个数;
你问的问题在协议上都有讲,仔细看协议。
我看过moto的那个协议,没有说从机的部分。
SPI读数据需要主机发起一组时钟,然后从机响应后输出数据。英文好像叫 SPI dummy
网上有很多SPI的文章,你可以找一下仔细读一读。
读写都是主机发起的。读取什么内容,读取多少字节都是主机控制的。
研究下。
SPI的读是靠master来发起的,master置低CSn后发出SCK信号,SLave的数据就从MISO上输出了
1.CPHA情况下,确实CS一拉低从机就给主机发了数据
2.一般从机的时钟极性相位模式以及数据长度都是固定的,然后主机去满足从机的要求~
1、 有可能这么操作,主要还是要看工作模式
2、主机控制的数据位数
补充一句CPHA = 0的情况下,CS变低后,从机立即向主机发送数据
http://bbs.eetop.cn/viewthread.p ... ght=SPI%D0%AD%D2%E9
这份资料28页可以解决你的问题
好东西,要好好学习
SPI应该是数据交换吧。想收数据,必要发数据
学习了!
