当前位置:网站首页 > 编程语言 > 正文

单片机程序破解(单片机程序破解后再烧录的芯片还有密码吗?)



        H7系列单片机支持XIP模式,也就是可以运行单片机外部的SPI FLASH中的程序。也就是程序会分配在内部和外部FLASH中,那么这种情况下使用Bootloader会发生什么呢?接下来就来分析一下这其中发生了什么。

        我们先研究串口IAP例程。

        对于无需外部flash的单片机iap比较好理解,bootloader首先占据起始一段内存,留足空间并且一直存在,负责上电检测更新固件以及跳转执行,唯一注意的就是尽量精简bootloader占据的内存,保证APP有充足的空间,不要超过bootloader占据剩下的内存,也不要动用bootloader占据的内存里面的数据,即保证bootloader的完整性、安全性。

        那么对于H7系列,大部分应用程序都是占据两部分内存的,即单片机内部FLASH(很小的一部分)和外置SPIFLASH,正是减小了内置FLASH才降低了价格,所以除非比较小的应用程序,否则内部FLASH根本装不下,所以应用程序都是占据两部分,而且不可以把程序全部放在外部FLASH,不然会导致无法运行的问题,所以内部很小的一块内存都是存放很重要的一些程序,比如初始化内核、时钟、中断调用等等这些需要初始化运行、快速响应的,那么我们写的bootloader也是占据着两部分的内存。

        对于其他单片机来说,bootloader直接擦掉bootloader之后的N个整块,再把bin文件从串口、USB、CAN、485、SD卡、U盘什么的读取出来写到擦除好的地方,判断一下就可以跳过去执行了,但是750只有一块内存,一个扇区,而且现在不是跑着bootloader吗,把自己擦了,不知道什么时候就挂掉了。

        所以这里bootloader就不能在flash里面跑了,比如我们把它弄到ITCM里面去跑,但是单片机上电肯定是从内部的flash开始跑的,所以要先把bootloader程序弄到ITCM里面,然后跳到那去跑bootloader,现在就有两个程序了,一个bootloader在ITCM里面跑的,擦FLASH不会影响它,一个用来把(在ITCM里面跑的)bootloader拷到ITCM里面去,因为停电了ITCM就没有数据了,所以想跑ITCM的bootloader每次都需要重新拷到ITCM里面去,要拷的这段ITCM bootloader程序可以放在拷它的程序里面,就是在这个程序里面放数组,数组里面是ITCM的程序。如下。

        上电之后程序从内部FLASH运行,ITCM是空的,烧录好的淡蓝色程序1就负责把程序2从外部FLASH拷贝到ITCM,然后跳过那里去跑程序,这时bootloader才运行起来了,就可以接受外面发来的程序,或者它自己从其他地方读。

        接着考虑其他问题,前面说的,750只有一块内存,一个扇区,即使现在在ITCM里面跑,不受擦除FLASH的影响,那么擦除掉FLASH之后是什么情况,APP程序占据了内部FLASH,也占据了外部FLASH

        断电之后的情况

        那么还要接着考虑怎么再把bootloader弄回来,总不能更新一次APP刷一次bootloader

        还是这张图,执行判断擦除和跳转的都是程序2,所以一定要保证程序2的存在,而程序2的家在外部FLASH里面的程序1里边,所以外面FLASH的程序1要保住,而程序又每次从内部FLASH运行的,所以内部FLASH的程序1也要留住,擦除又不能擦除,不擦除又没法更新APP,所以这里就得用补救的办法了。

        怎么做呢,首先是肯定要擦的,不然没法更新APP程序。那又要保证程序1存在,所以先把程序1备份,谁来备份,当然是程序2了,所以现在的做法是先把内部FLASH的程序1读出来放在数组缓存里面,然后等擦除完了之后,先把数组里面的程序1写进去,然后再把APP程序从程序1后面开始写到内部FLASH。

        首先备份,并擦除

        然后恢复回来FLASH里面的程序1,再接着写APP

        程序重新上电之后,依旧先拷贝程序2到ITCM运行,这次有了APP,就直接跑去APP运行了

大的程序一共3个:

        首先做的应该是第1个程序,因为第2个需要根据第1个来,需要把第1个的完整程序生成bin文件,转成数组放到程序2里面。

        这里需要确定boot loader(程序1)实现的具体功能,生成数组之后然后定好代码段占用的地址以及大小。

        程序从IROM1起始0x0,大小0x10000存储

Map文件信息

Memory Map of the image

Image Entry point : 0x00000299

Load Region LR_IROM1 (Base: 0x00000000, Size: 0x0000a7fc, Max: 0x00010000, ABSOLUTE)

Execution Region ER_IROM1 (Base: 0x00000000, Size: 0x0000a7d0, Max: 0x00010000, ABSOLUTE)

Execution Region RW_IRAM1 (Base: 0x, Size: 0x000040c0, Max: 0x00020000, ABSOLUTE)

Total RO  Size (Code + RO Data)                42960 (  41.95kB)

Total RW  Size (RW Data + ZI Data)           (2528.19kB)

Total ROM Size (Code + RO Data + RW Data)      43004 (  42.00kB)

程序中断向量地址无需偏移。

        确定好bootloader功能之后根据大小确定加载bootloader的FLASH程序占用内部FLASH以及外部FLASH空间,Bootloader根据加载程序大小决定备份区域大小,擦除及写入位置,APP程序根据Bootloader程序操作地址设置中断向量偏移量。

到此这篇单片机程序激活成功教程(单片机程序激活成功教程后再烧录的芯片还有密码吗?)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • dos 转 unix(dos转unix命令)2025-03-07 23:18:08
  • 27930报文解析(8583报文解析工具)2025-03-07 23:18:08
  • 越狱源吧(最全的越狱源)2025-03-07 23:18:08
  • vb系列的游戏(vb系列游戏是什么)2025-03-07 23:18:08
  • 安装虚拟机蓝屏重启不了(安装虚拟机蓝屏重启不了什么原因)2025-03-07 23:18:08
  • webflux入门(webfluxmono)2025-03-07 23:18:08
  • nsa是哪个港口缩写(inmaa是哪个港口代码)2025-03-07 23:18:08
  • qq号需要实名认证码(qq号需要实名认证码怎么办)2025-03-07 23:18:08
  • 打印机共享修复工具(共享709打印机错误怎么解决)2025-03-07 23:18:08
  • 游戏的分类标准是什么(游戏的分类标准是什么 继续教育)2025-03-07 23:18:08
  • 全屏图片