如转发 请标明出处!
以Vx7 + AM335x为例
在TI官网找到AM335x的手册,看到NAND的控制器叫做GPMC (General-Purpose Memory Controller)。在VIP中包含相应组件DRV_VXB_GPMC,VxWorks启动时就会自动加载驱动vxbFdtGpmcDrv
在手册中找到GPMC的寄存器地址
与DTS确认一致
在VIP中包含组件INCLUDE_MTD_SHOW,它会调用usrMtdInit(MTD_CFG_STR)来创建MTD(Memory Technology Device)
启动VxWorks后,使用mtdDevShow()命令就可以看到这两个device了
在VIP中包含组件INCLUDE_FTL_FORMAT,它提供了FTL(Flash Translation Layer)的格式化功能
STATUS ftlFormat
(
char *pDevName, /* pointer to flash device name, like "/ftl0" */
int sizeGC, /* size (in percentage of the total size) to faciliate GC and WL
* the larger this value, the better the performance.
* the acceptable range is from 3 to 30 (means 3% to 30%)
*/
int sizeBBM, /* size (in percentage of the total size) to do replace bad blocks
* the acceptable range is from 1 to 10 (means 1% to 10%)
*/
int options /* set it to 0. currently it is ignored */
);
并自动引入了INCLUDE_FTL,这是管理Raw NAND的核心组件,它会自动调用usrFtlInit (FTL_MEM_BUDGET_CFG_PROFILE, FTL_SERVICE_TASK_ENABLE, FTL_AUTO_MOUNT, 0)来提供最基本的功能,包括garbage collection, wear-leveling, bad block management, data caching and mapping。
包含组件INCLUDE_FTL_SHOW,使用命令ftlBmShowAll()可以看到这个BM(Block Management)了
可以看到bm status的值是NOT MOUNTED,是因为FTL_AUTO_MOUNT用了默认的FALSE。那就需要手动执行ftlMount()
如果是第一次使用这个NAND,还需要格式化一下