打印
[AT32F407]

【AT-START-F407测评】+SPIM接口外扩闪存

[复制链接]
1021|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创# 前段时间感染新冠了,现在仍咳嗽不止,今天周末来分享一下最近使用AT-START-F407开发板的体验。关于AT-START-F407开发板,我们从官方的资料可知板载AT32F407VGT7微控制器是一个带有FPU内核的ARM Cortex® -M4F,32位处理器,内建1024 K字节的闪存存储器,96+128K字节的SRAM,LQFP100封装。板载AT-Link接口,可用板载AT-Link-EZ来编程和调试。板卡集成16M字节SPI闪存EN25QH128A作为扩充的闪存存储器区块3(Bank 3)使用。开发板的硬件框图如下:

      通过SPIM接口使用闪存存储器区块3时,JP8连体跳线须选择左侧SPIM端,此时PB1,PA8,PB10,PB11,PB6,和PB7没有连接到外部的I/O口扩展接口,也不能正常使用以太网MAC功能了,这点感觉有点差异,做网关项目能离开大容量存储?我司采用的NXP-K64开发的Zigbee网关方案,是采用外部存储设备、用户信息,并不影响以太网功能,采用的8M外部存储芯片原理图如下:

        AT-START-F407开发板上与外部存储芯片U4连接的原理图如下:

        AT-START-F407开发板的正面点位图如下:

      从点位图可知,启动模式选择跳线处印有BOOT0、BOOT1的标识。在启动时,通过对启动引脚配置可以选择三种启动模式中的一种。

      官方提供的SDK中有提供基于IAR,Keil的例程,本人习惯于Keil开发平台,在此之前,我们需要先将基于AT-START-F407的pack包安装到Keil中,雅特力官方已经提供,这里分享一下。
ArteryTek.AT32F403A_407_DFP.2.1.3.zip (348.27 KB)
      安装好pack支持包后,我们将下载好的“AT32F403A_407_Firmware_Library_V2.1.3.zip”解压出来,进入到“\project\at_start_f407\examples\flash”路径下,这四个工程都是关于flash操作的,没有工程中都写有“readme.txt”文档,文件结构很是规范,这里我们关注一下“operate_spim”工程。在这个工程中实现了对外部存储EN25QH128A的擦除,读写一个扇区的检测,成功则串口打印读写地址,三颗指示灯流水闪烁。部分代码展示:
#include "at32f403a_407_board.h"
#include "at32f403a_407_clock.h"
#include "operate_spim.h"

int main(void)
{
  system_clock_config();

  uart_print_init(115200);
       
  at32_board_init();

  spim_operate();

  while(1)
  {
  }
}
#include "at32f403a_407_board.h"
#include "operate_spim.h"
#include <string.h>

uint8_t write_buffer[4096];  /* the content writed to spim flash */
uint8_t read_buffer[4096];   /* the content read from spim flash */

void spim_init(void)
{
  gpio_init_type gpio_init_struct;

  crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init_struct.gpio_pins = GPIO_PINS_8;
  gpio_init(GPIOA, &gpio_init_struct);
  gpio_init_struct.gpio_pins = GPIO_PINS_1 | GPIO_PINS_6 | GPIO_PINS_7 | GPIO_PINS_10 | GPIO_PINS_11;
  gpio_init(GPIOB, &gpio_init_struct);

  gpio_pin_remap_config(EXT_SPIM_GMUX_1001, TRUE);
  flash_spim_model_select(FLASH_SPIM_MODEL2);

  while(flash_flag_get(FLASH_SPIM_OBF_FLAG));
  flash_spim_unlock();
  while(FLASH->ctrl3_bit.oplk);

  flash_spim_encryption_range_set(0);
  return;
}

void sector_read(uint32_t address, uint32_t sector_size, uint8_t *buf)
{
  while(sector_size)
  {
    *(uint32_t *)buf = *(uint32_t *)address;
    sector_size -= sizeof(uint32_t);
    address += sizeof(uint32_t);
    buf += sizeof(uint32_t);
  }
}

void spim_operate(void)
{
  uint16_t i = 0;
  flash_status_type status = FLASH_OPERATE_DONE;

  spim_init();

  for(i = 0; i < SPIM_SECTOR_SIZE; i++)
  {
    write_buffer[i] = i % 256;
  }

  status = flash_operation_wait_for(ERASE_TIMEOUT);

  if((status == FLASH_PROGRAM_ERROR) || (status == FLASH_EPP_ERROR))
    flash_flag_clear(FLASH_PRGMERR_FLAG | FLASH_EPPERR_FLAG);
  else if(status == FLASH_OPERATE_TIMEOUT)
  {
       编译完成后,将Micro USB数据线连接开发板的CN6接口,数据线的USB口连接PC端,此时打开PC中的串口助手,选择识别到的串口号,波特率设置成代码中指定的115200,Keil中选择CMSIS-DAP Debugger方式。


       下载完后,按一下RESET键,重启开发板,开发板与PC端的串口助手中呈现的效果如下图所示:


        此次SPIM外部存储操作体验就此告一段落,使用AT-START-F407开发板感觉下载调试很方便,虽然提供了JTAG接口,但有了AT-Link-EZ完全够用平时的下载调试需求了,能使用AT32F403CGT6作为AT-Link-EZ的MCU,值的点赞。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

1021

帖子

7

粉丝