Flash的型号定义在custom/system/CUSTOMER_bb/Custom_memorydevice.h
例如:
#defineMEMORY_DEVICE_TYPE???NOR_RAM_MCP
#defineCS0_PART_NUMBER??????K5L6331CAA
#defineCS1_PART_NUMBER??????K5L6331CAA
注意需要将make/CUSTOMER_PROJECT.mak中的SYSGEN设为TRUE
分析从NORFlash启动,Flash的宏定义:
一、TheFS(filesystem)regioninformationonNORFLASH!
()#defineNOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS???512
文件系统被分为系统盘和用户盘,系统盘存储NV文件和MMS相关文件,对用户不可见,用户盘用户连上电脑就可以看到。在(i)中定义用户盘的大小为,单位为512Bytes,因此可以知道用户盘实际大小为512512=262144(Bytes)。这个值可以在build\CUSTOMER\log中的ckSysDrv.log查看到,如下:
FSFirstDriveSize??262144
解释:以上提到的大小单位之所以为512Bytes,是由Flash结构划分决定的。一块Flash分为若干block,每个block分为如干sector,每个sector又分为若干columnaddress。此处1sector正好是512Bytes。NorFlash读取以字节,NandFlash则是以page。
(NANDFlash结构与读写分析,http://blog.ednchina.com/walnutcy/147306/Message.aspx)
注意:MUSTNOTassignas?(TOTAL_FS_SIZE-SIZE_OF_SYSTEM_DRIVE),becausesystemwillkeepsomespacesfordiskmanagement.
?
二、ForNOR-XIPconfiguration,if
?1."SYSTEMDRIVEONNAND"or
?2."SYSTEMDRIVEONNOR"andFOTA"UPDATEPACKAGEONNAND"
?#defineNOR_BOOTING_NAND_FS_BASE_ADDRESS??????????0x00000000
Ⅱ?#defineNOR_BOOTING_NAND_FS_SIZE?????????????????????0x08000000
Ⅲ?#defineNOR_BOOTING_NAND_FS_FIRST_DRIVE_SECTORS???220000
解释:
?StartaddressofFSregiononNAND-flash
Ⅱ?TotalFSsizeonNAND-flashdisk
Ⅲ?用户盘大小
分析从NANDFlash启动各项值同NORFlash。
在tools/MemoryDeviceList/MemoryDeviceList_SinceXXX.xls中定义了一些Flash型号的相关参数,(并不是所有的都有这些参数)以FlashK5L6331CAA?BBMT6223为例.
1Word=2Bytes=16Bits
1block=32page(sector)
1page=512bytes(datafield)+16bytes(oob)
①custom/system/CUSTOMER_bb/custom_EMI.h
1)#defineEMI_GENERAL_CONTROL?????????0xeeeefb80
2)constkal_uint32??EMI_SettingOnCS[4]=
{
??0x44c94324,//flash的设置
??0x44c94404,//RAM的设置
??0,
??0
};
custom/system/CUSTOMER_bb/Flash_opt.h
Table:DEVICEBANKDIVISIONS
Bank
NumbeofBlocks
BlockSize
0
8
4Kwords
15
32Kwords
1
48
32Kwords
2
48
32Kwords
3
15
32Kwords
8
4Kwords
?
注:该表来自K5L6331CAA的datasheet。
1)#defineCONFIG_FOTA_NOR_BLOCK_DEF\
??{0x0,0x2000},\??????????????????????????//起始地址,大小
??{0x10000,0x10000},\
??{0x7F0000,0x2000},
?
2)#defineCONFIG_FOTA_NOR_BANK_DEF\
??{0x100000,1},\
??{0x300000,2},\
??{0x100000,1},??//FS的最大值
NORFlash被分为4个bank(从Flansh的datasheet可以知道K5L6331CAA分为4个bank,共有142个block),最后一个bank存储文件系统。ROM的大小可以计算得到:
0x1000001+0x3000002+0x1000001=0x800000,即为8MB.
另外我们可以看到除1),2)之外还有一个定义,如下:
#defineCONFIG_FOTA_NOR_REGION_DEF\
??{0x2000,8},\
??{0x10000,126},\
??{0x2000,8},
说明: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_MODIFIERFlashRegionInfoRegionInfo[]=
{
??{0x10000,15},
??{0x2000,8},
??EndRegionInfo/Don''tmodifythisline/
};
?
这个定义了存储FS的bank的block大小和个数,
总大小=0x1000015+0x20008=1048576=1MB.
前提:在NORFlash中启动
文件中还定义文件系统的大小,Flash配置如果是从XLS读出的话,应该是根据其中的数据得到的。
#ifndefNOR_BOOTING_NOR_FS_SIZE????//在Custom_memorydevice.h中
?#defineNOR_ALLOCATED_FAT_SPACE???(0x00100000)
#else
?#defineNOR_ALLOCATED_FAT_SPACE?(NOR_BOOTING_NOR_FS_SIZE)
#endif
剩下存储代码的ROM大小
#ifndefNOR_BOOTING_NOR_FS_BASE_ADDRESS??//在Custom_memorydevice.h中
?#define?????NOR_FLASH_BASE_ADDRESS????(0x00700000)
#else
??#defineNOR_FLASH_BASE_ADDRESS(NOR_BOOTING_NOR_FS_BASE_ADDRESS)
#endif
?
注:Custom_flash.c这个文件的生成可以看emiGenV2.pl。
FOTA(FirmwareOverTheAirUpdates)
?
计算MTK中程序占用的ROM及RAM
在build下面一个.lis文件
TotalROSize(Code+ROData)//romsizeTotalRWSize(RWData+ZIData)//ramsize
TotalROMSize(Code+ROData+RWData)
解释:
RO是程序中的指令和常量RW是程序中的已初始化变量ZI是程序中的未初始化的变量
|
|