再上一篇:6.2 Angel 和 ADS
上一篇:6.2.2 Angel 系统的结构
主页
下一篇:6.3 ADS 开发环境
再下一篇:6.4.2 在 ARM 平台上使用 IPP 开发应用
文章列表

6.2.3 Angel 的通信结构

嵌入式系统(修订本)——Intel XScale 结构与开发 陈章龙 著

一、Angel 的通讯结构组成
下图为目标机中Angel 的通讯结构示意图:

Angel

用户应用程序

ADP

BOOT

TDCC

CLIB

可靠通讯和缓冲区管理

设备驱动(带检错功能)

用户设备驱动

通讯设备

图6-9 Angel 的通讯结构示意图

上图描述了这个结构的各个组成部分如何组成一起,Debug 信息如何传输。 通道层包括:

1)ADP:Angel Debug Protocol 通道,这是由host ADP 通道和 target ADP 通道。

2)BOOT:引导通道

3)TDCC:Thumb 调试通讯通道

4)CLIB:C 库支持

作为目标机的最高级,Angel 与主机通讯,用户应用程序使用半主机支持。所有Debug 调试的通讯(ADP、BOOT、TDCC、CLIB)都需要主机和目标之间的可靠通道。可靠的通 讯和缓冲区管理层负责提供可靠性、重新传输、多路复用/解复用,该层处理缓冲区管理, 因为可靠性有错误发生后,需要重新传输。设备驱动层发现和拒绝坏的数据包,但不提供可 靠性。
二、Angel 通讯协议 Angel Debug ProtocolADP)介绍

1. 简介

Angel Debug Protocol( ADP)的设计是为了在目标机和主机之间进行调试而提供可靠
连接。该协议使主机非常灵活的访问目标机提供了可靠的保证。但是,目标机的连接访问受 到两个条件的制约:目标机被主机视为无定时器以及目标机中的软件大小有限。
该协议不具有选择路由的功能,协议中的数据链路层实现的是一个点对点的连接。
ADP协议 是典型的client/server模式,采用请求-应答方式完成远程程序调用。连接双 方都可以是client或server,在通道层协议中可以识别。 最底层实现通道层请求包的发送、 丢失数据包的恢复、以及串行/并行连接。

Angel 通信的基本单元是一个数据包,Angel 接受的每个数据包都要经过三层协议,数 据提供层,通道层和设备层。数据提供层是一个应用层协议,通道层是传输层,设备层是数 据链路层。

2. 数据提供层

数据提供层的协议可以使用两种不同的服务,使用不同的请求/应答格式遵循通用基础
的规范。

z 使用ADP 的Angel Debug 代理

z 使用C 库支持协议的Angel C 半主机支持码 哪种协议的使用根据通道号的不同,同样,FTP 和Telnet 连接可以同时通过一个TCP/IP

连接同时建立,别的代理(比如,Debug 代理)可以在同一个通道层连接使用不同的数据提 供层协议。
对于ADP 协议和C 库支持协议,数据包格式都是有相同的结构,只是在相同的原因代 码有微小的不同。数据包的格式是:

z 原因码

z 主机debug 信息

z 目标OS 判断进程 z 数据码 数据提供层的运行码是由相关的成分协议决定(ADP、Boot、Clib)。通道号在通道协

议中指明。原因码用来显示信息是从主机到目标机的信息还是从目标机到主机的信息,

3. 通道层

1) 通道层介绍

通道层协议负责把数据包从一个通信媒体到另一端通过序号的通道。通道在概念上等同 于TCP/IP 的端口,一个ADP 通道是双向的。
这层之上的接口是基于数据包,对层的调用表示一个数据包的传输,保证是按次序的和 完好无损的,只有当特别的要求保证的话,才会做到这一点。
这层之下的接口是通信媒体,如串行线,无需额外的寻址信息把数据包传到目的方。通 道层认为所有的通信都是点对点。传输媒体按照传送次序传输数据内容,尽管该层协议有能 力对数据包进行重新排序,但它效率还是低的。

2) 引导支持

