AM5728-Uboot 读SPI NOR Flash 代码走读

CMD:

  • sf probe # NOR初始化
  • sf read mem_addr nor_offset size #从NOR相应的分区(偏移地址)读取指定大小的字节到内存中

路径:u-boot-2017.01-g70d59ba-v2.0\cmd\sf.c
在这里插入图片描述
do_spi_flash_read_write
在这里插入图片描述
在这里插入图片描述
跟踪 spi_flash_read 函数:

路径:\u-boot-2017.01-g70d59ba-v2.0\include\spi_flash.h

如果定义了 CONFIG_DM_SPI_FLASH
在这里插入图片描述
在这里插入图片描述
如果没有定义 CONFIG_DM_SPI_FLASH

在这里插入图片描述
在这里插入图片描述
    在调用 spi_falsh_read / spi_falsh_erase /spi_falsh_write 之前,必须要进行 spi_flash_probe ,这就是为了扫描出 flash设备,确定flash 的存储大小,页大小,擦除大小等。在spi_falsh_scan 中会对函数指针 falsh->read / falsh-> erase / falsh-> write 赋值,从而确定具体的读写,擦除操作函数。

路径:\u-boot-2017.01-g70d59ba-v2.0\drivers\mtd\spi\sf_probe.c
在这里插入图片描述
spi_flash_probe -> spi_flash_probe_tail -> spi_flash_probe_slave -> spi_flash_scan
在这里插入图片描述
在这里插入图片描述
我们这里追踪到 spi_falsh_read 操作最终会调用 spi_flash_cmd_read_ops()

路径:\u-boot-2017.01-g70d59ba-v2.0\drivers\mtd\spi\spi_flash.c
在这里插入图片描述
追踪到 spi_flash_copy_mmap
在这里插入图片描述
void __weak spi_flash_copy_mmap 有 __weak修饰符说明这个函数在其他地方也有定义,代码编译时会首先连接没有__weak修饰符的函数定义,如果其他地方的定义没有开启,再连接这个带有 __weak修饰的函数。

另一个地方的定义:
在这里插入图片描述
我们这里将 CONFIG_TI_EDMA3 (/include/configs/am57xx_evm.h)关掉了,所以最终会调用void __weak spi_flash_copy_mmap 函数去将 NOR中的数据读出。
我们添加的 spl_impl_memcpy 函数其实就是 lib/string.c:memcpy() ,和memcpy的代码一样。
在这里插入图片描述

SPL阶段读NOR:
\u-boot-2017.01-g70d59ba-v2.0\common\spl\spl_spi.c
在这里插入图片描述
spi_flash_read
头文件:\u-boot-2017.01-g70d59ba-v2.0\include\spi_flash.h

SPL 和Uboot阶段读NOR时调用的都是同一个 API !

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heat.huang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值