(转)MTK之Flash篇一
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)。这个值可以在build\CUSTOMER\log中的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, 0x2000},
2)#define CONFIG_FOTA_NOR_BANK_DEF \
{0x100000, 1}, \
{0x300000, 2}, \
{0x100000, 1}, //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, 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_MODIFIER FlashRegionInfo RegionInfo[] =
{
{0x10000, 15},
{0x2000, 8},
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是程序中的未初始化的变量
(转)MTK之Flash篇一相关推荐
- MTK之Flash篇一
http://blog.ednchina.com/Jerome_home/1801879/message.aspx Flash的型号定义在custom/system/ CUSTOMER_bb/Cust ...
- MTK之Flash篇二---如何调整Flash中FAT的配置
文章来源:www.rd518.com/bbs/dv_rss.asp?s=xhtml&boardid=30&id=421&page=1&star=1&count= ...
- MTK android flash配置
关于6573集成MCP nandflash的方法,driver_allinone 和Memory Customer Document pdf的说明里面漏了很多细节.在此补上. 1.首先确认flash型 ...
- mtk配置flash
添加一颗新flash: 1:确认falsh型号:Sandisk的SDADF4AP_16G 2:查看MemoryDeviceList_MT6735.xls,看看这颗flash是否经过mtk验证,如果有, ...
- ARM JTAG仿真器调试方法之FLASH篇
http://blog.chinaunix.net/u/26710/showart_293962.html 通常情况下,我们并不推荐在 FLASH 中进行程序调试,这是因为相对于其他调试方法而言: ( ...
- MTK的flash tool
- RK3399平台开发系列讲解(FLASH篇)MTD子系统结构
平台 内核版本 安卓版本 RK3399 Linux4.4 Android7.1
- mtk flash配置
在mtk 的flash excel配置表中有些专业名称,在如下的文档中有详细的描写,对配置新的flash都是有帮助的 一.对clock的基本认识 第七部分是"clock & ...
- Ubuntu14.04下配置并使用MTK flash tool
前言 由于从事的工作需要经常对手机进行刷机操作,而MTK提供的flash tool基本都是在Windows下运行的,很多工作又是在linux下完成的,要涉及到大量的android源码编译.生成刷机 ...
最新文章
- Spark入门系列(二)| 1小时学会RDD编程
- 关于C语言中的预处理器的简单笔记
- zxing 源码笔记
- 完全使用UDP登录Linux
- 32查运行内存的map文件_Linux进程间通信——内存共享映射
- pytorch 常用层(四)
- Pig 0.12.1安装和使用
- 深入理解 JVM Class文件格式(五)
- LLVM PHI - if else
- iphone 开发安装环境
- 微服务-封装-docker by daysn大雄
- HDU 3695 / POJ 3987 Computer Virus on Planet Pandora
- 【20220912】电商业务的核心流程
- PPT 配色-颜色代码
- 谷歌浏览器开发者模式
- 各种坐标之间的转换方法汇总
- 以某乎为实战案例,教你用Python爬取手机App数据!居然有人说爬不了APP!
- Android .dex、.odex、Dalvik、ART、AOT、OAT
- android 点赞手型,在朋友圈,你是哪种点赞型人格?
- 网络信息安全攻防实验室 第三关
热门文章
- cad画正弦曲线lisp_Autolisp曲线绘制
- 已解决解决:consumer: Cannot connect to redis://localhost:6379//: Error 11001 connecting to localhost:6379
- 高铁招计算机专业吗,开高铁是什么专业_哪些学校有高铁专业?
- #Python小技巧#教你用Python在Excel里画画
- 我的世界服务器如何制作武器,我的世界2B2T服务器玩家都会去做的7件事 第1件是游戏中的禁忌...
- 捕获窗口跳入跳出事件
- Windows Server 2012/2016 桌面显示我的电脑图标
- python poisson图像融合制作CSDN博客头像
- P1149 火柴棒等式
- 【渝粤题库】广东开放大学 电子商务职业技能 形成性考核