初级会员

- 积分
- 83
- 金钱
- 83
- 注册时间
- 2014-10-22
- 在线时间
- 0 小时
|
5金钱
先前有一块MINI板,后来又买了另一块,flash是SST25VF016。用SPI能读ID、读写状态,可读数据时总返回0。
想请教几个问题,麻烦大家了:
1、能读ID、读写状态,能说明SPI相关的配置没问题吗
2、读数据为0,可能是什么原因导致的呢
相关代码如下:
/****************************************************************************
* 名 称:void SPI_Flash_Read(u8* pBuffer, u32 addr, u16 NumByteToRead)
* 功 能:高速读取芯片连续地址的内容,最大可读取128个字节
* 输 入:pBuffer:数据存储区
* ReadAddr:开始读取的地址(000000H-1FFFFFH),24bit
* NumByteToRead:要读取的字节数
****************************************************************************/
void SPI_Flash_Read(u8* pBuffer,u32 ReadAddr,u16 NumByteToRead)
{
u16 i;
SPI_FLASH_CS=0; //使能器件
SPI1_ReadWriteByte(SST25_ReadData); //发送读取命令
SPI1_ReadWriteByte((u8)((ReadAddr)>>16)); //发送24bit地址
SPI1_ReadWriteByte((u8)((ReadAddr)>>8));
SPI1_ReadWriteByte((u8)ReadAddr);
SPI1_ReadWriteByte(0); //空字节
for(i=0;i<NumByteToRead;i++)
{
pBuffer=SPI1_ReadWriteByte(0);; //循环读数
delay_us(5);
}
SPI_FLASH_CS=1; //取消片选
}
//SPIx 读写一个字节
//TxData:要写入的字节
//返回值:读取到的字节
u8 SPI1_ReadWriteByte(u8 TxData)
{
u16 retry=0;
while((SPI1->SR&1<<1)==0); //等待发送区空
/*{
retry++;
if(retry>=0XFFFE) return 0; //超时退出
} */
SPI1->DR=TxData; //发送一个byte
retry=0;
while((SPI1->SR&1<<0)==0); //等待接收完一个byte
/*{
retry++;
if(retry>=0XFFFE) return 0; //超时退出
} */
return SPI1->DR; //返回收到的数据
}
|
最佳答案
查看完整内容[请看2#楼]
回复【3楼】八度空间:
---------------------------------
谢谢,已经找到原因了,是硬件上把SPI1的SCK和MOSI引脚短接了
|