打印
[资源分享]

python解析keil下flm算法

[复制链接]
5502|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JasonLee27|  楼主 | 2021-1-13 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做烧录器的时候,想到使用动态加载flash算法的方式实现SWD烧录,从github上找了个将keil的FLM文件解析成c文件的脚本,然后应用于烧录软件中。
FLM文件的本质就是elf文件,里面包含了烧录和链接信息。可以从里面解析出你的函数以及入口地址等。将其转化成c文件编译到烧录软件中,通过SWD口加载到目标板,然后执行相应的程序,就可以实现对目标板进行烧录。
#include "flash_blob.h"

static const uint32_t flash_code[] = {
    0xE00ABE00, 0x062D780D, 0x24084068, 0xD3000040, 0x1E644058, 0x1C49D1FA, 0x2A001E52, 0x4770D1F2,
    0x4770BA40, 0x4770BA40, 0x4770BA40, 0x4770BA40, 0x4770BAC0, 0x4770BAC0, 0x4770BAC0, 0x4770BAC0,
    0x0030EA4F, 0x00004770, 0x0030EA4F, 0x00004770, 0x0030EA4F, 0x00004770, 0x0030EA4F, 0xB5104770,
    0x46234604, 0x21082203, 0xF00006C8, 0xBD10FA2C, 0x4604B510, 0x22044623, 0x07082114, 0xFA23F000,
    0x0000BD10, 0x4604B510, 0x22084623, 0x48022111, 0xFA19F000, 0x0000BD10, 0x40008890, 0x4604B510,
    0x22024623, 0x4802211C, 0xFA0DF000, 0x0000BD10, 0x40008890, 0x4604B510, 0x22024623, 0x4802211E,
    0xFA01F000, 0x0000BD10, 0x40008890, 0x4604B510, 0x22044623, 0x07104611, 0xF9F5F000, 0xB510BD10,
    0x46234604, 0x21002202, 0xF0000750, 0xBD10F9EC, 0x20024601, 0x6F00F1B1, 0x4A02D302, 0xD9004291,
    0x47702011, 0x08040000, 0x69004803, 0x0002F040, 0x61084901, 0x00004770, 0x40002000, 0x2402B570,
    0xF44F2500, 0xF0000020, 0x4604F919, 0xD1222C02, 0x7581F44F, 0xF0004628, 0xF000F8BB, 0xF44FF8CD,
    0xF0000020, 0x4604F90B, 0xD1152C02, 0x0020F44F, 0xF8F2F000, 0x2C024604, 0xF7FFD10B, 0xBF00FFD5,
    0x69004806, 0x0040F000, 0x240CB108, 0x2402E004, 0x2404E002, 0x2404E000, 0xBD704620, 0x40002000,
    0x4605B570, 0x26002402, 0xF7FF4628, 0x4604FFB1, 0xD12D2C02, 0x0020F44F, 0xF8E0F000, 0x2C024604,
    0x4628D125, 0xF890F000, 0x1601F240, 0xF0004630, 0xF000F87F, 0xF44FF891, 0xF0000020, 0x4604F8CF,
    0xD1152C02, 0x0020F44F, 0xF8C8F000, 0x2C024604, 0xF7FFD10B, 0xBF00FF99, 0x69004806, 0x0040F000,
    0x240CB108, 0x2402E004, 0x2404E002, 0x2404E000, 0xBD704620, 0x40002000, 0x47F0E92D, 0x46884607,
    0x24024615, 0x0A00F04F, 0x46382600, 0xFF70F7FF, 0x2C024604, 0xF5B5D142, 0xD9027F00, 0xE8BD2007,
    0xF44F87F0, 0xF0000020, 0x4604F899, 0xD1332C02, 0xF0004638, 0x01E0F849, 0x4005EA40, 0x0A03F100,
    0xF0004650, 0xF000F835, 0x2600F847, 0xF858E004, 0x60380026, 0x1C761D3F, 0xD3F842AE, 0x0020F44F,
    0xF87CF000, 0x2C024604, 0xF44FD114, 0xF0000020, 0x4604F863, 0xD10B2C02, 0xFF46F7FF, 0x4809BF00,
    0xF0006900, 0xB1080020, 0xE008240B, 0xE0062402, 0xE0042404, 0xE0022404, 0xE0002404, 0x46202411,
    0x0000E7BD, 0x40002000, 0x68084601, 0x00004770, 0x60C84901, 0x00004770, 0x40002000, 0x60084901,
    0x00004770, 0x40002000, 0x0113F3C0, 0x60914A01, 0x00004770, 0x40002000, 0x68C04803, 0x0010F040,
    0x60C84901, 0x00004770, 0x40002000, 0x2502B570, 0x24002600, 0x480DBF00, 0x0FC06840, 0xE00F4606,
    0xF7FF480B, 0x480BFFDB, 0xFFD8F7FF, 0xD9012C64, 0xE0072510, 0x4805BF00, 0x0FC06840, 0x1C644606,
    0xD0ED2E01, 0x4628BF00, 0x0000BD70, 0x40002000, 0x00AC7811, 0x01234567, 0x20024601, 0x1E49E000,
    0x4A05BF00, 0xF3C26912, 0xB90A0240, 0xD1F62900, 0x2010B901, 0x00004770, 0x40002000, 0x20024601,
    0x1E49E000, 0x4A05BF00, 0xF0026912, 0xB10A0201, 0xD1F62900, 0x2010B901, 0x00004770, 0x40002000,
    0x2402B510, 0xFECAF7FF, 0x2C024604, 0x2001D001, 0x2000BD10, 0xB570E7FC, 0x25024604, 0xF7FF4620,
    0x4605FEEF, 0xD0012D02, 0xBD702001, 0xE7FC2000, 0x4604B570, 0x4616460D, 0x68404808, 0x0001F000,
    0x2001B108, 0xF000BD70, 0xF7FFF872, 0xF44FFF8F, 0x49023080, 0x20006408, 0x0000E7F4, 0x40002000,
    0x41F0E92D, 0x460C4606, 0x27024615, 0x462908A2, 0xF7FF4630, 0x4607FF01, 0xD0022F02, 0xE8BD2001,
    0x200081F0, 0x0000E7FB, 0x20004601, 0x68524A06, 0x6200F042, 0x605A4B04, 0x4A03BF00, 0xF0026852,
    0x28004080, 0x4770D0F9, 0x40008000, 0x4810E004, 0x60084910, 0x60084810, 0x6840480E, 0x4000F000,
    0xD1F42800, 0x490B480D, 0xBF006148, 0x69404809, 0x3000F400, 0xD1F92800, 0x69404806, 0x7080F440,
    0x61484904, 0x68404608, 0x4000F040, 0x47706048, 0x00AC7811, 0x40002000, 0x01234567, 0x00013062,
    0x2000B510, 0xFDF4F7FF, 0xF7FF2000, 0x2002FE13, 0xFE04F7FF, 0xF7FF2060, 0x2001FDF5, 0xFFB4F7FF,
    0xF7FF2000, 0x2001FE13, 0xFE19F7FF, 0xB510BD10, 0xFFBCF7FF, 0xFFE4F7FF, 0xF7FF2004, 0xBD10FDD0,
    0x20004601, 0xB5704770, 0x68024614, 0x40A62601, 0xFA061E76, 0x43AAF501, 0xF601FA03, 0x4332402E,
    0xBD706002, 0x00000000
};

