我试下来偏移地址不超过512kb都是可以的,超过512kb地址的话就不行了,是哪里的配置还要进行修改吗
DSG
@DSG
DSG 发布的帖子
-
RE: 关于FR8008GP FLASH读写问题发布在 FR800x
@zr attribute((section("ram_code"))) void FlashFuncTest(void);是这样定义吗,试了一下还是不行
-
RE: 关于FR8008GP FLASH读写问题发布在 FR800x
@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一致,这个是什么问题 -
关于FR8008GP FLASH读写问题发布在 FR800x
参照论坛中的方法已经对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);}*
通过串口打印,发现写入与读取的数据不一致,这是哪里的问题,该怎么解决