首页
社区
课程
招聘
[原创] CrazyRadio固件故障分析与SPI编程器制作
发表于: 2021-8-30 05:38 16139

[原创] CrazyRadio固件故障分析与SPI编程器制作

2021-8-30 05:38
16139

    手误将优联接收器的固件刷入CrazyRadio,出现设备失灵的情况,既无法将CrazyRadio作为接收器使用,也无法通过usb再对设备进行读写操作。为了找出原因,在修复之前我想先把整个flash提取出来简单分析一下,于是便有了这个项目。

1.查阅资料
    进行多次尝试与查阅资料后在nRF24LU1+官方文档发现:

    这款芯片都预置了一个USB bootloader: boot24lu1p-f32.hex ( 可在官方SDK中找到)
理论上来讲,只要能将该hex文件写入Flash中,一定可以让设备重新运行,但是为了弄清问题的原因,先避免对Flash进行任何写入操作。
2.读取Flash
    在此为了分析问题的成因,决定先将整个Flash读出来进行分析。这里选择用一块Arduino对其进行SPI读写。
    接线方式与引脚对应关系:

    需要注意的是,在Arduino内置函数SPISettings()中,参数1为SPI通信速度,该值不能使用官方示例程序中的默认值(14000000),否则速度过快会导致数据丢失,出现大规模的0x00。
    将读取到的数据通过串口以十六进制字符打印出来,得到Flash中的全部内容。可以发现,其中包含有优联接收器的完整固件。

3.Flash中内容分析
   a.出厂Flash
      出厂Flash的起始位置:

      跳转到0x7800的位置,再看0x7800处:

   b.刷入优联固件后的Flash:
      优联Flash的起始位置:

     跳转到bootloader的指令被优联固件覆盖

    跳转到bootloader的指令被优联固件覆盖,导致设备加电后无法执行bootloader代码,而bootloader中可能包含有拷贝Flash中固件到RAM中的代码,以及初始化USB的代码。所以导致设备失灵且无法使用USB进行读写操作。

    制作一个SPI编程器,通过写入出厂bootloader,将设备重新运行起来。
为Arduino编写程序,在加电后监听串口,有数据传来就将数据通过SPI写入外部Flash。同时用python编写上位机程序,将hex文件数据通过串口发送给Arduino。

1.Arduino部分 :
    此部分主要涉及到Arduino与CrazyRadio的SPI通信
    需要注意:

2.上位机部分:
    此部分主要涉及到PC与Arduino的串口通信
    需要注意:

3.写入
    写入hex文件后,CrazyRadio又可以正常工作。

         Arduino     CrazyRadio
======================================
    MOSI:    11    ==>      6
    MISO:    12    ==>      8
    SCK :    13    ==>      4
    SS  :    10    ==>      10
    3V3 :    3V3   ==>      5
    GND :    GND   ==>      9
         Arduino     CrazyRadio
======================================
    MOSI:    11    ==>      6
    MISO:    12    ==>      8
    SCK :    13    ==>      4
    SS  :    10    ==>      10
    3V3 :    3V3   ==>      5

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 339
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
太强了
2021-11-22 09:13
0
游客
登录 | 注册 方可回帖
返回
//