This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OMAP-L138:访问8位 NAND 闪存时出现问题、跳过任何字符串读取的第一个字节

Guru**** 2943090 points

Other Parts Discussed in Thread: OMAP-L138

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/673767/omap-l138-trouble-to-access-8-bit-nand-flash-1st-byte-skipped-of-any-string-read

器件型号:OMAP-L138

我们设计并构建了 OMAP-L138嵌入式系统(主要是成功的-除了8位 NAND 之外的一切都正常工作)、其处理器内核(CPU、RAM、闪存和电源管理 器)是 LCDEVKIT-AE7评估板的确切硬件副本。 该板使用 Micron 16位512MB NAND 闪存 MT29F4G16ABADAH4   作为大容量存储器件、运行良好。

编译、编译和运行我们的 Linux 系统和应用软件、从闪存加载并通过 u-boot 复制到 RAM、当使用 TI OMAP-L138_FlashAndBootUtils_2_40 软件包准备和刷写映像时、效果非常好。 我们成功地从源编译和构建该软件包、以便将一些调试输出添加到在 ARM 上运行的 SFT 部分。

由于当前市场上缺少3.3V/16/位 闪存芯片、我们决定改用其1.8V/8位同级  制造商的 MT29F4G08ABBDAH4-ITX。

我们将闪存的电源和 OMAP 所有电源组 B GPIO 的接口更改为1.8V、并且电路板在所有功能中都能很好地工作、从 RAM 执行其程序。  唯一不起作用的是对新的8位闪存的任何访问。

通过调试上面提到的 AIS 工具包的 SFH / STF 部分、我们能够稍微隔离问题、如下所示:

物理闪存芯 片的第一次读取访问(成功通过 FTP 将 BOOTUBL 器件和我们的闪存映像文件下载到 RAM 后)正在读取芯片偏移量为0x00和0x20的两个4字节字符串、从而产生 ONFI 签名和制造商器件 ID 字符串。 这两个字符串几乎完全符合我们的期望(从微米数据表)、 但在每个字符串中、第一个字节缺失、因此预期的第二个字节位于第一个位置(数组索引0)、第三个字节位于数组索引1中、第四个字节位于数组索引2中。 数组索引3是第四个字节、包含一个额外的值、数据表中未对此进行说明。 这对于在这两个首次访问中读出的两个字符串都是如此。

移动这两个数组中的字节可满足程序预期、以便随后的闪存开始、但所有块的验证步骤自然会失败。 看起来、任何多字节读取访问中的每个第一个字节都丢失了、并且所有后续字节都在时间上移动了一个位置。

是否有人读过这种错误、是否曾观察到这种故障并能为我们提供任何提示、哪个设置参数、EMIFA 单元、时钟或任何其他参数可能是错误的? 有趣的是、16位版本的闪存可与 TI SDK 中的原始 AIS 二进制工具和驱动程序以及2.40版本无缝配合使用、可从源代码下载、编译和构建。 板、闪存芯片(很可能)的软件设置肯定有问题、但我们不知道是什么。

提前感谢您提供任何提示

霍斯特

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Horst、

    我们将对此进行研究。

    您能否提供所使用的 Linux SDK 版本以及可能拥有的任何调试(引导)日志?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Yordan、您好!
    感谢你的答复。 我对 你的问题没有特别的回答,但有一些好消息:-)

    '无特定答案':
    正如我所说的闪存的第一步、早在映像引导之前、就可以发出任何 Linux 引导消息。 这是一个低级硬件/固件问题、所涉及的唯一软件是 TI 闪存工具版本2.40、正如我已经提到过的。

    "好消息"是因为:
    星期二晚上,我们得到了第二块板(等待三周后),安装了8位闪存,而不是16位类型。
    该板会发生闪存-直到现在我们可以研究。 在闪存过程初始化期间从闪存芯片回复的字符串是正确的、正如数据表中的概念所预期的那样。 随后、闪存过程成功运行至结束、所有块都被验证为正常。 我们可以擦除闪存并在之后对其重新编程、而不会出现(明显)问题。

    因此、我们非常确信、该闪存芯片有缺陷。

    但电路板仍然无法从此映像引导-但这似乎是一个不同的问题、很可能是 ROM 引导加载程序配置的问题。
    之前我们使用了一个16位闪存、我们的电路在 OMAP 引脚 BOOT[0...7]上提供了0x10的引导模式。 为了通过 UART2加载闪存软件、我们使用引导模式0x14。 为了在这些引脚之间切换、我们使用单个外部信号、先使用跳线进行尝试、然后使用用于串行通信的 USB/RS232转换器的 GPIO 在我们(以后)生产闪存和测试脚本中的"闪存(0x14)"和"运行(0x10)"之间切换该单个位。
    现在、对于8位闪存、我们必须一次切换三个位、以便在0x14和0x0E 之间切换引导模式、以便从8位闪存引导/运行。
    I (尝试)通过作为逆变器的单个晶体管来完成此操作、以便将 BOOT[3]和 BOOT[1]从高电平切换为低电平、并将 BOOT[4]从低电平切换为高电平以进行下载/刷写、而 BOOT/RUN 的引导模式引脚的正常状态为0x0E。 我使用10k 电阻器将常用开关引导模式线路相互解耦、并使用万用表检查两种状态的电压电平。 电平看起来正常、但我们今天将使用四通道示波器来检查它是否更准确。
    我们已经阅读了应用手册 SPRAB41B (几周前)、我们认为对这个问题有了相当全面的了解、并希望今后继续下去。
    我将报告并要求解决的其他问题,当然,我也高兴地注意到成功完成了这项工作。

    再次感谢你
    霍斯特