关于FR8008GP FLASH读写问题



  • 参照论坛中的方法已经对app_config.h文件进行了修改
    *// <h> FLASH Configuration
    // <o> FLASH_CAPACITY
    // <i> Internal Flash capacity selection, Default: 4Mb
    // <0x01000000=> 8Mb
    // <0x00080000=> 4Mb
    // <0x00040000=> 2Mb

    #define FLASH_CAPACITY 0x01000000

    #if FLASH_CAPACITY == 0x00080000
    #define BLE_STACK_KEY_STORAGE_OFFSET 0x7F000
    #define BLE_BONDING_INFO_SAVE_ADDR 0x7D000
    #define BLE_REMOTE_SERVICE_SAVE_ADDR 0x7E000
    #elif FLASH_CAPACITY == 0x00040000
    #define BLE_STACK_KEY_STORAGE_OFFSET 0x3F000
    #define BLE_BONDING_INFO_SAVE_ADDR 0x3D000
    #define BLE_REMOTE_SERVICE_SAVE_ADDR 0x3E000
    #elif FLASH_CAPACITY == 0x01000000
    #define BLE_STACK_KEY_STORAGE_OFFSET 0xFFF000
    #define BLE_BONDING_INFO_SAVE_ADDR 0xFFD000
    #define BLE_REMOTE_SERVICE_SAVE_ADDR 0xFFE000
    #else
    #error "flash capacity configuration error!"
    #endif //FOR_2M_FLASH*
    flash测试代码如下
    *#define FLASH_ADDR (0x10021000)
    #define FLASH_SECTOR_SIZE (0x100)
    #define FLASH_WRITE_LEN (0x100)
    void FlashFuncTest(void)
    {
    co_printf("FLASH FUNC TEST\r\n");
    uint8_t read_retu_num=0xf,erase_retu_num=0xf,write_retu_num=0xf;
    uint8_t w_buf[FLASH_WRITE_LEN] = {0};
    uint8_t r_buf[FLASH_WRITE_LEN] = {0};

    for(uint16_t i = 0;i < FLASH_WRITE_LEN;i++)
    {
    	w_buf[i] = i;
    }
    
    co_printf("**********************Start->Erase**********************\r\n");
    erase_retu_num=flash_erase(FLASH_ADDR, FLASH_SECTOR_SIZE);
    co_printf("erase_retu_num %d\r\n",erase_retu_num);
    co_printf("Erase->Write\r\n");
    write_retu_num=flash_write(FLASH_ADDR, FLASH_WRITE_LEN, w_buf);
    
    co_printf("write_retu_num %d\r\n",write_retu_num);
    co_delay_100us(10*2000);
    erase_retu_num=flash_read(FLASH_ADDR, FLASH_WRITE_LEN, r_buf);
    co_printf("read retu_num %d\r\n",read_retu_num);
    co_printf("Write->Read\r\n");
    show_reg(r_buf, FLASH_WRITE_LEN, 1);
    

    }*
    通过串口打印,发现写入与读取的数据不一致,这是哪里的问题,该怎么解决


  • Global Moderator

    @dsg关于FR8008GP FLASH读写问题 中说:

    FLASH_ADDR

    FLASH_ADDR 这个应该是flash的偏移地址,不是映射地址



  • @zr 将FLASH_ADDR改为0x15E000,读出来的与写入的还是不一致
    const struct jump_table_image_t _jump_table_image attribute((section("jump_table_1"))) =
    {
    .image_type = IMAGE_TYPE_APP,
    .image_size = 0x19000 * 6,
    };程序中image_size是600kb,加上b区域的600kb,再加上a和b区域固件信息的两个4kb,这些是1208kb,我的偏移地址对应的是1400kb,这样理解对吗?现在按照这个地址分配写入与读取的数据还是不一致,调用flash_read函数读取返回值与变量定义是的0xf一致,这个是什么问题


  • Global Moderator

    @dsg 0_1773726760768_6e394e20-364f-46f9-b52b-f7e2e097c6a5-图片.png

    参考下这个例程



  • @zr 您好,使用这个示例下载到板子上是正常的。将这部分代码移植到自己的工程中,就不行了,这个可能是哪里的问题呢?


  • Global Moderator

    @dsg 注意操作flash要放在RAM中运行



  • @zr attribute((section("ram_code"))) void FlashFuncTest(void);是这样定义吗,试了一下还是不行


  • Global Moderator

    @dsg 是的,再检查检查,初始化配置等等,有问题不



  • 我试下来偏移地址不超过512kb都是可以的,超过512kb地址的话就不行了,是哪里的配置还要进行修改吗