痞子衡嵌入式:聊聊i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常。
我们知道 i.MXRT 系列本身并没有片内非易失性存储器作为启动设备,所以硬件工程师第一件事便是为 i.MXRT 搭配一颗外置代码存储器,而串行 NOR Flash 往往是代码存储器的第一选择。既然这是刚需,为何不直接合封一颗经典的 NOR Flash 进芯片内部呢?是的,恩智浦也考虑到了这一点,这便有了 i.MXRT1024/1064 这两颗内置 Flash 的型号(至于没有给 i.MXRT 全系列强制标配 NOR Flash,也跟代码存储器类型以及容量、速度需求不一有关)。
近期有一个 RT1064 客户反馈,在给产品做量产时出现芯片无法正常使用 J-Link 或者恩智浦官方下载工具下载程序到片内 Flash 的现象,恰好痞子衡手头有一块官方 RT1064-EVK 板卡也无法烧录程序,经过痞子衡的一番摸索,发现片内 Flash 竟然没有有效的 SFDP 表,这是怎么回事?且听痞子衡细说:
一、RT片内Flash简介
1.1 W25Q32JV
芯片合封技术实际上并不是什么新鲜事,对于 RT1024/1064 来说,就是将 RT1020/RT1060 的 Die 与选定的一颗 NOR Flash Die 封装在一起,RT 与 Flash 之间的信号连接在片内完成。
那么 RT1024/1064 内置的 NOR Flash 到底来自哪家供应商呢?这可以借助 \SDK_2_16_000_EVK-MIMXRT1064\boards\evkmimxrt1064\driver_examples\flexspi\nor_internal\polling_transfer 例程简单修改一下代码,读回 Flash 的 JEDEC ID 得知是来自全球排名第一的 NOR Flash 厂商 Winbond 的 W25Q32JV-IQ/JQ(4MB, 四线, 133MHz SDR,3.3V)。

1.2 RT1024片内连接
在 RT1024 上使用了如下 PAD 连接到了片内 Flash,这些 PAD 同时也是外部引脚。(注意其中 GPIO_SD_B1_05 并没有被 BootROM 初始化,因为片内 Flash 不能直接高速启动)

1.3 RT1064片内连接
在 RT1064 上使用了如下 PAD 连接到了片内 Flash,这些 PAD 仅是内部引脚,没有引到外部。(不过在 BGA 225 封装的 RT1060X 型号上被引出了)

二、SFDP对于烧录工具的重要性
JESD216 是一个关于串行 NOR Flash 的标准,它“规范”了 NOR Flash 厂商的产品。这里的“规范”两字加了引号,因为这个标准比较有意思,并不是先有标准,再有 Flash 产品,而是先有各大厂商的 Flash 产品出来,然后 JESD216 才开始总结这些不同厂商的产品特性,企图形成一个看起来比较统一的规范。
目前主流 NOR Flash 厂商产品都是支持 JESD216 标准的,这体现在如下 Read SFDP (0x5A) 命令时序统一上。JESD216 标准定义了一个 256 字节大小的 SFDP 表,这个表收纳了该 Flash 的几乎全部特性(速度、容量、寄存器分布、命令集等等),对于软件驱动开发者来说尤其重要。

SFDP 表结构大概是这样,一开始是 signature 以及 version,然后是 Flash 各种属性信息。看到这你就能明白为啥 SFDP 对于烧录工具的重要性了,烧录工具依赖底层的 Flashloader,而 Flashloader 一般设计上是追求通用的,所以其会先获取 Flash SFDP 表进行解析得到 Flash 全部信息,然后根据这些信息加载合适的软件驱动去读写擦 Flash。因此如果得不到正确的 SFDP 表,那么依赖通用 Flashloader 的烧录工具便无法正常工作。J-Link 以及恩智浦官方烧录工具都是基于通用 Flashloader 思想设计的。

三、Winbond NOR Flash的SFDP操作
翻开以 W25Q32JV 为代表的 Winbond NOR Flash 数据手册,我们从其模块框图可以得知 Flash 内部存储颗粒由三种类型组成, 地址范围 0x000000 - 0x3FFFFF 的 Memory Block,地址范围 0x000000 - 0x0000FF 的 SFDP,地址范围 0x001000 - 0x0030FF 的 Security Registers。对于 Memory Block 的读写擦操作我们再熟悉不过了,那后两种类型该用什么命令操作呢?

继续查看数据手册,找到了如下关于 Security Registers 的专用读写擦命令时序。上一节介绍了 Read SFDP 命令,似乎 SFDP 这个地址空间仅支持读操作,那么 SFDP 数据是如何在 Flash 出厂时被写入的呢?到底是直接固化(随芯片 TO)?还是 OTP 一次性专用后门命令擦写的?带着这个疑惑,痞子衡咨询了 Winbond 技术人员,他们告知其实 Security Registers 擦写命令可以同样擦写 SFDP 空间。

即 Security Registers 读写擦命令时序里地址参数 A15-12 设 4'b0000 时,实际操作得就是 SFDP 空间(虽然手册里没有明说这一点)。基于这个消息,痞子衡找了一个正常的 RT1064-EVK 板卡读出其有效的 SFDP 表数据,然后将该 SFDP 表写入异常的 RT1064-EVK 板卡,这时候下载工具就能够正常烧录了。所以 RT1024/RT1064 芯片发生这种异常,要么是出厂漏烧了 SFDP 表,要么是 SFDP 被用户误擦除过。

