jinglixixi 发表于 2023-5-18 08:31

【N32WB031_STB开发板测评】+W25Q16模块的读写

<div class='showpostmsg'><p>在N32WB031的例程中提供了基于W25Q128的读写测试程序,但对于W25Q系列的不同存储芯片,其芯片识别ID是不同的。</p>

<p >为了测试手头的W25Q16模块,需多例程进行相应的修改。</p>

<p >例如对于W25Q128的定义为:</p>

<p >#define sFLASH_W25Q128_ID 0x00EF4014</p>

<p >而对于W25Q16来说需进行如下的修改:</p>

<p >#define sFLASH_M25Q16_ID&nbsp; 0xEF4015</p>

<p >#define sFLASH_ID sFLASH_M25Q16_ID</p>

<p >W25Q16模块与开发板的连接关系为:</p>

<p >CS---PA0</p>

<p >CLK---PA1</p>

<p >DO---PA3</p>

<p >DI---PA2</p>

<p >为便于以LED来指示测试的结果,对LED的定义为:</p>

<p >#define LED1_PORT GPIOB</p>

<p >#define LED1_PIN&nbsp; GPIO_PIN_0</p>

<p >&nbsp;</p>

<p >#define LED2_PORT GPIOA</p>

<p >#define LED2_PIN&nbsp; GPIO_PIN_6</p>

<p>对W25Q16模块进行读写的测试主程序为:</p>

<pre>
<code class="language-cpp">int main(void)
{
    LedInit(LED1_PORT, LED1_PIN);
    LedInit(LED2_PORT, LED2_PIN);
    LedOff(LED1_PORT, LED1_PIN);
    LedOff(LED2_PORT, LED2_PIN);
    sFLASH_Init();
    FlashID = sFLASH_ReadID();
    if (FlashID == sFLASH_ID)
    {
      sFLASH_EraseSector(FLASH_SectorToErase);
      sFLASH_WriteBuffer(Tx_Buffer, FLASH_WriteAddress, BufferSize);
      sFLASH_ReadBuffer(Rx_Buffer, FLASH_ReadAddress, BufferSize);
      TransferStatus1 = Buffercmp(Tx_Buffer, Rx_Buffer, BufferSize);
      sFLASH_EraseSector(FLASH_SectorToErase);
      sFLASH_ReadBuffer(Rx_Buffer, FLASH_ReadAddress, BufferSize);
      for (Index = 0; Index &lt; BufferSize; Index++)
      {
            if (Rx_Buffer != 0xFF)
            {
                TransferStatus2 = FAILED;
            }
      }
      
      if((TransferStatus1 == SUCCESS) &amp;&amp; (TransferStatus2 == SUCCESS))
      {
            /* OK: Turn on LED1 */
            LedOn(LED1_PORT, LED1_PIN);
      }
      else
      {
            /* Error: Turn on LED2 */
            LedOn(LED2_PORT, LED2_PIN);
      }
      /* TransferStatus2 = PASSED, if the specified sector part is erased */
      /* TransferStatus2 = FAILED, if the specified sector part is not well erased */
    }
    else
    {
            /* Error: Turn on LED2 */
            LedOn(LED2_PORT, LED2_PIN);
    }
    while (1)
    {
    }
}
</code></pre>

<p>在编译下载程序后,其测试效果如图所示,由于LED1被点亮说明测试成功;反之若去掉W25Q16模块的电源,则LED2被点亮说明测试失败。</p>

<p >有了W25Q16模块这样的外挂存储器,可以有效地对存储空间进行扩展。</p>

<p >图1 读写状态</p>

<p >&nbsp;</p>

<p > 图2 未连接状态&nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

wangerxian 发表于 2023-5-18 13:59

<p>W25Q128和W25Q16寄存器应该是一样的吧?就是存储大小不一样?</p>

jinglixixi 发表于 2023-5-18 14:51

wangerxian 发表于 2023-5-18 13:59
W25Q128和W25Q16寄存器应该是一样的吧?就是存储大小不一样?

<p>是,此外还应注意其识别ID的不同。</p>

lugl4313820 发表于 2023-5-20 08:26

66666
页: [1]
查看完整版本: 【N32WB031_STB开发板测评】+W25Q16模块的读写