spi总线时序中上升沿对数据采样是什么意思

1.4.1 SPI总线原理
本文所属图书&>&
本书介绍如何利用Visual C++集成开发环境进行串口通信程序开发的前沿实用技术。书中精选来自工程实践的应用范例,主要涵盖串口通信的理论基础、Visual C++集成开发环境简介、MSComm控件串口编程、Windows API...&&
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线(单向传输时3根也可以),分别是SDI(主设备数据输入信号)、SDO(主设备数据输出信号)、SCK(时钟信号)和CS(从设备使能信号)。
SDO&&主设备数据输出,从设备数据输入。
SDI&&主设备数据输入,从设备数据输出。
SCK&&时钟信号,由主设备产生。
CS&&从设备使能信号,由主设备控制。
其中,CS是控制芯片是否被选中的,也就是说,只有片选信号为预先规定的使能信号(高电位或低电位)时,对此芯片的操作才有效。这就使在同一总线上连接多个SPI设备成为可能。
接下来介绍负责通信的3根线。通信是通过数据交换完成的,这里先要知道SPI是串行通信协议,也就是说,数据是一位一位传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样的原理。这样,至少8次时钟信号的改变(上升沿和下降沿为一次),就可以完成8位数据的传输。
要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样的传输方式有一个优点,与普通的串行通信不同,普通的串行通信一次连续传送至少8位数据,而SPI允许数据逐位传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通信的控制。SPI还是一个数据交换协议:因为SPI的数据输入线和数据输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上升沿或下降沿采集有不同定义,具体请参考相关器件的文档。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'串行外设接口(SPI)总线解析及应用_资讯_突袭网-提供留学,移民,理财,培训,美容,整形,高考,外汇,印刷,健康,建材等信息
当前位置&:&&&&串行外设接口(SPI)总线解析及应用
热门标签:&
串行外设接口(SPI)总线解析及应用
编辑:王可评论:
串行外设接口 (SPI)&总线是一个工作在全双工模式下的同步串行数据链路。它可用于在单个主控制器和一个或多个从设备之间交换数据。其简单的实施方案只使用四条支持数据与控制的信号线(图 1):虽然表1中的引脚名称来自摩托罗拉开发的SPI标准,但具体集成电路的SPI端口名称往往与图1中所示的不同。  图 1:基本 SPI 总线  表 1:SPI 引脚名称分配SPI 数据速率一般在1到70MHz的范围内,字长为从8位及12位到这两个值的倍数。数据传输一般由数据交换构成。在主控制器向从设备发送数据时,从设备也向主控制器发送数据。因此主控制器的内部移位寄存器和从设备都采用环形设置(图 2)。  图2:双移位寄存器形成一个芯片间的环形缓存器在数据交换之前,主控制器和从设备会将存储器数据加载至它们的内部移位寄存器。收到时钟信号后,主控制器先通过MOSI线路时钟输出其移位寄存器的MSB。同时从设备会读取位于SIMO的主控器第一位元,将其存储在存储器中,然后通过SOMI时钟输出其MSB。主控制器可读取位于MISO的从设备第一位元,并将其存储在存储器中,以便后续处理。整个过程将一直持续到所有位元完成交换,而主控器则可让时钟空闲并通过/SS 禁用从设备。除设置时钟频率外,主控制器还可根据数据配置时钟极性和相位。这两个分别称为CPOL与CPHA的选项可实现时钟信号180度的相移以及半个时钟周期的数据延迟。图3是相应的定时图。  图3:时钟极性与相位的定时图  CPOL = 0 时,时钟空闲在逻辑 0 位置上:  如果CPHA = 0,数据在SCK的上升沿读取,在下降沿变化。  如果CPHA=1,数据在SCK的下降沿读取,在上升沿变化。  CPOL= 1 时,时钟在逻辑为高时空闲:  如果CPHA =0,数据在SCK的下降沿读取,在上升沿变化。  如果CPHA= 1,数据在SCK的上升沿读取,在下降沿变化。在SPI中,主控制器可与单个或多个从设备通信。如果是一个单从设备,从设备选择信号可连接至从设备的本地接地电位,实现永久接入。对使用多个从设备的应用,可使用两种配置:独立从设备与菊花链从设备(图4)。  图4:主控制器与独立从设备(左)及菊花链从设备通信(右)要与从设备单独通信,主控制器必须提供多重从设备选择信号。该配置通常用于必须单独访问多个模数转换器(ADC)及数模转换器(DAC)的数据采集系统中。菊花链从设备只需要主控制器提供一个从设备选择信号,因为这种配置要求所有从设备同时启用,以确保数据不间断地流经该链路中的所有移位寄存器。典型应用是工业I/O 模块中的级联多通道输入串行器与输出驱动器。EDN China(edn-china)阅读原文  查看原文  分享到微信  文章为作者独立观点,不代表大不六文章网立场
EDN Chinaedn-chinaEDN China电子技术设计为中国电子设计工程师提供前沿的电子设计资讯、设计实例,针对中国设计经理人和工程师的特殊需要,不断提供最先进和有深度的设计技术和应用方案,启发您的设计灵感,助您拓宽设计思路。
(转载请注明出处和)查看: 3979|回复: 42
请教一个关于spi实验--flash写入的问题
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
668445daf0d7a0a37ac5faf0db65dc84_346.jpg (0 Bytes, 下载次数: 2)
22:54 上传
我不理解用红色线划起来的这句,为什么要先写入制定长度的数据,然后擦除,又写入?干嘛不直接擦出再写入?竟然要擦除为什么还要在擦除前还要写入呢?
cdb_752.jpg (0 Bytes, 下载次数: 1)
22:54 上传
我刚开始以为自己理解了,直到看到上面这个图之后,跟自己想法不一致,发现自己可能想错了。我主要是对CPHA=1的情况不理解,所谓的第二个跳变沿数据被采样,是指每次都是隔1个跳变才采样数据吗?即第2、4、6、8...个跳变沿才把数据读走吗?我自己的理解是当CPOL=1时是高电平位空闲状态,那每次采样数据应该要等SCK是空闲状态(即高电平)后才进行取样,也就是说每次是高变低(即下降沿)才取样数据,可是这样的想法跟图中不一致,所以可能是我自己错了。 & &另外我想问下,CPHA等于0和1这两种情况在什么情况下会体现出其中它们自己的优势?
c2f9bd6b610dc3cf2aee_509.jpg (0 Bytes, 下载次数: 1)
22:54 上传
这是原子22讲视频的截图,倒数第三行开始红线划的这句,CPHA=0,CPOL=0时,应该是上升沿采样数据呀,CPOL=1时,应该是下降沿采样数据呀,不是吗?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
金钱101305
在线时间585 小时
回复【楼主位】 ljjdglg520 :
---------------------------------
66ebe36bf93de7876089dd_419.jpg (0 Bytes, 下载次数: 1)
22:54 上传
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【2楼】正点原子:
---------------------------------
是不是这样理解:如果想写入的部分需要擦除,就先把那一块(即对应你图中的0~4096)上的数据先拷贝到stm32的内存里(其实应该就把白色的区域拷贝到stm32内存上就可以了吧,因为我们想保存的只是白色区域的数据,黑色区域的数据是要擦除的),第一次写入其实是往stm32的内存上写,要擦除的是w25q64上0~4096的数据,第二次写入就是把stm32上刚写入的数据再拷贝到0~4096上。
如果这个前提是正确的话,那么往stm32内存写数据有没有规定也要在stm32内存地址为0~4096上写数据?还是说随便找一块区域写就可以?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
金钱101305
在线时间585 小时
回复【3楼】ljjdglg520:
---------------------------------
如果是白色区域,那就不需要擦了,直接写就是了。。。
只要不到黑色区域内去,就没问题。
但问题是,一旦你进入到黑色区域,那就必须要擦,而且是整个扇区的擦,所以你原来的数据都不复存在...
自然要先保存原来的,等擦完,再写进去,所以。。。速度就慢了。。。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【4楼】正点原子:
---------------------------------
所以第一次写入是在stm32的内存上写而不是w25q64上写,是吗?我觉得书上这样写有歧义哦,让人误解,也可能是我自己理解能力的问题。。。
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【5楼】ljjdglg520:
---------------------------------
w25q64在写入数据的时候如果写入的地址的数据不是1的话,写入会失败的,刚开始弄这个家伙的时候就尝试过,老是写入失败,后来做了整个扇区内容读取出来,判断看是不是1,不是就擦除,是就直接写入数据,这样就成功了,那时候用的是51,很是郁闷,内存小,难搞,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【6楼】Badu_Space:
---------------------------------
请问判断地址是否有数据的时候,读到的数据是1和数据是0xff一样的吗?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【7楼】ljjdglg520:
---------------------------------
0xff不是全部都是1了么
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【8楼】Badu_Space:
---------------------------------
-&-噢噢,谢谢啦
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【8楼】Badu_Space:
---------------------------------
师兄,有问题要请教一下噢,请看一看一楼,我在后面补了问题。能不能跟我讲一下,谢谢!
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
金钱101305
在线时间585 小时
回复【3楼】ljjdglg520:
---------------------------------
随便一块都可以。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【11楼】正点原子:
---------------------------------
噢噢,原子哥顺面帮我看看我一楼后面补的问题吧^_^
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
金钱101305
在线时间585 小时
回复【12楼】ljjdglg520:
---------------------------------
当然不一样了。。。
0X01就是1
0XFF就是255啊。。
1=255?
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【13楼】正点原子:
---------------------------------
-&-7楼说一样的。。那判断地址是否有数据的时候,这一句&if(SPI_Flash_BUF[secoff+i]!=0xff)&&判断不等于0xff应该没错,但是按5楼的说法,这一句是不是改成&if(SPI_Flash_BUF[secoff+i]!=1)&&???搞糊涂了。。。
另外我想再问一下,在读取spi&flash的时候,在发地址前有这么一句&SPI2_ReadWriteByte(W25X_ReadData);&&我查了下W25X_ReadData的值是0x02,而书前面提到:若主机要读取从机的1字节,就必须发送一个空自己来引发从机的传输。&&所以不是应该发一个空字节(即0)吗?为什么发0x02?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【10楼】ljjdglg520:
---------------------------------
你得好好看下SPI通讯协议了,是上升沿采集数据,当总线空闲的时候,时钟线如果是高电平,那么下次采集数据的时候的上升沿在哪里?如果空闲时时钟线是低电平,那么下次采集数据的时候的上升沿又在哪里?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【15楼】Badu_Space:
---------------------------------
如果都是上升沿采集数据,你看CPHA=0,CPOL=1的图,每次上升沿来的时候数据都在变化,这样不行吧。我觉得这图应该是下降沿采集数据。
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【16楼】ljjdglg520:
---------------------------------
你还是好好看下SPI通讯协议再说吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【17楼】Badu_Space:
---------------------------------
当CPHA=0,CPOL=1时,下降沿采样数据,上升沿输出数据;
当CPHA=0,CPOL=0时,上降沿采样数据,下降沿输出数据;
当CPHA=1,CPOL=1时,上升沿采样数据,下降沿输出数据;
当CPHA=1,CPOL=0时,下降沿采样数据,上升沿输出数据;
是这样吗?我想问下,对应那个时序图,空闲状态指的是最前面还没开始采样数据的那段和最后数据传输完成的那段吗?我一开始还以为,例如在CPOL=1时,高电平是空闲状态,在中间采样数据和输出数据的时候出现了高电平,我之前就以为这个高电平是空闲状态,现在认真想想应该不算是空闲状态吧?如果以上的推论正确的话,那我应该理解了spi的时序
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【18楼】ljjdglg520:
---------------------------------
就是你不使用SPI的时候时钟线的电平
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【19楼】Badu_Space:
---------------------------------
所以就是最前面的那段和最后面的那段是空闲状态罗?
就是说我对时序图的理解正确了?我还不明白,CPHA等于0和1这两种情况有什么意义,反正都是传输,为什么要弄2种情况?在使用中怎样选择这2种情况?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【20楼】ljjdglg520:
---------------------------------
根据所接的器件的时序来设置,经典的就是NRF24L01这个芯片和SD卡,这两者的电平是不一样的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【21楼】Badu_Space:
---------------------------------
当CPHA=0,CPOL=1时,下降沿采样数据,上升沿输出数据;&
当CPHA=0,CPOL=0时,上降沿采样数据,下降沿输出数据;&
当CPHA=1,CPOL=1时,上升沿采样数据,下降沿输出数据;&
当CPHA=1,CPOL=0时,下降沿采样数据,上升沿输出数据;
如果上面的时序是正确的,是不是意味着原子的22讲视频中的ppt有错误?你看看我一楼最后面补的图,这图是从原子22讲视频里截图下来的
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【22楼】ljjdglg520:
---------------------------------
这句话应该是中文参考手册翻译上的一个笔误吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【23楼】Badu_Space:
---------------------------------
-&-怪不得。。。这句话差点搞死我,我就觉得怎么这么奇怪的。。。
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【24楼】ljjdglg520:
---------------------------------
呵呵,没事,理解了就行
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【25楼】Badu_Space:
---------------------------------
谢谢啦,大哥^_^
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
在线时间174 小时
回复【26楼】ljjdglg520:
---------------------------------
没事,太客气了,呵呵。互相学习嘛
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【27楼】Badu_Space:
---------------------------------
再次求救,还是spi实验的,当你要写数据的时候检测到区域中有数据不为1时,就把整个扇区擦除,但是书上提供的代码是把扇区擦除后就直接写数据,可是被擦除的扇区前面可能会有一部分的数据(即secoff这部分的数据)是我需要的,可是我看书上的程序看了很久都没找到恢复&secoff&这部分数据的代码,这样不会出错吗?
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
金钱101305
在线时间585 小时
回复【28楼】ljjdglg520:
---------------------------------
你还是没有看懂我在1楼的图片。。。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
在线时间174 小时
回复【28楼】ljjdglg520:
---------------------------------
原子哥1楼的图片不是已经写的很明白了么
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【30楼】Badu_Space:
---------------------------------
我实在找不到原子哥1楼中第二步的代码。。。假设一个扇区有10个字节,这整个扇区都有数据,前5个字节是我需要的,现在我从第6个开始写,于是我要擦除这整个扇区。但是这意味着我也要同时擦除了前5个我需要的字节,但是书上好像没有保存这5个字节相关的代码,默认前面擦出了的字节是我不需要的
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
金钱101305
在线时间585 小时
实在容易找:
31ca3e41df571e51b7f7c4_980.png (0 Bytes, 下载次数: 1)
22:54 上传
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【32楼】正点原子:
---------------------------------
-&-我还以为这句是为了199行的判断用的。。。江湖险恶,我太单纯了。。。谢谢啦
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
中级会员, 积分 254, 距离下一级还需 246 积分
在线时间4 小时
还是不太懂啊,楼主,能讲解一下吗,比如您第一个图中画横线部分
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【34楼】zzj:
---------------------------------
你有什么不明白的,从上面一直拉下来,这么多讨论,我觉得讲得很透彻了。其实你别搞那么复杂,就是你往w25qxx那芯片写数据之前,要判断你要写入的数据大小有没有超过所在的扇区剩余的部分,如果没有,就判断剩余那部分有没有数据(如果有数据你就不能往里面写了),如果有的话就要整个扇区擦除,因为这块芯片规定最少擦除面积是一个扇区,所以擦之前你要先把这个扇区前面的数据保存起来,擦完后再把之前的复制过来,再把你要写的内容写在剩余的部分
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
中级会员, 积分 254, 距离下一级还需 246 积分
在线时间4 小时
回复【35楼】ljjdglg520:
---------------------------------
明白了,谢谢!但这样说的话我还是觉得画红色横线部分有点怪怪的,好像语序说反了一样,应该先擦除再写入才对吧
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【36楼】zzj:
---------------------------------
我也觉得怪怪的...当初看了半天都不明白
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
新手上路, 积分 47, 距离下一级还需 3 积分
在线时间1 小时
你要先仔细认真看SPI协议部分,结合参考手册看寄存器,理解了之后再去一句一句读程序,一步走下来,就通了。该协议学习要提前了解FLASH的知识。
永远不要让别人来告诉你,你不会做什么,一旦那样,你就失去了自身的意义。你总是要提前准备好别人想不到的事情,一旦机遇来临,你就赢得了先机。
主题帖子精华
新手上路, 积分 24, 距离下一级还需 26 积分
在线时间0 小时
的确和参考手册不一致
主题帖子精华
中级会员, 积分 425, 距离下一级还需 75 积分
在线时间25 小时
回复【35楼】ljjdglg520:
---------------------------------
判断那个扇区剩余部分有没有数据是不是就是判断是不是等于0xff?
初学STM32,很多不懂,但是我相信坚持一定可以成功,向原子哥学习
主题帖子精华
高级会员, 积分 710, 距离下一级还需 290 积分
在线时间15 小时
回复【40楼】张氏拉都:
---------------------------------
是啊
成长不是衣服越来越小,裤子越来越短,而是心和梦想一起越来越大!
主题帖子精华
中级会员, 积分 425, 距离下一级还需 75 积分
在线时间25 小时
回复【41楼】ljjdglg520:
---------------------------------
我已经搞懂了,现在在研究si4432
初学STM32,很多不懂,但是我相信坚持一定可以成功,向原子哥学习
主题帖子精华
新手上路, 积分 7, 距离下一级还需 43 积分
在线时间1 小时
为什么往W25Q64中写入数据大于4096个字节时,读取出来的数据全是有错误,小于4096个字节却没有问题???
Powered by  SPI是一个环形总线结构,其时序其实很简单,即在的控制下,两个双向移位寄存器进行数据交换。    SPI数据传输4根线(数据输入),SDO(数据输出)、SCK(时钟)、cs(片选)。其中,CS控制芯片是否被选中,说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。在SPI方式下数据是一位一位的传输的,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过SDO线,数据在时钟上沿或下沿时改变,在紧接着的下沿或上沿被读取。完成一位数据传输,输入也使用同样原理。这样,8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。假设8位寄存器内装的是待发送数据,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候数据将会是高位数据SDO=1。下降沿到来的时候,SDI上的将被存到寄存器中去,寄存器=OlOlOlOSDI。8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。下面举一个实例来说明其数据传送过程。    假设主机和从机初始化就绪,并且主机的sbuff=Oxaa,从机的sbuff=Ox55,下面将分步对SPI的8个时钟的数据情况如下表所示(表中&上&表示上升沿,&下&表示下降沿)。
  一个完整的传送周期是16位,即两个字节。因为,首先主机要发送命令过去,然后从机根据主机的命令准备数据,主机在下一个8位时钟周期才把数据读回来。这样的传输方式有一个优点:普通的串行通信一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停。因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议,数据输入和输出线独立,所以允许同时完成数据的输入和输出。    对于不带SPI串行总线接口的MCS51系列来说,可以使用软件来模拟SPI的操作,包括串行时钟、数据输入和数据输出。如我们可以定义三个普通I/O口用来模拟SPI器件的SCK、MISO、MOSI。对于不同的串行接口外围芯片,它们的时钟时序是不同的。对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应将其串行时钟输出口的初始状态设置为1,而在允许接口后再置为0。这样,MCU在输出1位SCK时钟的同时,将使接口芯片串行左移,从而输出1位数据至单片机的模拟MISO线,此后再置SCK为l,使单片机从模拟的MOSI线输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入输出便宣告完成。此后再置SCK为0,模拟下1位数据的输入输出&&,依此循环8次,即可完成1次通过SPI总线传输8位数据的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为O,即在接口芯片允许时,先置SCK为1,以便外围接口芯片输出1位数据(MCU接收1位数据),之后再置时钟为0,使外围接口芯片接收1位数据(MCU发送1位数据),从而完成1位数据的传送。
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670&

我要回帖

更多关于 spi总线挂多个设备 的文章

 

随机推荐