原创:一步步教你如何用单芯片m16制作串口jtag和ISP...

[复制链接]
5443|22
 楼主| lixun00 发表于 2007-8-21 15:56 | 显示全部楼层 |阅读模式
思路:原谅虫子买个关子,当看了就知道了
1.软材料
IDA5.0。下载地址:http://bbs.pediy.com/showthread.php?s=&threadid=29335
jtag最新固件,见附件
hexbin,见附件,(语法:hexbin filename.hex [filename.bin] )
stk500_M8源程序。(附件中有我移植好的减少代码的m16源程序)
2.硬材料,见附件电路图
好了,准备好了,开始做菜了:)
1)用ida打开固件,如下图:

相关链接:https://bbs.21ic.com/upfiles/img/20078/2007821155553293.rar
 楼主| lixun00 发表于 2007-8-21 15:58 | 显示全部楼层
 楼主| lixun00 发表于 2007-8-21 16:00 | 显示全部楼层
 楼主| lixun00 发表于 2007-8-21 16:05 | 显示全部楼层
 楼主| lixun00 发表于 2007-8-21 16:06 | 显示全部楼层
 楼主| lixun00 发表于 2007-8-21 16:07 | 显示全部楼层
 楼主| lixun00 发表于 2007-8-21 16:14 | 显示全部楼层

到这步时用hexbin把hex转为bin文件,出现如下提示

 楼主| lixun00 发表于 2007-8-21 16:18 | 显示全部楼层

到这里,出现了死胡同。经过简单研究,发现。。。

出现这种情况是因为在ida目录中的cfg文件下avr.cfg文件关于atmega16的有关器件容量配置信息没写,结果默认为8kB,添加所选部分就ok了
 楼主| lixun00 发表于 2007-8-21 16:27 | 显示全部楼层

保存好文件,最后重新打开

 楼主| lixun00 发表于 2007-8-21 16:29 | 显示全部楼层

以上是虫子加的一些注释,明显的为iar编译的文件

 楼主| lixun00 发表于 2007-8-21 16:37 | 显示全部楼层

到这里,说下自动jtag 和ISP自动切换的原理。。。

avr的jtag和IsP接口有明显的区别,虫子就是利用这点自动切换的。结果用了两个接口,如果要实现单接口自动切换恐怕要用外接电源和PLD作逻辑切换。当接到Jtag口时和isp口时PD2口的电平会发生变化,具体来讲就是jtag为高电平,Isp时为低电平,为减少工作量,虫子在主循环中利用查询法来作。当处于ISP时当PIND2时为高电平,切换到jtag模式,反之,当处于jtag模式时查询到PIND2为低电平时切换到ISP模式
gyt 发表于 2007-8-21 16:39 | 显示全部楼层

厉害厉害!!!

先收下了。

多谢多谢!!!
 楼主| lixun00 发表于 2007-8-21 16:53 | 显示全部楼层

以下为关键部分,为了简单起见,虫子直接在定时器0。。。

溢出中(jtag的)加上检测代码,如下图所示:
 楼主| lixun00 发表于 2007-8-21 16:55 | 显示全部楼层
 楼主| lixun00 发表于 2007-8-21 16:58 | 显示全部楼层

这就完成了jtag部分,到这里应该看出isp的

起始代码应该为0x1700(word).好以下讲述isp的移植部分
 楼主| lixun00 发表于 2007-8-21 17:02 | 显示全部楼层

当前网上广为流传的m8_isp固件编译以后你会发现。。。

其代码大于bootload-0x1700,这就要对其进行优化。当然,优化规优化,必要的管教定义也是要修改的,这里虫子就不多说了,看下俺的附件就清楚了。
 楼主| lixun00 发表于 2007-8-21 17:06 | 显示全部楼层

空间优化主要有以下几方面。。。

(为了简单,原ISP里利用的定时中断虫子直接用延时代替了)
1。状态机用字节
2。用if替换switch
3。其它杂项就不说了。
还有一点,当用到enum和结构时,对工程作如下配置(勾上)也能显著优化空间
 楼主| lixun00 发表于 2007-8-21 17:09 | 显示全部楼层

最后一步就是连接选项....

在link里加上:-Wl,--section-start=.text=0x2e00
 楼主| lixun00 发表于 2007-8-21 17:15 | 显示全部楼层

做完修改后,f7,build.然后打开。。。

生成的hex文件,把其内容剪切到刚生成的jtag hex固件中就可以了。
忘了说一点了,jtag hex的生成先在ida中修改好,然后用二进制编辑文件修改原jtag固件。
这一步对各位dada来说应该不会成为难点,最后附上我修改好的固件。

相关链接:https://bbs.21ic.com/upfiles/img/20078/2007821171533339.rar
gyt 发表于 2007-8-22 10:00 | 显示全部楼层

居然没人顶?

我再来顶一顶!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

683

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部