[作品]:MEGA8做的USB下载线

  • 格式:doc
  • 大小:2.72 MB
  • 文档页数:11

:[作品]:MEGA8做的USB下载线
作者:billowtust
然后,因为原先的USBASP固件是不支持大FLASH编程的,比如MEGA128的128K FLASH在原固件下只能写入前64K,如果你的程序大于64K,那么超过64K的部分会在0地址重新开始写,结果就是:0地址校验错误。

于是,于是……,眼光停留在了桌子上的USBISP上,这个编程器是找别人借来的,SL的产品,肯定是能写入整128K的,于是…… SL 的USBISP也是用MEGA模拟的USB通信,USBASP也是,为什么不能让USBASP兼容SLISP软件呢?于是开工,经过两天时间,解决了命令字的问题,终于让SLI SP软件识别出USBISP硬件来(实际上是USBASP编程板),然后写了一些代码来屏蔽两个编程器硬件上的差别……,最后的结果是,SLISP软件被骗了,大家请看:
(以下图片点击查看大图)
光这样还不够,接着来:
这次编程是对MEGA128进行操作的,写入的文件长度是131072字节,也就是MEGA128满片都被写入了。

结论:我解决了USBASP编程器原固件只能写入前64K的问题。

做完这件事,突发奇想,智峰的软件一直不错,按理说是会不笨到不更新高位地址的,于是再回去用BUS HOUND看写MEGA128时候的数据,而且是满片写入的数据(因为是原固件,所以编程结果是失败了的),看了N长的数据,终于让我找到一点线索:厂商自定义请求的0x09号请求代码。

以前就见过这个09号请求,但是没发现有什么特别,刚开始以为是PROGISP软件用来定义编程速度的,结果后来被自己否决了。

而在写入MEGA128的时候,突然发现这个09号请求后面带的数据是和06号请求(FLASH写入)后面带的地址数据是一样的,而且在超过64K后,09号请求的地址是给出了高位的,而06号写FLASH请求却没有。

这是低于64K时候的数据:
c0 09 00 f7 00 00 04 00 VENDOR
40 06 00 f7 00 10 00 01 VENDOR
而当高于64K后,数据变成了这样:
c0 09 00 02 01 00 04 00 VENDOR
40 06 00 02 00 10 00 01 VENDOR
看到了没,09请求的地址变成了01 02 00,而06请求的地址是02 00,这就是为什么以前没办法写全片128K FLASH的原因了。

只要稍微修改一下固件,就能支持全片128K FLASH的读写了。

于是原固件的这个问题也被我修正了。

大家要是感兴趣,可以自己试着修改一下代码。

接下来SHOW一下我的USBASP电路:
那个蜂鸣器是能提示编程操作正确与否的,正确长鸣一声,否则4声短鸣。

三个LED 感觉有些多了,其实两个就够的,绿的那个是编程连接指示,进入编程时亮直,结束时灭。

中间那个红的是读写指示,当进行FLASH 或EEPROM 读写操作时会闪烁,读写越快,闪的越快。

最下面的那个是电源指示灯了。

因为以前直接给板子上5V 电源时,很多笔记本电脑都不识别,所以这次加了个LDO ,给板子上的3.3V 电源,所以MEGA8是跑在3.3V 电压下的,而目标板通常是5V ,于是加了片244作为隔离。

板子做好后在以前不能识别USBASP 的电脑上都试了一遍,结果是那些电脑都认USBASP 了,哈哈。

编程器也能向目标板供电,并且是3.3V 和5V 可选,供电线上还加了1N5819,防止目标板自供电时向USB 口回灌电流。