本來三星的MMC是這麼做的:
//SDMMC BSP Definition
#define IMAGE_NK_SIZE (0x040E0000)
#define FATFS_FOR_IMAGE (0x1000000)
#define SECTOROFFATFS (FATFS_FOR_IMAGE / SDMMC_SECTOR_SIZE)
#define IMAGESTARTSECTOR (MBRSTARTSECTOR+SECTOROFMBR)
#define IMAGESIZE (IMAGE_NK_SIZE)
//#define IMAGESIZE (0x10000000) // this value must be the same as Flash size in the memory.cfg.xml
#define SECTOROFIMAGE (IMAGESIZE/(SDMMC_SECTOR_SIZE))
#define MBRSTARTSECTOR (TOCSTARTSECTOR+SECTOROFTOC+7) // 7 sector means tocsector+7, to align 8KB
#define SECTOROFMBR (0x100)
#define SECTOROFTOC (8)
#define TOCSTARTSECTOR (AISSTARTSECTOR+SECTOROFAIS) // to align 8KB
#define SECTOROFAIS (1) // Address Information Sector
#define AISSTARTSECTOR (BOOTIMAGESTARTSECTOR+SECTOROFBOOTIMAGE+15) // to align 8KB
#define SECTOROFBOOTIMAGE (0xA10) // bootimage means STEPLDR+IPL+EBOOT
#define BOOTIMAGESTARTSECTOR (1)
//#define STEPLDRBUFFER 0x50200000
//#define STEPLDRSTARTADDRESS 0x50000000
#define SECTOROFSTEPLDR (0x20) //16K
#define STEPLDRSTARTSECTOR (1)
#define SECTOROFEBOOT (0x600)
#define EBOOTSTARTSECTOR (STEPLDRSTARTSECTOR+SECTOROFSTEPLDR)
#define SECTOROFIPL (0x400)
#define IPLSTARTSECTOR (EBOOTSTARTSECTOR+SECTOROFEBOOT)
然後我改成這樣子:
//SDMMC BSP Definition
#define IMAGE_NK_SIZE (0x040E0000)
#define FATFS_FOR_IMAGE (0x1000000)
#define SECTOROFFATFS (FATFS_FOR_IMAGE / SDMMC_SECTOR_SIZE)
#define IMAGESTARTSECTOR (MBRSTARTSECTOR+SECTOROFMBR)
#define IMAGESIZE (IMAGE_NK_SIZE)
//#define IMAGESIZE (0x10000000) // this value must be the same as Flash size in the memory.cfg.xml
#define SECTOROFIMAGE (IMAGESIZE/(SDMMC_SECTOR_SIZE))
#define MBRSTARTSECTOR (LOGOSTARTSECTOR+SECTOROFLOGO) // 7 sector means tocsector+7, to align 8KB
#define SECTOROFMBR (0x100)
#define SECTOROFTOC (8)
#define TOCSTARTSECTOR (AISSTARTSECTOR+SECTOROFAIS) // to align 8KB
#define SECTOROFAIS (1) // Address Information Sector
#define AISSTARTSECTOR (BOOTIMAGESTARTSECTOR+SECTOROFBOOTIMAGE+6) // to align 8KB
#define SECTOROFBOOTIMAGE (0x421) // bootimage means STEPLDR+EBOOT
#define BOOTIMAGESTARTSECTOR (1)
//TOCSTARTSECTOR = 0x429
//AISSTARTSECTOR = 0x428
//SECTOROFBOOTIMAGE = 0x421
//LOGOSTARTSECTOR = 0x431
//BOOTIMAGESTARTSECTOR+SECTOROFBOOTIMAGE = 0x422
//#define STEPLDRBUFFER 0x50200000
//#define STEPLDRSTARTADDRESS 0x50000000
#define SECTOROFSTEPLDR (0x20) //16K
#define STEPLDRSTARTSECTOR (1)
#define SECTOROFEBOOT (0x400)
#define EBOOTSTARTSECTOR (STEPLDRSTARTSECTOR+SECTOROFSTEPLDR)
#define SECTOROFLOGO (0x3000)
#define LOGOSTARTSECTOR (TOCSTARTSECTOR+SECTOROFTOC)
保留 | Bootimage | 對齊 | AISS | TOC | MBR | NK | FAT | ||||
stepldr | eboot | ipl | |||||||||
起始扇區 | 0x0 | 0x1 | 0x21 | 0x621 | 0xA19 | 0xA20 | 0xA21 | A30 | |||
長度 | 0x1 | 0x20 | 0x600 | 0x400 | 0xf | 0x1 | 0x8 | 0x100 | |||
保留 | Bootimage | 對齊 | AISS | TOC | LOGO | MBR | NK | FAT | |||
stepldr | eboot | ||||||||||
起始扇區 | 0x0 | 0x1 | 0x21 | 0x421 | 0x428 | 0x429 | 0x431 | 0x3431 | |||
長度 | 0x1 | 0x20 | 0x400 | 0x6 | 0x1 | 0x8 | 0x3000 | 0x100 |
三星的表格可能沒處理詳細,會有數字錯誤,這麼做的原因是加上LOGO的分區,使得跟其他操作系統可以公用Logo