【AT32F421测评】+ W25Q16存储模块的读写
<p>在AT32F407等开发板上是配有W25Q128存储器的,那能否以外挂的方式由AT32F421来读写相应的存储器呢?</p><p>答案是肯定的,通过W25Q16存储模块即可对其读写功能加以验证,其连接情况及验证效果见图1所示。</p>
<p></p>
<p>图1 线路连接及验证效果</p>
<p>若打开串口,则可观察到其内部的数据传输过程,见图2和图3所示。</p>
<p></p>
<p>图2 测试结果</p>
<p></p>
<p>图3 测试结果</p>
<p>若将存储模块的电源端断开,则2个LED指示灯会闪烁一段时间以供提示,见图4所示。</p>
<p>而在串口上,则可见到图5所示的输出内容。</p>
<p></p>
<p>图4 指示灯提示</p>
<p></p>
<p>图5 错误提示</p>
<p> </p>
<p>在测试时,存储模块与MCU的连接关系为:</p>
<p>CS ---PA4</p>
<p>SCK ---PA5</p>
<p>MISO---PA6</p>
<p>MOSI---PA7</p>
<p>进行读写数据比较的函数为:</p>
<pre>
<code class="language-cpp">TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint16_t BufferLength)
{
while (BufferLength--)
{
if (*pBuffer1 != *pBuffer2)
{
return FAILED;
}
pBuffer1++;
pBuffer2++;
}
return PASSED;
}</code></pre>
<p> </p>
<p>实现读写功能验证的主程序为:</p>
<pre>
<code class="language-cpp">int main(void)
{
uint32_t i, Id;
TxDataInit();
UART_Print_Init(115200);
AT32_Board_Init();
SpiFlash_Init();
Id = SpiFlash_ReadID();
if(Id!=W25Q16)
{
printf("Spi flash init error!\r\n");
for(i=0;i<50;i++)
{
AT32_LEDn_Toggle(LED2);
AT32_LEDn_Toggle(LED3);
Delay_ms(100);
}
return 1;
}
else
{
printf("Check ID success! ID: %x\r\n", Id);
}
SpiFlash_Erase_Sector(FLASH_TEST_ADDR / SPIF_SECTOR_SIZE);
SpiFlash_Write(Buffer_Tx, FLASH_TEST_ADDR, BUF_SIZE);
SpiFlash_Read(Buffer_Rx, FLASH_TEST_ADDR, BUF_SIZE);
printf("Read Data: ");
for(i=0; i<BUF_SIZE; i++)
{
printf("%x ", Buffer_Rx);
}
printf("\r\n");
TransferStatus = Buffercmp(Buffer_Tx, Buffer_Rx, BUF_SIZE);
if(TransferStatus==PASSED)
{
AT32_LEDn_ON(LED2);
}
else
{
AT32_LEDn_OFF(LED2);
}
while (1);
}
</code></pre>
<p> </p>
<p>利用外挂的方式由AT32F421来读写相应的存储器,是检验该MCU的性能指标之一</p>
<p>楼主的测评写的很赞</p>
Jacktang 发表于 2021-5-15 09:18
利用外挂的方式由AT32F421来读写相应的存储器,是检验该MCU的性能指标之一
楼主的测评写的很赞
<p>感谢支持!</p>
<p>哈哈,天天看到大佬在测评!</p>
w494143467 发表于 2021-5-15 17:03
哈哈,天天看到大佬在测评!
<p>抓空儿做一点</p>
页:
[1]