R329的id.c如何添加支持新的spi flash
时间: 2024-03-03 21:50:18 浏览: 16
添加支持新的 SPI flash 需要进行以下步骤:
1. 在 id.c 文件中添加新 SPI flash 的 ID,可以在 SPI flash 的数据手册中查找到对应的 ID。以 Micron 的 MT25QL128ABA 为例,其 ID 为 0x20ba18。
2. 在 spi_nor_scan 函数中添加对新 SPI flash 的识别和初始化代码。可以参考已有的代码进行编写。以 MT25QL128ABA 为例,可以添加如下代码:
```c
case SPI_NOR_IDS_MXIC:
switch (info->sector_size) {
case SZ_4K:
if ((info->size == SZ_64M) ||
(info->size == SZ_32M))
break;
/* fall through */
case SZ_64K:
if ((info->size == SZ_128M) ||
(info->size == SZ_256M))
break;
/* fall through */
case SZ_256K:
if (info->size == SZ_512M)
break;
/* fall through */
default:
return -EINVAL;
}
/* Set QE bit to enable quad SPI */
ret = spi_nor_write_sr_and_check(nor, SR_QE);
if (ret)
return ret;
/* Set WRQE bit to enable quad writes */
ret = spi_nor_write_sr_and_check(nor, SR_WRQE);
if (ret)
return ret;
/* Set TBPROT bit to enable top/bottom protection */
nor->flags |= SNOR_F_HAS_TB;
break;
case SPI_NOR_IDS_MICRON:
switch (info->sector_size) {
case SZ_4K:
if ((info->size == SZ_64M) ||
(info->size == SZ_32M))
break;
/* fall through */
case SZ_64K:
if ((info->size == SZ_128M) ||
(info->size == SZ_256M))
break;
/* fall through */
case SZ_256K:
if (info->size == SZ_512M)
break;
/* fall through */
default:
return -EINVAL;
}
/* Set QE bit to enable quad SPI */
ret = spi_nor_write_sr_and_check(nor, SR_QE);
if (ret)
return ret;
/* Set TBPROT bit to enable top/bottom protection */
nor->flags |= SNOR_F_HAS_TB;
break;
case 0x20ba18:
switch (info->sector_size) {
case SZ_4K:
if ((info->size == SZ_32M) ||
(info->size == SZ_64M) ||
(info->size == SZ_128M))
break;
/* fall through */
case SZ_64K:
if ((info->size == SZ_256M) ||
(info->size == SZ_512M))
break;
/* fall through */
default:
return -EINVAL;
}
/* Set QE bit to enable quad SPI */
ret = spi_nor_write_sr_and_check(nor, SR_QE);
if (ret)
return ret;
/* Set TBPROT bit to enable top/bottom protection */
nor->flags |= SNOR_F_HAS_TB;
break;
```
其中,0x20ba18 是 MT25QL128ABA 的 ID。
3. 编译烧录程序,测试新 SPI flash 是否能够正常工作。
需要注意的是,添加新的 SPI flash 支持可能会导致其他 SPI flash 的支持出现问题,因此需要进行充分测试。同时,为了保证代码的可维护性和可扩展性,应该尽量遵循已有代码的风格和规范。