请教关于SPI FLASH读取UNIQUE ID问题

请教关于SPI FLASH读取UNIQUE ID问题,第1张

1flash的数据是按照sector未单位存储。

要读flash特定位置的数据,可以随便找sector来读写,最好靠后点,前面的数据是系统的。

2至于确定往内存到flash的数据是否有错,可以做checksum校验,或者别的方式校验

sf - SPI flash sub-system

STM32F207

SPI

Flash *** 作中,读出的数据为0x00,求解答

AT45DB652D内部是分页的,您可以按页来读取,该Flash芯片是SPI接口的,建议读取Flash时,使用DMA读取,否则这高速DataFlash就看不出高速了。

通过串口发出的时候,也是按包来封装,可以1页分成若干个若,我们建议串口单次连续发送的数据不要超过256字节,加上辅助字节,最好不要超过300字节。而且需要加上校验和重发机制。

建议读流程如下:

1

上位机将需要的页号或多个页号发给STM32

2

STM32启动SPI *** 作,逐页读取,并采取先进先出的方式保存在一个FIFO缓冲区中,该缓冲区以页大小为单位

3

通过串口拼包发出。

void SpiWriteRegister (uchar reg, uchar value)

{

RF_NSEL = 0; // 片选拉低启动SPI通讯

SPI0DAT = (reg|0x80); // 写入1个字节的寄存器地址

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

SPI0DAT = value; // 继续写入第二个字节(寄存器值)

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

RF_NSEL = 1; // 片选拉高结束SPI通讯

}

//-----------------------------------------------------------------------------

//函数描述: SPI读取函数

//相关参数:

//返回信息:

//

//-----------------------------------------------------------------------------

uchar SpiReadRegister (uchar reg)

{

RF_NSEL = 0; // 片选拉低启动SPI通讯

SPI0DAT = reg; // 写入1个字节的寄存器地址

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

SPI0DAT = 0xFF; // 写一个Dummy字节(因为要读取的话必须用写入来启动一个交换数据的传输),当写入完成后从机的数据也完成了读入。

while( SPIF == 0); // 等待SPI传输完成

SPIF = 0;

RF_NSEL = 1; // 片选拉高结束SPI通讯

return SPI0DAT; // 返回读取的值(在SPI0DAT=0xFF中完成读取)

}

需要注意的是读写 *** 作实际上完成的都是数据的交换,即主机传送1个字节给从机,从机同时传送1个字节给主机。所以读 *** 作看起来像是写数据,但实际上写入完成后就可以从SPI0DAT中获得从机的应答数据了。

以上就是关于请教关于SPI FLASH读取UNIQUE ID问题全部的内容,包括:请教关于SPI FLASH读取UNIQUE ID问题、配置SPI1时,读取SPI flash的ID始终为0x00,求解答、帮忙分析一个这个spi读写程序,详细一点的,解释一下。怎么觉得读和写的内容怎么差不多呢,怎么实现的读写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9320008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存