完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Read Data 03h A23–A16 A15–A8 A7–A0 (D7–D0) (Next byte) continuous//寄存器内容
void Spi_Flash_ReadData(u32 addr,u8 *p,u32 sum) { u8 data=0,temp; u32 i; flash_cs=0;//片选得到芯片 spi_writereadbyte(0x03); //读数据 temp=addr>>16; spi_writereadbyte(temp);//读数据 temp=addr>>8; spi_writereadbyte(temp);//读数据 temp=addr; spi_writereadbyte(temp);//读数 spi_writereadbyte(0xff);//这里为何非加不可呢 for(i=0;i //这样就会自动读取出sum个数据了 flash_cs=1;//释放片选 //数据读取完成 } 当我们写完寄存器地址之后,还需要加入spi_writereadbyte(0xff);这句话,如果不加这8个周期,第一个读语句是读不到数据的,只有到第二个读才可以读到时序,这里我就很奇怪,对于指令0x03,w25x16官方给出的时序图的描述都是不用做8个时钟延时的,就可以直接读到一个数据,但是我们在实际操作当中,却要加,这是为什么呢? |
|
相关推荐
2个回答
|
|
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
{ u16 i; #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OS_ENTER_CRITICAL();//停止调度 #endif SPI_FLASH_CS=0; //使能器件 SPI2_ReadWriteByte(W25X_ReadData); //发送读取命令 SPI2_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址 SPI2_ReadWriteByte((u8)((ReadAddr)>>8)); SPI2_ReadWriteByte((u8)ReadAddr); for(i=0;i pBuffer=SPI2_ReadWriteByte(0XFF); //循环读数 } SPI_FLASH_CS=1; //取消片选 #ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了. OS_EXIT_CRITICAL();//准许调度 #endif } 这是我们开发板的读取函数,没你说的多加0XFF的问题.> |
|
|
|
哦,老大我找到原因了,因为我设置为从地址0开始读取,但是我实验之后,发现应该是从地址1才可以开始正常读取的,所以我加了8个延时,使得从1地址继续读取,读到数据了!所以是应该不存在地址0的!
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1645 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1564 浏览 1 评论
992 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
691 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1610 浏览 2 评论
1871浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
655浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
526浏览 3评论
542浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
515浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 21:59 , Processed in 0.560723 second(s), Total 44, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号