const program_target_t flash_algo = {
    0x200003B1,  // Init
    0x200004C1,  // UnInit
    0x20000381,  // EraseChip
    0x20000397,  // EraseSector
    0x200003E1,  // ProgramPage

    // BKPT : start of blob + 1
    // RSB  : address to access global/static data
    // RSP  : stack pointer
    {
        0x20000001,
        0x20001000,
        0x20001400
    },

    0x20000800,  // mem buffer location
    0x20000000,  // location to write prog_blob in target RAM
    sizeof(flash_code),  // prog_blob size
    flash_code,  // address of prog_blob
    0x00000800,  // ram_to_flash_bytes_to_be_written
};


上面是生成的c文件,里面包含了函数地址,flash code,栈地址等。

附件是python脚本以及我用于测试的flm文件。
Python.rar (16.89 KB)

同时附上github链接:https://github.com/XIVN1987/DAPProg,将里面的stm32算法换成ac781x的,同时把IO口配置一下,你也可以自制一个烧录器了。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
菜鸟tony1 + 2 很给力!

相关帖子

沙发
余三水| | 2021-1-14 20:44 | 只看该作者
意思是有这个算法就可以做烧录器吗?感觉没有这么简单吧,不过楼主做的高大上支持一下

使用特权

评论回复
板凳
JasonLee27|  楼主 | 2021-1-15 10:08 | 只看该作者
余三水 发表于 2021-1-14 20:44
意思是有这个算法就可以做烧录器吗?感觉没有这么简单吧,不过楼主做的高大上支持一下 ...

