首先,SH-Stick使用的是串口调试,这种调试方案需要一个后台程序来控制和监视用户程序(我们暂且称后台监控程序为Monitor,用户程序为Program)。
有一点很重要,Monitor和Program都是程序,大家都在ROM中,都使用同样的片上资源(而且不能同时用)。如果说有什么却别的话,那就是Monitor使用的硬件资源被人为的设定了高一些的优先
级。这个做的用处是保证Monitor能够打断Program,反过来却不行。
一般来说,Monitor应该具有完成以下件事情的能力:
1 能够和外面交换数据
2 下载Program
3 在任何时候都能从Program中进入Monitor或者从Monitor返回到Program
4 能够得到Memory的内容并发出去
5 能够将收到的内容设定到Memory中
6 能够将Register的内容存到Memory内
7 能够将Memory的内容设定到Register中
8 能够实现断点
9 能够实现单步
10 复位
现在来看SH-Stick。SH-Stick的作用是什么呢?
主要有下面一些作用:
1 控制复位时序。
这样能够将SH7125复位到BOOT模式或者用户模式。在BOOT模式下,能够烧写程序。
2 存储并自动下载Monitor。
前面提到过,Monitor也是程序,他不会无中生有,也是需要下栽到SH7125中的。要么用户下载,要么SH-Stick下载。这样,当使用SH-Stick调试新的SH7125时,SH-Stick将自动下载Monitor。
3 通讯转化。
PC的USB通过CP2102转换成UART,在通过R8C/1B转换成SPI。大家知道,一般来说SPI的速度比UART要快。就SH-Stick来说,受PC软件的限制,HEW里只能选择到115200bps。但是R8C/1B和SH7125之间
的SPI使用的是2Mbps。而且,SPI能够有效地避免UART关于波特率匹配的问题(比如用户修改外围时钟)。
4 命令解析。
说得通俗一点就是复杂的命令拆成几个简单的。之所以使用简单命令,是为了减少Montior对ROM和RAM的占用。同时能够缩短Monitor的处理时间,增加实时性。
比如运行到光标这个命令,就需要完成以下几步:
a) 将现有的断点保存在R8C/1B中
b) 去掉SH7125上的所有断点
c) 在光标处设定一个断点
d) 运行
e) 等待停止
f) 去掉光标处的断点
g) 将R8C/1B内的断点写回SH7125
5 文件打包。
下载的时候需要将数据缓存,并且重新打包。可参考SH7125的手册中Flash那章。