加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

调试U-Boot笔记(八)

发布时间:2020-12-15 18:18:08 所属栏目:百科 来源:网络整理
导读:??? 在 上一节的实验中,我们推断出写NorFlash失败的原因是在 flash_erase() 函数中执行擦除操作时执行了 L88 或 L92 处的 goto outahere; 直接跳到 L105去执行了。那么我们今天就来确定到底是哪里出的错。 ??? 我们在 flash_erase() 函数中插入调试信息打印
??? 在 上一节的实验中,我们推断出写NorFlash失败的原因是在 flash_erase() 函数中执行擦除操作时执行了 L88 或 L92 处的 goto outahere; 直接跳到 L105去执行了。那么我们今天就来确定到底是哪里出的错。
??? 我们在 flash_erase() 函数中插入调试信息打印印:
???

??? 编译了执行一下看结果。
???

??? 原因很明显了,是芯片没有反应超时所致的失败。
??? 那为什么会超时呢?是时序不对还是驱动不对?对于这个问题,我只好去查询NorFlash芯片的手册与电路原理图。
?
???

??? 由上图可见,数据位16Bit,地址位23Bit=8MB,芯片选择脚CE连nGCS0。地址映射到0x00000000上,地址范围为0x000000-0x7FFFFF。
??? 我们在查看 u-boot/board/flash.c 文件NorFlash驱动中看到,对NorFlash的写与擦除时都对一个地址进行访问,MEM_FLASH_ADDR1与MEM_FLASH_ADDR2,如下:
???

??? 查得这两个宏的定义为:
???

??? CFG_FLASH_BASE 在 include/configs/my2440.h 文件中定义为 0x00000000。
??? 那么上述两个宏的分别地址:

??? #define MEM_FLASH_ADDR1????????(*(volatile u16 *)0x00000AAA)
??? #define MEM_FLASH_ADDR2????????(*(volatile u16 *)0x00000554)

??? 查看原理图,得知NorFlash的芯片型号为:AM29LV160DB,此为对应的电子文档:

Am29LV160DB.zip

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读