本帖最后由 jzzhl 于 2015-5-4 14:37 编辑
给大家讲讲我是如何在手上没有编程器的情况下自制了一个编程器,然后成功的刷入固件的。基于STM32(ARM)开发,开源给大家,放出原理图,源代码,软件工具等(见附件或http://pan.baidu.com/s/1gdfCJE7 ),仅供个人学习研究,请不要用于商业用途。本文的目的在于分享经验,晒晒楼主的技术,没有开发过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个字节应该是一样的。
最后来张全家福~
|