如何对砖块设备进行手动刷机?

逆向工程 固件 硬件 闪光 阿杜伊诺
2021-07-06 06:03:34

我买了一台损坏的 Zoom H4n 录音机,希望能轻松维修。我得到的有点超出了我的头脑。它没有启动(超过某个点),我无法进入固件更新工具。我认为固件更新已中断。

立即设置卡片

因此,我已将其闪存芯片 (EN29LV160B) 连接到 Arduino,现在我可以读取内容了。我希望在固件文件和内存中真正看到一些熟悉的功能,以便我可以对齐它们并手动写入丢失的字节。但这当然不是那么容易。事实上,我什至不知道我是否已经设置并正在以正确的顺序阅读所有 lsb ... msb。

在使用十六进制编辑器的 firmware.bin 文件中,我偶尔会发现以下内容:

...M.I.X.E.R. .E.N.A.B.L.E.....O.F.F. . . . . ...O.N. . . . . . ...O.F.F. .
. . . ...+.4.8.V. . . . ...+.2.4.V. . . . ...O.F.F. . . . . ...C.O.M.P.1. .
. ...C.O.M.P.2. . . ...C.O.M.P.3. . . ...L.I.M.I.T.1. . ...L.I.M.I.T.2. . .
...L.I.M.I.T.3. . ...O.F.F. . . . . . . . . . . . . ...C.O.M.P.1.
(.G.E.N.E.R.A.L.). . ...C.O.M.P.2.(.V.O.C.A.L.)` 

但是,不在我的芯片数据中。

在我的 Arduino 程序中,我尝试了许多可能的位反转和重新排列,这产生了最好的结果(如少数未知、制表符和换行符)

void loop() {
  char reading = 0;

  if (address == 2097152)
    while(1)
      delay(1);

   if (address%16==0){
    Serial.println();
    Serial.print(address);
    Serial.print(" ");
   }

  for (uint8_t i = 0; i < 21; i++)
    digitalWrite(adress[i], bitRead(address, i));

  for (uint8_t i = 0; i < 8; i++)
    bitWrite(reading,i,!digitalRead(inputs[7-i]));

  Serial.print(reading);
  Serial.print(" ");

  address++;
}

但是输出仍然没有人类可识别的内容。

还有什么我可以尝试的吗?

0个回答
没有发现任何回复~