打印

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

[复制链接]
4126|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 | 只看该作者

dd

使用特权

评论回复
板凳
lixun00|  楼主 | 2007-8-21 16:00 | 只看该作者

2

使用特权

评论回复
地板
lixun00|  楼主 | 2007-8-21 16:05 | 只看该作者

3

使用特权

评论回复
5
lixun00|  楼主 | 2007-8-21 16:06 | 只看该作者

4

使用特权

评论回复
6
lixun00|  楼主 | 2007-8-21 16:07 | 只看该作者

5

使用特权

评论回复
7
lixun00|  楼主 | 2007-8-21 16:14 | 只看该作者

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

使用特权

评论回复
8
lixun00|  楼主 | 2007-8-21 16:18 | 只看该作者

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

出现这种情况是因为在ida目录中的cfg文件下avr.cfg文件关于atmega16的有关器件容量配置信息没写,结果默认为8kB,添加所选部分就ok了

使用特权

评论回复
9
lixun00|  楼主 | 2007-8-21 16:27 | 只看该作者

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

使用特权

评论回复
10
lixun00|  楼主 | 2007-8-21 16:29 | 只看该作者

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

使用特权

评论回复
11
lixun00|  楼主 | 2007-8-21 16:37 | 只看该作者

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

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

使用特权

评论回复
12
gyt| | 2007-8-21 16:39 | 只看该作者

厉害厉害!!!

先收下了。

多谢多谢!!!

使用特权

评论回复
13
lixun00|  楼主 | 2007-8-21 16:53 | 只看该作者

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

溢出中(jtag的)加上检测代码,如下图所示:

使用特权

评论回复
14
lixun00|  楼主 | 2007-8-21 16:55 | 只看该作者

10

使用特权

评论回复
15
lixun00|  楼主 | 2007-8-21 16:58 | 只看该作者

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

起始代码应该为0x1700(word).好以下讲述isp的移植部分

使用特权

评论回复
16
lixun00|  楼主 | 2007-8-21 17:02 | 只看该作者

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

其代码大于bootload-0x1700,这就要对其进行优化。当然,优化规优化,必要的管教定义也是要修改的,这里虫子就不多说了,看下俺的附件就清楚了。

使用特权

评论回复
17
lixun00|  楼主 | 2007-8-21 17:06 | 只看该作者

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

(为了简单,原ISP里利用的定时中断虫子直接用延时代替了)
1。状态机用字节
2。用if替换switch
3。其它杂项就不说了。
还有一点,当用到enum和结构时,对工程作如下配置(勾上)也能显著优化空间

使用特权

评论回复
18
lixun00|  楼主 | 2007-8-21 17:09 | 只看该作者

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

在link里加上:-Wl,--section-start=.text=0x2e00

使用特权

评论回复
19
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

使用特权

评论回复
20
gyt| | 2007-8-22 10:00 | 只看该作者

居然没人顶?

我再来顶一顶!

使用特权

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

本版积分规则

56

主题

683

帖子

3

粉丝