jzzhl 发表于 2015-5-4 14:37

自制闪存编程器(STM32+SD卡脱机烧写)

本帖最后由 jzzhl 于 2015-5-4 14:37 编辑



      给大家讲讲我是如何在手上没有编程器的情况下自制了一个编程器,然后成功的刷入固件的。基于STM32(ARM)开发,开源给大家,放出原理图,源代码,软件工具等(见附件或http://pan.baidu.com/s/1gdfCJE7),仅供个人学习研究,请不要用于商业用途。本文的目的在于分享经验,晒晒楼主的技术:lol,没有开发过STM32经历的慎重折腾,建议还是用买来的编程器玩玩刷机就好。
一、      前几天从网上收了一个二手腾达N300,v1版32m内存的,据说有很高的可玩性,所以同时买了个8M闪存,SMA转接线,打算用来刷磊科236固件,搞搞中继、宽带叠加神马的。到手后以为换上新闪存,像电脑换硬盘一样,通电直接在网页上刷固件就行了,结果焊好后通电啥也没有,后来才知道还有个叫做CFE的东东类似于电脑的BIOS,需要用编程器刷到flash里。。。瞬间蛋疼了,手上没有编程器啊。。。某宝上20多就能搞到,但是路途遥远不想花时间坐等,而且感觉只为了刷一次路由就买个编程器不是很划算。楼主是学电子的,主要研究ARM神马的,手上有STM32最小系统板,sd卡之类的,于是就利用这些,还有修改正点原子的读写FLASH的例程,用了2个小时成功搞出了flash脱机烧写器。在坛子上下载的磊科236编程器固件刷入Flash,焊好,成功进入路由。以后会发一篇路由改好后的帖子,在此先不提。烧写8M flash用了大约10分钟,如果优化下程序,估计8分钟就可以了。



二、      先说下硬件结构,附件上会放出原理图,接线图及一些软件。首先,是STM32核心板,图片上的型号是STM32F103ZET6(144脚),实际上用STM32F103C8T6(48脚)就够用了

其次是SD卡座,楼主这个是自制的。。。

最后,需要一块洞洞板,把主角(8M flash)放在上面(像不像蜘蛛。。。)

主要就是这3大块,还有就是杜邦线若干。SD卡与flash都是通过SPI的方式读写的,所以可以共用一个SPI接口,通过片选脚区分,下面介绍下图中的卡座怎么接,看图就懂了

除此之外,还需一些工具,pl2303串口线是必须的,既可以下载程序,又能监控刷写进度。

j-link,如果你也是搞STM32开发的话,你肯定会有它的,就是用来给STM32下载程序的,串口线可以代替它,所以不是很重要


Stm32工程使用keil v4.0编译,工程在USER目录下的HZ.uvproj文件打开,已经编译好的源码在OUTPUT目录下的Flasher.hex。可以使用串口下载软件mcuisp.exe(见附件)将这个.hex文件下载到STM32中即可(这个.hex就是STM32编程器的程序(固件))。目前只实现了烧写功能,稍加改进,实现固件的备份也是可以的。



三、      介绍下如何使用。首先,把要写入的编程器固件改名为“update.bin”,找一张手机用的tf卡并格式化为FAT32格式,复制固件update.bin到TF卡中的根目录下,插入TF卡座。Stm32芯片已经下载好程序,硬件连接无误后,通电。这时会有LED指示灯,由熄灭变为常亮,表示是正在擦除全片flash,并写入固件。等LED变为闪烁状态时,固件写入完成,断电,取下flash焊接即可。刷写固件的同时也可以在串口端看到进度提示信息等,波特率9600。串口软件在附件中放出。数字的意义:前面一直在变的是当前烧写的地址,后面不变的是固件总共的大小,图中的就是8MB,最后的是烧写进度的百分比。烧写成功后,会在串口端打印出flash前100个地址的数据,方便查看是否烧写成功(不是全ff就成功了),和winhex打开update.bin文件的前100个字节应该是一样的。

最后来张全家福~

andy_wsj 发表于 2015-5-4 22:40

jzzhl 发表于 2015-5-4 21:45
烧写8m的用了大约10分钟,16M应该在20分钟左右吧,有ic插座就好了,每次烧写都要把8根导线重新焊接一遍

优化一下程序,应该可以做到几分钟,我买的烧写器大约就是2,3分钟,好像用的也是stm32的芯片

commy 发表于 2015-5-4 14:40

fengz41 发表于 2015-5-4 14:43

楼主耍一手好牛刀。

一爱一生 发表于 2015-5-4 14:57

楼主 强淫啊

qk796796 发表于 2015-5-4 15:05

麻烦给我个941V5的UBNT固件可以吗?

没有账号 发表于 2015-5-4 15:07

对于我等手无任何材料的人来说就是垃圾

jzzhl 发表于 2015-5-4 15:09

qk796796 发表于 2015-5-4 15:05
麻烦给我个941V5的UBNT固件可以吗?

这个真没有

zhang1351299 发表于 2015-5-4 15:15

高手啊,,,,

q269900 发表于 2015-5-4 15:44

STM32F103CBT6的芯片能用吗

jzzhl 发表于 2015-5-4 16:51

q269900 发表于 2015-5-4 15:44
STM32F103CBT6的芯片能用吗

可以用的,程序是STM32F103系列通用的

进士小站 发表于 2015-5-4 16:52

楼主好强大淫

zte兴 发表于 2015-5-4 17:10

好强啊!!!
页: [1] 2 3
查看完整版本: 自制闪存编程器(STM32+SD卡脱机烧写)