加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

(转)MTK之Flash篇一

发布时间:2020-12-15 19:58:05 所属栏目:百科 来源:网络整理
导读:Flash的型号定义在custom/system/ CUSTOMER_bb/Custom_memorydevice.h 例如: #define MEMORY_DEVICE_TYPE? ? ? NOR_RAM_MCP #define CS0_PART_NUMBER? ? ? ? ? ? K5L6331CAA #define CS1_PART_NUMBER? ? ? ? ? ? K5L6331CAA 注意需要将make/CUSTOMER_PROJEC

Flash的型号定义在custom/system/ CUSTOMER_bb/Custom_memorydevice.h


例如:


#define MEMORY_DEVICE_TYPE??? NOR_RAM_MCP


#define CS0_PART_NUMBER?????? K5L6331CAA


#define CS1_PART_NUMBER?????? K5L6331CAA


注意需要将make/CUSTOMER_PROJECT.mak中的SYSGEN设为TRUE


分析从NOR Flash启动,Flash的宏定义:


一、The FS (file system) region information on NOR FLASH!


(ⅰ)#define NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS??? 512


文件系统被分为系统盘和用户盘,系统盘存储NV文件和MMS相关文件,对用户不可见,用户盘用户连上电脑就可以看到。在(i)中定义用户盘的大小为,单位为512Bytes,因此可以知道用户盘实际大小为512*512=262144 (Bytes)。这个值可以在buildCUSTOMERlog中的ckSysDrv.log查看到,如下:


FS First Drive Size?? 262144


解释:以上提到的大小单位之所以为512Bytes,是由Flash结构划分决定的。一块Flash分为若干block,每个block分为如干sector,每个sector又分为若干column address。此处1 sector正好是512Bytes。Nor Flash 读取以字节,Nand Flash则是以page。


(NAND Flash结构与读写分析,http://blog.ednchina.com/walnutcy/147306/Message.aspx)


注意:MUST NOT assign as ?(TOTAL_FS_SIZE - SIZE_OF_SYSTEM_DRIVE),because system will keep some spaces for disk management.


?


二、For NOR-XIP configuration,if


?1. "SYSTEM DRIVE ON NAND" or


?2. "SYSTEM DRIVE ON NOR" and FOTA "UPDATE PACKAGE ON NAND"


Ⅰ? #define NOR_BOOTING_NAND_FS_BASE_ADDRESS?????????? 0x00000000


Ⅱ? #define NOR_BOOTING_NAND_FS_SIZE?????????????????? ???0x08000000


Ⅲ? #define NOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS??? 220000


解释:


Ⅰ? Start address of FS region on NAND-flash


Ⅱ? Total FS size on NAND-flash disk


Ⅲ? 用户盘大小


分析从NAND Flash启动各项值同NOR Flash。


在tools/MemoryDeviceList/MemoryDeviceList_SinceXXX.xls中定义了一些Flash型号的相关参数,(并不是所有的都有这些参数)以Flash K5L6331CAA? BB MT6223为例.

1 Word = 2 Bytes = 16 Bits
1block = 32 page (sector)

1page = 512 bytes(datafield) + 16bytes(oob)


①custom/system/ CUSTOMER_bb/custom_EMI.h


1) #define EMI_GENERAL_CONTROL????????? 0xeeeefb80


2)const kal_uint32?? EMI_SettingOnCS[4] =


{


?? 0x44c94324,// flash的设置


?? 0x44c94404,// RAM的设置


?? 0,


?? 0


};


②custom/system/ CUSTOMER_bb/Flash_opt.h


Table:DEVICE BANK DIVISIONS































Bank


Numbe of Blocks


Block Size


0


8


4 Kwords


15


32 Kwords


1


48


32 Kwords


2


48


32 Kwords


3


15


32 Kwords


8


4 Kwords


?


注:该表来自K5L6331CAA的datasheet。


1)#define CONFIG_FOTA_NOR_BLOCK_DEF


?? {0x0,0x2000},?????????????????????????? //起始地址,大小


?? {0x10000,0x10000},


?? {0x7F0000,


?


2)#define CONFIG_FOTA_NOR_BANK_DEF


? ?{0x100000,1},


?? {0x300000,2},


?? {0x100000,?? //FS的最大值


NOR Flash被分为4个bank(从Flansh的datasheet可以知道K5L6331CAA分为4个bank,共有142个block),最后一个bank存储文件系统。ROM的大小可以计算得到:


0x100000*1+0x300000*2+0x100000*1=0x800000,即为8MB.


另外我们可以看到除1),2)之外还有一个定义,如下:


#define CONFIG_FOTA_NOR_REGION_DEF


?? {0x2000,8},


?? {0x10000,126},


?? {0x2000,


说明:CONFIG_FOTA_NOR_BLOCK_DEF中定义了Flash每个bank中每个block的大小及每个bank的起始地址。可以看到第一个bank中每block的大小为0x2000即8192Bytes = 4096Words,地址从0x0开始,这个定义就是datasheet中的Bank0大小为4Kwords。在CONFIG_FOTA_NOR_REGION_DEF根据芯片对block的划分定义了各种类型block的个数,即头尾各有8个大小为0x2000的block,中间为126个大小为0x10000的block。其他的bank中block的划分类似。所有这些都是根据硬件也就是芯片结构的划分相对应的。


③custom/system/ CUSTOMER_bb/Custom_flash.c


FLASH_REGIONINFO_VAR_MODIFIER FlashRegionInfo RegionInfo[] =


{


?? {0x10000,15},


?? {0x2000,


?? EndRegionInfo


};


?


这个定义了存储FS的bank的block大小和个数,


总大小=0x10000*15+0x2000*8= 1048576=1MB.


前提:在NOR Flash 中启动


文件中还定义文件系统的大小,Flash配置如果是从XLS读出的话,应该是根据其中的数据得到的。


#ifndef NOR_BOOTING_NOR_FS_SIZE???? //在Custom_memorydevice.h中


?#define NOR_ALLOCATED_FAT_SPACE??? (0x00100000)


#else


? #define NOR_ALLOCATED_FAT_SPACE ?(NOR_BOOTING_NOR_FS_SIZE)


#endif


剩下存储代码的ROM大小


#ifndef NOR_BOOTING_NOR_FS_BASE_ADDRESS?? //在Custom_memorydevice.h中


? #define ????? NOR_FLASH_BASE_ADDRESS???? (0x00700000)


#else


??#define NOR_FLASH_BASE_ADDRESS (NOR_BOOTING_NOR_FS_BASE_ADDRESS)


#endif


?


注:Custom_flash.c 这个文件的生成可以看emiGenV2.pl。


FOTA(Firmware Over The Air Updates)



计算 MTK中程序占用的ROM 及 RAM


在build 下面一个 *.lis文件


Total RO Size(Code + RO Data) //rom size
Total RW Size(RW Data + ZI Data) //ram size


Total ROM Size(Code + RO Data + RW Data)


解释:


RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读