[AT32F437] F437QSPI测试

[复制链接]
934|0
 楼主| 呐咯密密 发表于 2024-5-11 11:39 | 显示全部楼层 |阅读模式

   QSPI 控制器包含一个 Command(命令) 端口, 理论最大支持 4GB 地址空间范围的器件; 一个 XIP(直接地址映像读取)端口, 理论最大支持 256MB 地址空间范围的器件。

       我们先熟悉一下外设Flash的特性:

       EN25QH128将16MB的容量分为256个块(Block),每个块大小为64K字节,每个块又分为16个扇区(Sector),每个扇区4K个字节。EN25QH128的最小擦除单位为一个扇区,也就是每次必须擦除4K个字节。这样我们需要给EN25QH128开辟一个至少4K的缓存区,这样对SRAM要求比较高,要求芯片必须有4K以上SRAM才能很好的操作。EN25QH128的擦写周期多达10W次,具有20年的数据保存期限,支持电压为2.7~3.6V,EN25QH128支持标准的SPI,还支持双输出/四输出的QSPI,最大SPI时钟可以到80Mhz(双输出时相当于160Mhz,四输出时相当于320M)。

  1.   /* qspi config */
  2.   qspi_config();

  3.   /* switch to cmd port */
  4.   qspi_xip_enable(QSPI1, FALSE);

  5.   /* set sclk */
  6.   qspi_clk_division_set(QSPI1, QSPI_CLK_DIV_4);

  7.   /* set sck idle mode 0 */
  8.   qspi_sck_mode_set(QSPI1, QSPI_SCK_MODE_0);

  9.   /* set wip in bit 0 */
  10.   qspi_busy_config(QSPI1, QSPI_BUSY_OFFSET_0);

  11.   /* erase */
  12.   qspi_erase(0);
  1.   /* read */
  2.   qspi_data_read(0, TEST_SIZE, rbuf);

  3.   for(i = 0; i < TEST_SIZE; i++)
  4.   {
  5.     if(rbuf[i] != 0xFF)
  6.     {
  7.       err = 1;
  8.       break;
  9.     }
  10.   }


  1.   /* program */
  2.   qspi_data_write(0, TEST_SIZE, wbuf);

  3.   /* read */
  4.   qspi_data_read(0, TEST_SIZE, rbuf);

  1.   if(memcmp(rbuf, wbuf, TEST_SIZE))
  2.   {
  3.     err = 1;
  4.   }

  5.   while(1)
  6.   {
  7.     if(err == 0)
  8.     {
  9.       at32_led_toggle(LED3);
  10.       delay_ms(300);
  11.     }
  12.     else
  13.     {
  14.       at32_led_toggle(LED2);
  15.       delay_ms(300);
  16.     }
  17.   }



您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:苏州澜宭自动化科技嵌入式工程师
简介:本人从事磁编码器研发工作,负责开发2500线增量式磁编码器以及17位、23位绝对值式磁编码器,拥有多年嵌入式开发经验,精通STM32、GD32、N32等多种品牌单片机,熟练使用单片机各种外设。

568

主题

4085

帖子

56

粉丝
快速回复 在线客服 返回列表 返回顶部