至此,i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常痞子衡便介绍完毕了,掌声在哪里~~~
欢迎订阅
文章会同时发布到我的 博客园、CSDN、微信公众号、知乎、与非网、电子技术应用AET、电子星球、51CTO 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:聊聊i.MXRT1024/1064片内4MB Flash的SFDP表易丢失导致的烧录异常的更多相关文章
- 痞子衡嵌入式:IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IVT里的不同entry设置可能会造成i.MXRT1xxx系列启动App后发生异常跑飞问题的分析解决经验. 事情缘起恩智浦官方论坛上的一 ...
- 痞子衡嵌入式:一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事(SR寄存器BP[x:0]位)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是一个关于Segger J-Flash在Micron Flash固定区域下载校验失败的故事. 痞子衡最近在支持一个 i.MXRT1170 欧 ...
- 痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部Flash IAP驱动. LPC 系列 MCU 是恩智浦公司于 2003 年开始推出的非常具有代表性的产品 ...
- 痞子衡嵌入式:聊聊i.MXRT1xxx上的普通GPIO与高速GPIO差异及其用法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT上的普通GPIO与高速GPIO差异. GPIO 可以说是 MCU 上最简单最常用的外设模块了,当一些原生功能外设接口模块不能 ...
- 痞子衡嵌入式:聊聊i.MXRT1170双核下不同GPIO组的访问以及中断设计
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1170双核下不同GPIO组的访问以及中断设计. 在双核 i.MXRT1170 下设计应用程序,有一个比较重要的考虑点就是外 ...
- 痞子衡嵌入式:聊聊系统看门狗WDOG1在i.MXRT1xxx系统启动中的应用及影响
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是系统看门狗WDOG1在i.MXRT1xxx系统启动中的应用及影响. 软件看门狗模块(WDOG)在 MCU 应用里可以说是非常基础的功能模 ...
- 痞子衡嵌入式:原来i.MXRT1xxx系列里也暗藏了Product ID寄存器
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列里暗藏的Product ID寄存器. MCU 厂商在定义一个产品系列时,通常是会预先规划产品发展路线的(即会有一 ...
- 痞子衡嵌入式:探讨i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题. 前段时间有客户在官方社区反映 i.MXRT1170 下 ...
- 痞子衡嵌入式:Ethos-U55,ARM首款面向Cortex-M的microNPU
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Ethos-U55. ARM 前几天刚发布了 Cortex-M 家族最新一款内核 - Cortex-M55 以及首款面向 Cor ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.3)- FlexSPI NOR连接方式大全(RT1010)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1010的FlexSPI NOR启动的连接方式. 在写完 <FlexSPI NOR启动连接方式(RT1015/ ...
随机推荐
- 库卡机器人KR120示教器日常保养技巧
库卡机器人KR120是一款高效.精准的工业机器人,广泛应用于各个领域.然而,要确保其长期稳定运行,日常的保养和维护至关重要.下面,我们将为您介绍库卡机器人KR120示教器的日常保养 ...
- keil优化等级说明 keil code optimization
其中 0级(Constan folding)的优化包括: a.常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算. b. 简单访问优化:对8051系统的内部数据和位地 ...
- 【Unity】URP中的UGUIShader实现
[Unity]URP 中的 UGUIShader 实现 参考官方 Shader 代码实现: https://github.com/TwoTailsGames/Unity-Built-in-Shader ...
- Hbase - hbase hbck介绍
原文地址:https://bbs.huaweicloud.com/blogs/353332 HBaseFsck(hbck)是一种命令行工具,可检查hbase集群的region一致性和表完整性的问题,同 ...
- nuxt,从开发到线上部署
起因: 前段时间,同组小伙伴使用vue做了一个小后台,使一位后端沉寂多年得求道之心又躁动了起来...然后,当我和这个躁动起来得后端要合作重构一个网站得时候,后端小哥哥说,就知道套页面,套页面,不用新技 ...
- Mysql 8.0 创建用户、授权用户、更改密码、撤销用户权限、删除用户
一. 创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username: 你将创建的用户名 host: 指定该用户在哪 ...
- 【WPF开发】 direct3d11 调试报错
环境:VS2022 WPF Win11 过程:准备调试d3d11着色器转换nv12->rgb的过程 报错信息:DXGI_ERROR_SDK_COMPONENT_MISSING 应用程序请求的操作 ...
- 网络编程-关闭连接(2)-Java的NIO在关闭socket时,究竟用了哪个系统调用函数?
背景 在上一讲网络编程-关闭连接-C/C++相关系统调用中,提到过,目前项目使用Netty框架来实现的网络编程,查看netty源码可以得知,netty最终是调用了java Nio的close接口做的关 ...
- 【手机】三星手机刷机解决SecSetupWizard已停止
三星手机恢复出厂设置之后,出现SecSetupWizard已停止的解决方案 零.问题 我手上有一部同学给的三星 GT-S6812I,这几天搞了张新卡,多余出的卡就放到这个手机上玩去了.因为是获取了ro ...
- 超实用!Prompt程序员使用指南,大模型各角色代码实战案例分享
提示词(Prompt)是输入给大模型(LLM)的文本指令,用于明确地告诉大模型你想要解决的问题或完成的任务,也是大语言模型理解用户需求并生成准确答案的基础.因此 prompt 使用的好坏,直接决定了大 ...