github上的链接是stm32的烧录算法,通过这个python脚本生成ac7811对应的算法导入进去替换,就可以使用了,当然,还需要硬件配合一下

使用特权

评论回复
地板
内政奇才| | 2021-1-15 16:34 | 只看该作者
楼主做的高大上支持一下

使用特权

评论回复
5
嵌入小菜菜| | 2021-1-15 17:11 | 只看该作者
第一次感觉还可以这么做,是不是好多都可以使用Python来完成。

使用特权

评论回复
6
里面有晴雨| | 2021-1-15 17:49 | 只看该作者
楼主是高手,竟然使用Python来进行实现。

使用特权

评论回复
7
JasonLee27|  楼主 | 2021-1-18 10:54 | 只看该作者
嵌入小菜菜 发表于 2021-1-15 17:11
第一次感觉还可以这么做,是不是好多都可以使用Python来完成。

就脚本来说,python确实方便

使用特权

评论回复
8
七毛钱| | 2021-1-18 11:12 | 只看该作者
竟然使用Python来进行实现,牛人一枚

使用特权

评论回复
9
zhengshuai888| | 2021-1-22 08:16 | 只看该作者
不错,感谢楼主分享经验。

使用特权

评论回复
10
yangxiaor520| | 2021-1-22 18:22 | 只看该作者
学习了,感谢楼主分享。

使用特权

评论回复
11
qmzn2333| | 2021-11-25 10:26 | 只看该作者
请问楼主,flash_code开头的这32字节是什么用处?0xE00ABE00, 0x062D780D, 0x24084068, 0xD3000040, 0x1E644058, 0x1C49D1FA, 0x2A001E52, 0x4770D1F2,

使用特权

评论回复
12
james03| | 2021-11-26 10:41 | 只看该作者
学习了,得顶一下

使用特权

评论回复
13
两只袜子| | 2021-11-29 09:42 | 只看该作者
学习了,得顶一下

使用特权

评论回复
14
mutable| | 2021-12-6 16:28 | 只看该作者
高手高手高高手~~~

使用特权

评论回复
15
gouguoccc| | 2021-12-7 08:47 | 只看该作者
牛啊,学习了。

使用特权

评论回复
16
littlelida| | 2021-12-9 13:44 | 只看该作者
不明觉厉~

使用特权

评论回复
17
七毛钱| | 2021-12-13 11:19 | 只看该作者
太牛了,必须学习

使用特权

评论回复
18
七毛钱| | 2021-12-13 11:20 | 只看该作者
太牛了,必须学习

使用特权

评论回复
19
七毛钱| | 2021-12-13 11:20 | 只看该作者
太牛了,必须学习

使用特权

评论回复
20
Zpc| | 2022-1-20 23:46 | 只看该作者
学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

415

帖子

11

粉丝