现在网络上一直在流传短路 Flash 修复刷错固件的 MPN,这种方法也被很多人看成是修复 MPN 的杀手锏,到底这种方法是否真的有效呢?
我现在接触过的 MPN 也不多也就是 ATJ 和 RK 两种方案,所以,以下就此二种方案进行讨论: 先看 ATJ。
我看过许多 ATJ 由于固件刷错或其他原因引起的差电脑不识别的问题。在 ATJ 方案中,MPN 向电脑提供
了 2 种通讯协议:一个是 Store Device 也就是一般插上电脑识别出来的 U 盘设备。另一个是 AdfuUd Device 也就是当我们短路 Flash 是电脑识别出来的东西。重点就在这个 AdfuUd Device 从某个角度上说,这个协议就是炬力公司留下的应急接口,当固件刷错时,可以使用这种设备恢复固件!那当什么时候才会另 ATJ20xx 进入 AdfuUd 状态呢? 这个问题很简单,只要挂在 ATJ20XX 上的 Flash 访问失败是,就会进入这种状态。我曾把一台 2075 方案 Mp3 的弄下来(固件没问题),插上电脑识别出来 的就是 AdfuUd Device。
我们都知道,MCU 对 Flash 的访问就是 MCU 和 Flash 的交互,那么,当 MCU 对 Flash 进行初始化(访 问)时,Flash 就会给 MCU 返回一段数据,包括初始化成功消息、Flash 容量大小等信息。那么当 Flash 返回了错误的信息,MCU 就认为访问 Flash 失败。
那么,当 ATJ20XX 认为 Flash 访问错误时,自然就不会以 Store Device(U 盘)的方式与电脑交互,所以就会选择 AdfuUd Device。以此看来,我们短路 Flash 的数据脚,就是要破坏 Flash 返回给 MCU 的信息,欺骗 MCU Flash 访问失 败,这样就可以强使 ATJ20XX 进入 AdfuUd Device 模式。可见,用短路 Flash 的方法解决 ATJ20XX 软件问题是可行的!好,再来看 RK 方案。RK 在设计时,就把固件升级和一般的访问分开了。而且不允许任何程序通过 USB 连接访问固件 Flash 一般 RK 机器插上电脑会识别出一个 Store Device(U 盘设备),有可能还有一个 SD/MMC Reader/Writer(读卡器)当需要刷固件时,脱机状态下 按住 MODE(有些是 Vol+或者其他键)联机,电脑会识别出 Rockusb Device(本讨论仅限电脑能识别出设备的情况) 升级程序就通过这种设备把要升级的程序刷进去。 依此看来,短路 Flash 的方法对于 RK 系列是行不通的。OK,现在再说说当 RK 系列刷错固件后再刷时出现的“.........Flash 坏块过多....”和正常联机后访问 Flash 出现“请将磁盘插入驱动器.....”的问题。其实这两个侍舛加幸桓龉餐 脑赐罚 饣挂 覴 K 芯片的 Flash 说起。RK 芯片不止支持一块 Flash,所以,才会有支持读卡器等设备的机器出现,不过很可惜,为了提高扩展性,RK 芯片的 Flash 访问通道是由固件来决定的,即:
假设某块 RK 芯片有 4 个存储设备通道 S0~S3(除固件 Flash)。 现在在此 RK 芯片上挂 1 个 Flash 和 1 个 SD:
这个是硬件的配置,那么在软件的配置上,固件里指定的存储设备挂载点和硬件相符合,没什么好怀疑的,
这是正常的固件,一切正常,也不会出现上面提出的两种问题。则,如果刷入了错误的固件,其中指定存
储设备挂载点如下:
这样硬件访问自然会出错,因为有可在存储设备通道中挂有 Flash 也有可能挂有读卡器等,而读卡器中很有可能没有插卡,所以,RK 不会因为存储设备访问出错而做什么特别的事,所以插上电脑我们仍然可以看到那几个驱动器......这个也就是为什么刷错固件后,正常联机后访问 Flash 会出现“请将磁盘插入驱动器.....”的原因。至于第一个问题——刷错固件后再刷时出现的“.........Flash 坏块过多....”刚开始我们说过,RK 不允许程序通过 USB 直接访问固件 Flash,所以,升级程序要先通过 Rockusb Device 把要写入的固件写到挂在 RK 上的存储器的剩余空间里,然后通知 RK,RK 效验固件程序后,再把固件刷到 固件 Flash 中。(我个人认为这种设计真的很棒!) 那么根据上面所说的存储设备挂载错误,自然程序无法访问已挂载的存储器,就说 Flash 坏块过多啦~~~ 至于这个问题,我暂时还没有找到比较好的解决方法。
请大家一起来研究,找到一个完善的解决方法。 |