QNX ----IMX6UL移植NAND FLASH etfs文件系统

时间:2024-04-04 15:12:14

                         QNX ----IMX6UL移植NAND FLASH etfs文件系统 

1、IMX6UL 配置了一块256M的nandflash,其原理图如下:

QNX ----IMX6UL移植NAND FLASH etfs文件系统

2、为了方便移植,到QNX官网下载IMX7的BSP中的NAND FLASH 源码,其源码支持nand4096 ,而本最小系统配置为nand2048,因此需要对其驱动进行相应修改。

(1)修改 BCH APBH GPMI的地址参数,因为IMX7的外设基本原理一样,其基地址和中断向量需要修改。

QNX ----IMX6UL移植NAND FLASH etfs文件系统

(2) 修改BCH参数,在原来的nand4096中 把一页化成四个部分,其结构如下:

QNX ----IMX6UL移植NAND FLASH etfs文件系统

而nand2048的一页只有2048 和64字节。所以需要进行修改,为了继承四个数据块,把数据划分为512+8字节 ECC 8字节。

QNX ----IMX6UL移植NAND FLASH etfs文件系统

3、修改源码中的参数

增加FLASH 配置

QNX ----IMX6UL移植NAND FLASH etfs文件系统

修改device_to_nfc 改成2048 

void device_to_nfc(uint8_t *parsed_data, uint8_t *raw_data)
{
    uint32_t dData_index, data_size, spare_size;
    int i;
    uint8_t bbi_backup = 0;

    dData_index = 0;
    data_size = 0;
    spare_size = 0;
    for (i = 0; i < (DATASIZE / BCH_SUBBLOCK_SIZE); i++) {
        /* Copy data bytes */
        memcpy((void *)(parsed_data + data_size), (void *)(raw_data + dData_index), BCH_SUBBLOCK_SIZE);
        dData_index += BCH_SUBBLOCK_SIZE;
        data_size += BCH_SUBBLOCK_SIZE;
        /* Copy fs meta data */
        memcpy((void *)(parsed_data + XXXXDEF + spare_size), (void *)(raw_data + dData_index), ETFS_META_SIZE_PER_SUBBLOCK);
        dData_index += (ETFS_META_SIZE_PER_SUBBLOCK);
        spare_size += (ETFS_META_SIZE_PER_SUBBLOCK);
    }
    // BBI swap
    bbi_backup = parsed_data[DATASIZE]; //(BBI backup for move to DATA area)
    parsed_data[DATASIZE] = parsed_data[XXXXDEF - (3 * ETFS_META_SIZE_PER_SUBBLOCK)];
    parsed_data[XXXXDEF - (3 * ETFS_META_SIZE_PER_SUBBLOCK)] = bbi_backup;
}

把ECC 校验关闭。

编译后执行 fs-etfs-imx-micron -e -m /fs/etfs 

通过df -h查看 文件系统已挂载上了。

 

QNX ----IMX6UL移植NAND FLASH etfs文件系统

PS:这里不把ECC关闭 会找不到器件ID ,实质上是ECC没有设置对。有哪位懂得如何设置吗?

QNX ----IMX6UL移植NAND FLASH etfs文件系统