第二章 仿真器的架构

        上一章节中,我们了解了仿真器的工作原理,仿真器的工作其实就是一个命令和数据的交换过程,这个过程用到了USB总线协议和串口通信协议。

        在这一章节中,小编继续讲解仿真器的整体架构,小编在阅读了2011年发表在知网上的文章“Design of On-Chip CSoS Debugger Based on JTAG Interface”和翻阅了S8051芯片的设计文档,从这两者了解到仿真器的基本设计框架。

        仿真器的运行离不开动态链接库dll,该库的实现原理其实在Keil的官方网站上已经发布,在官网上这个库的名称叫做“SampTarg.dll”。该库的主要功能是实现Keil提供的一些AGDI接口和USB驱动协议代码,以供用户可以与Keil IDE进行数据共享以及与仿真器进行数据和命令的交换;其次,仿真器的运行也离不开驱动程序,驱动程序意思是提前编写好底层代码,该底层代码包含了USB协议、JTAG协议/SWE协议以及连接dll和被调试单片机的模块;最后,就是仿真器的电路板设计了,其实电路的原理设计在网上可以看到很多相关资料。

        如图所示,小编将仿真器大概的架构图画了出来,下面小编来讲一下我画的是什么。整体架构包含了两大部分,一个是软件层,另外一个是硬件层,软件层就是动态链接库dll,硬件层就是驱动程序和被调试的单片机。

        软件层可以通过Keil的IDE,执行单步、多步、设置断点,从PC窗口观察被调试的单片机芯片的寄存器、存储器数据变化等调试。软件层的dll主要包含了AGDI模块、USB驱动(协议),AGDI接口是Keil IDE提供的,当我们在Keil的官网下载库工程SampTarg时,打开该工程里面就会包含了一个AGDI.cpp的文件,这个文件里面有很多个接口函数,例如:

U32 _EXPO_ AG_Init (U16 nCode, void *vp) 

    这个接口会在你点击Keil界面上的下载“

”或者进入调试“”时候触发,当然,我们不知道Keil IDE是怎么触发这个接口的,这个等小编再去研究研究,后面会单独写一篇文章来介绍Keil IDE。

UL32 ReadIdata (BYTE *pB, DWORD nAdr, DWORD nMany)

    上面这个接口也是Keil IDE提供给我们进行读取芯片IRAM区域的数据(具体什么是IRAM、XRAM等等可以查看S8051芯片的设计文档,在小编的公众号也有一个专题在专门讲解这个内容,你们自己翻一下呗,或者发送消息“S8051内存”就可以获取相关信息)。该接口函数主要功能是读取被调试的单片机运行到当前时刻的内存数据。
    

    硬件层是由主控编程(e.g.:STM32F407)实现的调试器,它可以输出JTAG波形,来调试单片机芯片。硬件层的驱动程序包含了USB协议、JTAG/SWE协议。该层主要通过监听USB总线,待接收到命令后再按照对应的命令情况进行相应的操作。

    总结:仿真器随着调试对象所采用CPU种类的区别而不同,但是基本结构大都分为三部分:第一部分为调试主机,这一部分基于PC端调试软件,在调试软件中集成了高级调试代理以及调试的用户接口,且不同的CPU对应不同的编译器;第二部分是仿真器,实际作用就是协议转换器,它将PC端到仿真器的信号转换成目标CPU(被调试的单片机)的调试接口;第三部分是调试目标系统(被调试的单片机),这部分决定了仿真器所才采用的调试技术(也就是采用什么协议,e.g.:JTAG/SWE),包括调试接口和调试逻辑。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三贝勒文子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值