本帖最后由 hpdell 于 2016-11-13 17:50 编辑
各位大神们,最近在捣鼓 QSPI 的读写
发现 QSPI 的读写速度 比 SPI 的读写速度 貌似差不多,
同样都是读写 8192*2个字节的数据
SPI Write 8192 * 2 End ... ... 514ms
SPI Read 8192 * 2 End ... ... 10ms
SPI Data Read Write Auto Erase Sector OK .. SWS
QSPI Write 8192 * 2 End ... ... 523ms
QSPI Read 8192 * 2 End ... ... 4ms
QSPI Data Read Write Auto Erase Sector OK ... DD
在读取上要稍微快点,但是我的 SPI 的时钟 也只有 27MHz, 如果提高 SPI 的时钟频率,那么有可能 这个 SPI 的读写速度还会超过 QSPI 的吧,
spi 的芯片:w25q128fvsg
qspi芯片: w25q256fvfg
大神们看看 是什么歌情况 ???
spi的读取函数
_SPI_FLASH_TATUS_T SPI_FlashReadBuffer(uint8_t * _pBuf, uint32_t _uiReadAddr, uint32_t _uiSize)
{
/* 如果读取的数据长度为0或者超出串行Flash地址空间,则直接返回 */
if ((_uiReadAddr + _uiSize) > g_tFlash.TotalSize)
{
return SPI_FLASH_OUT_SIZE;
}
if (_uiSize == 0)
{
return SPI_FLASH_OUT_SIZE;
}
SPI_FLASH_CS_L;
#if 1
// 芯片 W25Q256, 512 是 32bit地址
if(g_tFlash.ChipID >= JEDEC_W25Q256FVSG_ID) //如果是W25Q256的话地址为4字节的,要发送最高8位
{
uint8_t TxAddr[5] ;
TxAddr[0] = W25Q_ReadData;
TxAddr[1] = (uint8_t)((_uiReadAddr)>>24);
TxAddr[2] = (uint8_t)((_uiReadAddr)>>16);
TxAddr[3] = (uint8_t)((_uiReadAddr)>>8);
TxAddr[4] = (uint8_t)((_uiReadAddr)>>0);
HAL_SPI_Transmit(&hspi2, &TxAddr[0], 5, 0x1fff);
}
else
{
uint8_t TxAddr[5] ;
TxAddr[0] = W25Q_ReadData;
TxAddr[1] = (uint8_t)((_uiReadAddr)>>16);
TxAddr[2] = (uint8_t)((_uiReadAddr)>>8);
TxAddr[3] = (uint8_t)((_uiReadAddr)>>0);
HAL_SPI_Transmit(&hspi2, &TxAddr[0], 4, 0x1fff);
}
HAL_SPI_Receive( &hspi2, (uint8_t *)_pBuf, _uiSize, 0x3fffff); // 采用此方法接收数据速度至少快4倍或以上
#else
SPI_ReadWriteByte(W25Q_ReadData);
// 芯片 W25Q256, 512 是 32bit地址
if(g_tFlash.ChipID >= JEDEC_W25Q256FVSG_ID) //如果是W25Q256的话地址为4字节的,要发送最高8位
{
SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>24));
}
SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>16)); // 发送 24 bit 地址
SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>8));
SPI_ReadWriteByte((uint8_t)((_uiReadAddr)>>0));
/* 这段读取速度太慢了,所以屏蔽了
while (_uiSize--)
{
*_pBuf++ = SPI_ReadWriteByte(0XFF); // 读一个字节并存储到pBuf,读完后指针自加1
}
*/
HAL_SPI_Receive( &hspi2, (uint8_t *)_pBuf, _uiSize, 0x3fffff); // 采用此方法接收数据速度至少快4倍或以上
#endif
SPI_FLASH_CS_H;
return SPI_FLASH_OK;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你好,应该是开启了 QPI 模式的
开启了qpi 模式 后,读取的 ID 值是 0xEF6019, 如果没有开启的话,读取的ID 值是 0xEF4018
而且传输数据、地址也都是设置的为 4bit 模式进行的
io口的波形貌似是正常的
一周热门 更多>