如果有两个调试设备(如:串口、串口/并口),Angel 能够在任何设备上接收信息,保 证通过通道层的进一步信息将被发送到当前设备。当Angel 发现一个reboot 或reset 信息, 它监听别的通道,使用设备接收信息,所有调试通道将转到最新选择的调试设备中。
在调试过程中,每个通道都连接到同一设备中,初始化时,Angel 监听所有设备等待一 个即将到来的引导数据包,当接收到之后,相应的设备被挑选准备进一步的 Angel 使用, Angel 通过一个调试对话等待一个重新复位的信息,以便对主机端的问题做出反应或者重新 启动。
为了支持,通道层提供了一个函数来通过所有的Angel 设备注册一个可读回叫信号,以 及一个函数,来设置缺省的设备完成所有其它通道运作。

3) 通道层和缓冲区管理

通道层的功能是负责把各种 Angel 通道复用到单一设备中,提供这些通道上的可靠运 输,通道层也负责管理缓冲区池,它用来支持通道上的传输和接收,原始设备I/O 不使用缓
冲区。虽然,有多个独立的通道可以使用,通道层在同一时刻只支持唯一的传输。通道限制 是为了简化通道层的设计和保证运行在每个通道上的协议避免死锁。必须加上下列的限制。

4) 缓冲区管理 重新发送的管理通道层必须保存已经发送出去的信息直到它们被应答,通道层提供缓冲

区给发送信息的通道用户,直到被应答。可用缓冲区的数量受到内存的限制,缓冲区包含一 个头字节量足够容纳通道号和次序 ID,用来通道层的使用。通道号字节量中任何空闲字符 作为符号位,作为以后使用。

5) 长缓冲区

大多数消息和应答都比较短(不超过40 字节),但一些可以达到256 字节长,但是有些 场合下长缓冲区比较有用,例如,如果主机下载程序或配置程序到目标上,一个大一点的缓 冲区将减少由通道和设备头产生的系统开销,由应答包以及行转变时间需要重发应答信号, 由于这个原因,一个长缓存器对于目标内存的写入,用来程序的下载。

6) RAM 的使用

RAM 的使用是受到一定限制的,最容易的解决办法是使所有的缓存器变大,有一种机 制允许单个缓存器被共享,因为Angel 的RAM 不是无限的资源。

当设备驱动读一个数据包的足够数据来决定接收数据包的大小,它执行一个回叫程序要 求一个合适的缓存器。如果一个小缓存器足够的话,就提供一个小缓存器,如果需要一个大 缓存器,但不能用,数据包将被视为坏数据包,导致一个重发请求。

7) 缓存器生命周期 发送数据时,通道的使用者外在地在要求一个写操作之前,在下列情况下将释放缓存器: z 把缓存器传送到一个通道传送函数在可靠数据传输情况下,在这种场合下,通道码 将释放缓存器。

z 在不可靠数据传输过程中用释放函数释放它。

8) Heartbeat 机制

Heartbeat 必须和可靠数据包传输一起工作。Remote_a heartbeat 软件用heartbeat 速率写 数据包,用heartbeat 数据包来保证,它期望数据包返回使用数据包timeout 速率,如果非法, 发送一个timeout 错误。

4. 设备驱动层

Angel 支持轮流查询和异步中断驱动设备,以及在异步模式下启动,在查询数据包结束

的设备。在设备层的边界,接口提供异步Angel 读取接口,以及应用程序的同步接口。

1) 支持所有设备的回叫程序

这主要是通道层的问题,但是因为 boot 通道监听所有的 Angel 兼容设备,通道层必须 决定多少设备监听启动信息,以及那些设备。为了静态的提供这些功能,设备层输出合适的 设备表以及表的大小。

2) 传输队列

因为核心操作模式是异步的,多个进程使用一个设备。Angel 除了第一个请求外,其余
都拒绝,返回一个busy 的错误指令,让用户(通道和用户程序)以后再试。

3) Angel 中断句柄

Angel 在连接的时候静态地安装Angel 中断句柄,Angel 中断句柄在IRQ 或FIQ 中使用, 推荐使用IRQ,Angel 的中断在devconf.h 中定义。

4) 控制调用

Angel 的设备驱动提供了控制入点支持打开/关闭传输/接收命令,以便 Angel 在关键地 方控制应用程序设备。