关于SPI读数函数的几个疑问!

2019-08-16 19:26发布


void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)   

      u16 i;        
    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<NumByteToRead;i++)

        pBuffer=SPI2_ReadWriteByte(0XFF);   //循环读数  
    }
SPI_FLASH_CS=1;                            //取消片选          
}


疑问1:按照这个函数的设计,本意是,先发送地址后,然后一次读取数据。可是我仔细一想,既然地址都写入了,再往这些地址里写入 0xff ,  那么读出的数据 岂不是都是  0xff ?   
疑问2:用库函数操作spi确实简单,在初始化部分配置完spi后, 感觉后面的读和写函数 好像与spi的时序没有啥关系? 
疑问3: 一页 到底有多大地址范围?

实在想不明白,求大侠指点,不胜感激!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
jiutianshenjian
1楼-- · 2019-08-17 16:03
改上海了,好吧。。。。
sara9999
2楼-- · 2019-08-17 18:27
 精彩回答 2  元偷偷看……
shell贝
3楼-- · 2019-08-17 23:05
芯片手册上这么说:11.2.8读取数据指令“(03H)” 
读数据指令允许一个或多个数据字节被顺序地从存储器中读出。该 
指令通过驱动/ CS引脚为低电平,然后转移指令代码“03H”之后发起的 
一个24位地址(A23-A0)为DI引脚。代码和地址位被锁存的上升沿 
CLK引脚。收到地址后,指定的存储单元的数据字节将被移出

我的理解是  数据字节被移出后 被保存到移位寄存器中,然后主机发送0Xff,交换从机寄存器中的内容,之后从机寄存器的寄存器的内容变为0xff,主机则得到读取的数据
sara9999
4楼-- · 2019-08-18 00:25
回复【10楼】shell贝:
---------------------------------

不知道啥情况,始终读数不正确,要么为 0xff,要么为0x00。 
问题描述在下面:
http://www.openedv.com/posts/list/0/42523.htm?fromAll=0#243809

我实在找不出原因,麻烦你帮我看一下,非常感谢!!!
Just Beat It
5楼-- · 2019-08-18 04:39
问题2:例程用的是硬件spi,时序stm32自己就完成了。
star_66666
6楼-- · 2019-08-18 08:04
都是HAL苦的,要寄存器版本的

一周热门 更多>