大侠们好,现在折腾 N25Q512 这个芯片,现在能够正常读取 芯片 ID 号了,而且也是正确的
芯片工作模式设置为 QUAD 与 4字节模式,读取标志寄存器查看是否设置成功,结果设置是正确的
读取到的芯片 ID 号:
资料介绍的 芯片ID 号:
读取到的id号与资料介绍的是完全一致的
现在就是读取数据错误,全部都为 0x88
测试读数据前先把读取的一个扇区已经擦除了,再直接读取数据全部都为 0x88,正常来说应该是0xff才对
测试擦除一个扇区大概需要240ms左右,这个擦除时间应该算是正常的了,现在问题就出在数据读取上了
有哪位知道请指点指点几下啊 ????????!!!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
本帖最后由 hpdell 于 2016-12-16 14:29 编辑
你好,我现在把 N25Q512的程序全部上传,包括进入 QUAD 及4字节模式
但是没有找到他们之间的对应关系具体该如何设置 ??
下面的这个图片对应的是 MX25L51245G 这个芯片的,别人的貌似写得的比较详细,一看就明白了
// 读写测试函数
void QSPI_ReadWriteDemo(void)
{
static uint8_t qspi_tx_buff[256], qspi_rx_buff[256];
uint32_t RWDataSize = 256;
// uint8_t * qspi_tx_buff = (uint8_t *)mymalloc(SRAMEX, RWDataSize );
// uint8_t * qspi_rx_buff = (uint8_t *)mymalloc(SRAMEX, RWDataSize );
uint8_t i = 0;
uint32_t cc = 0;
uint32_t QspiAddr_RW;
uint32_t TimeBegin, TimeEnd;
// if(( !qspi_tx_buff) || ( !qspi_rx_buff )) // 内存申请失败
// printf("QSPI SDRAM mymalloc Error ... ... ");
for(cc=0;cc < ( RWDataSize );cc++)
{
qspi_tx_buff[cc] = i * 1 ;
qspi_rx_buff[cc] = 0 ;
i ++;
}
{
TimeBegin = HAL_GetTick();
if(QSPI_EraseSector(0) != QSPI_OK) //擦除这个扇区
return ;
TimeEnd = HAL_GetTick();
printf("QSPI QSPI Erase Sector ... ... %dms, %d " , TimeEnd - TimeBegin, cc); // 擦除一个扇区大概是240ms左右
}
QspiAddr_RW = (0 * 4096) + 0;
QSPI_ReadBuff( &qspi_rx_buff[0], (uint32_t)(QspiAddr_RW ), RWDataSize); // 擦除完成后就直接读取,但是读回来的数据全部都是 0x88 ???
TimeBegin = HAL_GetTick();
QSPI_WritePageByte( &qspi_tx_buff[0], (uint32_t)(QspiAddr_RW ), RWDataSize);
TimeEnd = HAL_GetTick();
printf("QSPI Write 8192 * 4 End ... ... %dms " , TimeEnd - TimeBegin);
TimeBegin = HAL_GetTick();
QSPI_ReadBuff( &qspi_rx_buff[0], (uint32_t)(QspiAddr_RW ), RWDataSize);
TimeEnd = HAL_GetTick();
printf("QSPI Read 8192 * 4 End ... ... %dms " , TimeEnd - TimeBegin);
if( Buffercmp_8(&qspi_tx_buff[0], &qspi_rx_buff[0], RWDataSize) == 0)
printf("QSPI Data Read Write 8192 * 4 Test OK ... DD ");
else
printf("QSPI Data Read Write 8192 * 4 Test Error ... EE ");
// myfree(SRAMEX, qspi_tx_buff);
// myfree(SRAMEX, qspi_rx_buff);
}
一周热门 更多>