Flash分区操作demo
Flash分区操作demo
1、内置flash不使用文件系统挂载操作demo
1.1配置挂载分区信息
C app_common.c
NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_unenc_dev_data)657.5fc_spi_pdata658.start_addr=g_res_nor_unencry_start_addr,659=CONFIG_EXTERN_FLASH_SIZE-g_res_nor_unencry_start_addr,660NORFLASH_SFC_DEV_PLATFORM_DATA_END()661662#if TCFG_NOR_VM
NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_vm_dev_data)664.sfc_spi_pdata665.start_addr=CONFIG_EXTERN_FLASH_SIZE-CONFIG_EXTERN_USER_VM_FLASH_SIZE,666=CONFIG_EXTERN_USER_VM_FLASH_SIZE,667NORFLASH_SFC_DEV_PLATFORM_DATA_END()668669#endif//TCFG_NOR_VM
1.2添加挂载分区
1.3配置下载分区信息:
| bard_701n_democ × | C app_c0m monc C devicch C isd conig rulec C app.conigh | C isd conig rulec × | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 667 668 669 678 671 672 673 674 675 676 677 678 679 689 | NORFLASH_5FC_DEV_PLATFORM_D norflash nors jnside dev...Aa桓 1of3 ←→E× | 469 470 #if TCFG_NOR_VM 471 UIVN_ADR-CONFIG_RULE_INSERT_UI_VL_BASE; 472 UIVN_LEN -CONFIG_RULE_INSERT_UI_VNL_SIZE; 473 UIVN_OPT-1; 474 #endif 475 #endif | |||||||
| #endif FLAS #define FATFS_IN_FLASH_N #define SDFILE_INSIDE_FAT_ NORFLASH_5FC_DEV_P .path .start_addr .size | H_SFC_DEV_ENABLE*/ 这个名字要对应前面的首字母 ATFSI” 文什配五 RODT_PATH SDFILE_MOUNT_PATH7app ATE⁵TN FLASHN | ||||||||
| _dev_data) E FAT ROOT PATH | ATEST | ||||||||
| Bx179000, 47 308*1024, | 8 FATFSI_ADR =Bx170000; 479 FATFSI LEN-0x4b880; | ||||||||
| NORFLASH_SFC_DEV_PLATFORMDATA_END() 起始地址和大小对应上 | ATFSI_OPT 481 |
1.4生成一个镜像文件,大小跟实际配置一样
1.5读写操作
2、内置flash文件系统操作,虚拟文件系统只有一个,所以只能挂载一个分区使用
2.1添加挂载分区
extern const struct device_operations mass_storage_ops;白REGISTER_DEVICES(device_table)={白#if TCFG_VIRFAT_FLASH_ENABLE
/虚拟文件系统对接il sdfile fat文件系统设备入口,往下对接文件系统,往上对接物理设备中//{"virfat_flash",&virfat_flash_dev_ops,(void*)"res_nor"},{"virfat_flash",&virfat_flash_dev_ops,(void*)"res_nor_car"},7/res_nor是物理设备入白#if TCFG_NORFLASH_SFC_DEV_ENABLE//使用外flash跑ui
{"res_nor_ex", &norflash_sfc_fs_dev_ops,(void*)&norflash_sfc_dev_data},
{"update_noenc",&norflash_sfc_fs_dev_ops,(void*)&norflash_norfs_unenc_dev_data},//“u#endif /TCFG_NORFLASH_SFC_DEV_ENABLE/白#if TCFG_VIRFAT_INSERT_FLASH_ENABLE1使用内YLashui
//{"res_nor",&inside_norflash_fs_dev_ops,(void*)&norflash_norfs_inside_dev_data},{"res_nor_car",&inside_norflash_fs_dev_ops,(void*)&norflash_norfs_inside_dev_car_data]#endi//TCFG_VIRFAT_INSERT_FLASH_EABLE#endif //TCFG_VIRFAT_FLASH_ENABLE白#if TCEG Sna FNARLF
2.2添加分区配置信息
#if TCFG_VIRFAT_INSERT_FLASH_ENABLE#define FATFS_IN_FLASH_NAME"FATFSI"//isd_config_rule文件配置#define SDFILE_INSIDE_FAT_ROOT_PATHSDFILE_MOUNT_PATH"/app/"FATFS_IN_FLASH_NAME /1分区NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_inside_dev_data).path=SDFILE_INSIDE_FAT_ROOT_PATH,.start_addr=TCFG_VIRFAT_INSERT_FLASH_BASE,.size=TCFG_VIRFAT_INSERT_FLASH_SIZE,NORFLASH_SFC_DEV_PLATFORM_DATA_END()#define FATFS_IN_FLASH_CAR_NAME "FATFS_CAR"//isd_config_rule文件配置#define SDFILE_INSIDE_FAT_ROOT_CAR_PATHSDFILE_MOUNT_PATH"/app/"FATFS_IN_FLASH_CAR_NAME //分区NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_inside_dev_car_data).path=SDFILE_INSIDE_FAT_ROOT_CAR_PATH,7/地址计算.start_addr=TCFG_VIRFAT_CAR_FLASH_BASE,.size=TCFG_VIRFAT_CAR_FLASH_SIZE,配置其实地址和空间大小NORFLASH_SFC_DEV_PLATFORM_DATA_END()#if TCFG_NOR_VM
2.3直接可以使用文件系统的接口访问,fopen/fread/fwrite等
3、外挂flash分区操作
3.1配置外挂flash分区信息
C boord 701n democ 725726727728#if TCFG_NORFLASH_SFC_DEV_ENABLE729SFC_SPI_PLATFORM_DATA_BEGIN(sfc_spi_data)730.spi_hw_index -1,731.sfc_data_width -SFC_DATA_MIDTH_4,732.sfc_read_mode -SFC_RD_OUTPUT,733.sfc_encry-TCFG_5FC_ENCRY_ENABLE,//是否加密734.sfc_clk_div0,//时钟分频:sfc_fre-sys_clk /div;735.unencry_start_adr -CONFI6_EXTERN_FLASH_SIZE -CONFI6_EXTERN_USER_VM_FLASH_SIZE,//不加密区域736.unencry_size -CONFIG_EXTERN_USER_VW_FLASH_SIZE,737SFC_SPI_PLATFORN_DATA_END()738739NORFLASH_SFC_DEV_PLATFORH_DATA_BEGIN(norflash_sfc_dev_data)748.sfc_spi_pdata=8sfc_spi_data,741.start_addr=θ,742.size=CONFIG_EXTERN_FLASH_SIZE-CONFIG_EXTERN_USER_VW_FLASH_SIZE-410241824,743NORFLASH_SFC_DEV_PLATFORN_DATA_END()744745RFLASH_SFC_DEV_PLATFORH_DATA_BEGIN(norflash_sfc_dev_data_update)746fc_spi_pdata=8sfc_spi_data,747.start_addr=Bxc⁸0988,74.size=418241824-CCNFIG_EXTERN_USER_VW_FLASH_SIZE,749NORFLASH_SFC_DEV_PLATFORN_DATA_END()注意分区不能配置在加密区域内,否则不能正750751确读写75#if TCFG_NOR_VN753NORFLASH_SFC_DEV_PLATFORN_DATA_BEGIN(norflash_norfs_vm_dev_data)754.sfc_spi_pdata=&sfc_spi_data,755.start_addr-exceee+41824*1824-CONFIG EXTERN_USER_W_FLASHLSIZE,//CONFIGEXTERN_FLASH_STZE -CONFIG_EXTERN_USER_W FLASH SIZE,756-51zeCONFIG_EXTERN_USER_VM_FLASH_SIZE,757NORFLASH_SFC_DEV_PLATFORN_DATA_END()758#endif759769
3.2挂载分区信息操作接口
15#if TCFG_NORFLASH_SFC_DEV_ENABLE16#if TCFG_NOR_FS1718"res_nor_update",&norflash_sfc_fs_dev&norflash_sfc_dev_data_update},19#endif20#endif /TCFG_NORFLASH_SFC_DEV_ENABLE/
3.3对flash的分区进行配置,分出对应的空间
downloadbat
norlash sic dev data up-A阻.str -n res -0 JL45bar.res sidebar.str sidebar.tab -n res-o sidebar46res watch.str watch.view watch.json -n res -o watch471.res watch1.str watch1.view watch1.json -n res-o watch¹482.res watch2.str watch2.view watch2.json -n res-o watch2493.res watch3.str watch3.view watch3.json -n res-o watch³584.res watch4.str watch4.vieu watch4.json -n res -o watch4515.res watch5.str watchs.view watchs.json -n res -o atchs522312.PIX F_G⁸2312.TAB ascii.res -n res-o font53545557分出实际的大小区5859cif.res -n res-o font间68out neu res.bin-1nage-s1ze8-F11e¹ist L stdebar watchs watchs font remove-empty -re@ove-bpb-nark-bad-after ex⁷e⁰80-key CHTPKEX-adress6162t neu res.bin -image-size 16-f¹elist n sldebar vatch uatcht watch²watch³watcha watchs font -renove-eapty -remove-bpb -ark-bad-afterfaxcse6364
3.4分区操作,方法同1内置flash没有文件系统的操作方式:dev_open
4、外挂flash挂fat分区,这里要特别注意,fat单位是512对齐的,跟前面三种方式是不一样的,前面三种方式都是1对齐的。
4.1设置挂载分区信息
C board_701n_demo.c × C board_701n_demo_cfghC app_common.cC app_main.cC isd_config_rule.cC app_config.h641.sfc_data_width =SFC_DATA_WIDTH_4,
642.sfc_read_mode =SFC_RD_OUTPUT,norflash norfs fat de643.sfc_encry=TCFG_SFC_ENCRY_ENABLE,//是否加密644.sfc_clk_div 0,//时钟分频:sfc_fre =sys_clk /div;645.unencry_start_addr -g_res_nor_unencry_start_addr,//不加密区域646.unencry_size =CONFIG_EXTERN_USER_VM_FLASH_SIZE,647SFC_SPI_PLATFORM_DATA_END()648649NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_sfc_dev_data)658.sfc_spi_pdata=&sfc_spi_data,651.start_addr=θ,652.size=θxbeee⁰0,//CONFIG_EXTERN_FLASH_SIZE-CONFIG_EXTERN_USER_VM_FLASH_SIZE-410241024,653NORFLASH_SFC_DEV_PLATFORM_DATA_END()654655//非机密区域,用于升级多个文件时,对于非加密区域的统一处理656NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_unenc_dev_data)657.sfc_spi_pdata=&sfc_spi_data,658.start_addr=θxbeeeee,//g_res_nor_unencry_start_addr-410241024,659.size=CONFIG_EXTERN_FLASH_SIZE-0xbeeeee,//CONFIG_EXTERN_FLASH_SIZE -g_res_nor_unencry_start_660NORFLASH_SFC_DEV_PLATFORM_DATA_END()
NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_fat_dev_data).sfc_spi_pdata=&sfc_spi_data,.start_addr=θxbeee00,.size=1024,起始地址和空间大小,切记NORFLASH_SFC_DEV_PLATFORM_DATA_END()
6666
不能跟其他分区重叠,也不668#if TCFG_NOR_VM669NORFLASH_SFC_DEV_PLATFORM_DATA_BEGIN(norflash_norfs_vm_dev_data)能放在加密区670.5fc_spi_pdata=&sfc_spi_data,671.start_addr=CONFIG_EXTERN_FLASH_SIZE-CONFIG_EXTERN_USER_VN_FLASH_SIZE,672.size=CONFIG_EXTERN_USER_VM_FLASH_SIZE,673NORFLASH_SFC_DEV_PLATFORM_DATA_END()674
675 #endif//TCFG_NOR_VM
676 #endif /#if TCFG_NORFLASH_SFC_DEV_ENABLE/677
4.2添加挂载设备
272829//norflash_sfc_dev_ops句柄操作是512对齐,写带刷38//外挂一个普通fat文件系统入口31//需求开启TCFG_NORFLASH_SFC_DEV_ENABLE32{"fat_nor",&norflash_sfc_dev_ops,(void*)&norflash_norfs_fat_dev_data},33#endif34
#if TCFG_NOR_FAT
4.3 fat分区操作
可以使用devicejiekou来操作,但是需要注意其分区是单位512对齐的。
bool dev_online(const charname);
voiddev_open(const charname,voidarg);int dev_read(void device,voidbuf,u32 len);int devv_write(voiddevice,voidbuf,u32 len);int dev_seek(voiddevice,u32 offset,int orig);int dev_ioctl(voiddevice,int cmd,u32 arg);int dev_close(void device);
int dev_bulk_read(void_device,voidbuf,u32 offset,u32 len);int dev_bulk_write(void_device,void*buf,u32 offset,u32 len);
也可以通过文件系统接口来访问:fopen/fread/fwrite等文件系统接口访问。