OM6621F如何配置外部Flash跑代码

pengam · 328次点击 · 2023-08-23

需要配置外部Flash跑代码,主要有以下几点:

1、修改scatter文件,外部flash总线地址范围是从0x00800000~0x00B00000,所以其大小0x00300000字节(3MB)

     因此,需要将scatter文件中的0x00403000全部替换为0x00803000,加载长度修改为0x00300000

2、硬件上外部flash的IO分配的是CS=P07, MOSI=P08 CLK=P09 MISO=P02, 注意应用预留这4个口;

     另外,我司的EVB上有预留flash封装,需要短路F_VCC和VBAT,以及焊接HOLD的上拉R8(10K)和C14(0.1uF);

3、代码配置,主要是休眠后唤醒需要重新配置flash,因为休眠芯片会断电所有外设;

     并且需要将唤醒后通过CO_SECTION_RAMTEXT属性将相关的函数的代码放入RAM中运行;

4、测试OK的Flash是puya的P25Q80U,附件文件解压后有测试OK的bin和对应的main.c以及scatter文件,

      该bin会通过P05输出波特率为921600的打印信息,通过蓝牙可以搜索到名称为"----6621D----"的设备;

#if EXT_XIP_FLASH_ENABLE
  #define EXT_FLASH_CS_PIN        (7)
  #define EXT_FLASH_MOSI_PIN      (8)
  #define EXT_FLASH_CLK_PIN       (9)
  #define EXT_FLASH_MISO_PIN      (2)
CO_SECTION_RAMTEXT static void ext_xip_flash_restore(void)
{    
  static sf_config_t ext_flash_config={.delay=5,
                                       .freq_hz=6,
                                       .width=2};

  pmu_pin_mode_set(BITMASK(EXT_FLASH_MOSI_PIN), PMU_PIN_MODE_PU);
   
  pinmux_config(EXT_FLASH_CS_PIN,  PINMUX_SFLASH1_CSN_CFG);
  pmu_pin_mode_set(BITMASK(EXT_FLASH_CLK_PIN), PMU_PIN_MODE_PP);
 
  pinmux_config(EXT_FLASH_CLK_PIN,  PINMUX_SFLASH1_CK_CFG);
  pmu_pin_mode_set(BITMASK(EXT_FLASH_CLK_PIN), PMU_PIN_MODE_PP);
 
  pinmux_config(EXT_FLASH_MOSI_PIN,  PINMUX_SFLASH1_SI_CFG);
  pmu_pin_mode_set(BITMASK(EXT_FLASH_MOSI_PIN), PMU_PIN_MODE_PP);  
 
  pinmux_config(EXT_FLASH_MISO_PIN,  PINMUX_SFLASH1_SO_CFG);
  pmu_pin_mode_set(BITMASK(EXT_FLASH_MISO_PIN), PMU_PIN_MODE_PU);
 
  sf_enable(HS_SF1, 0);
  sf_config(HS_SF1, 0, &ext_flash_config);
 
//  bool flash_detect;
//  flash_detect=sf_detect(HS_SF1, 0);
}
#endif
CO_SECTION_RAMTEXT static void peripheral_restore(void)
{
#if defined(CONFIG_LOG_OUTPUT)
    uart_open(DEBUG_UART, DEBUG_UART_BAUDRATE, UART_FLOW_CTRL_DISABLED, NULL);
#endif  
}

CO_SECTION_RAMTEXT static void power_sleep_event_handler(co_power_sleep_state_t sleep_state, co_power_status_t power_status)
{
    switch(sleep_state)
    {
        case POWER_SLEEP_ENTRY:
            break;

        case POWER_SLEEP_LEAVE_TOP_HALF:            
            peripheral_restore();
#if EXT_XIP_FLASH_ENABLE        
            ext_xip_flash_restore();
#endif        
            break;

        case POWER_SLEEP_LEAVE_BOTTOM_HALF:
            break;
    }
}


OM6621F_ext_XIP_flash_Test-202308235027.rar
被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站