zoukankan      html  css  js  c++  java
  • (转载) 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 /* Don't modify this line */

     

    };

     

     

     

    这个定义了存储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是程序中的未初始化的变量

  • 相关阅读:
    iscroll.js
    HTML 第九章总结
    HTML第八章总结
    HTML第七章总结
    HTML第六章总结
    HTML第五章总结
    HTML第四章总结
    HTML第三章总结
    HTML第二章总结
    HTML第一章总结
  • 原文地址:https://www.cnblogs.com/sierllen/p/2538789.html
Copyright © 2011-2022 走看看