Microsoft Word - ARM JTAG 调试原理

Size: px
Start display at page:

Download "Microsoft Word - ARM JTAG 调试原理"

Transcription

1 ARM JTAG 调试原理 OPEN-JTAG 开发小组 1 前言这篇文章主要介绍 ARM JTAG 调试的基本原理 基本的内容包括了 TAP (TEST ACCESS PORT) 和 BOUNDARY-SCAN ARCHITECTURE 的介绍, 在此基础上, 结合 ARM7TDMI 详细介绍了的 JTAG 调试原理 这篇文章主要是总结了前段时间的一些心得体会, 希望对想了解 ARM JTAG 调试的网友们有所帮助 我个人对 ARM JTAG 的理解还不是很透彻, 在文章中, 难免会有偏失和不准确的地方, 希望精通 JTAG 调试原理的大侠们不要拍砖, 有什么问题提出来, 我一定尽力纠正 同时也欢迎对 ARM JTAG 调试感兴趣的朋友们一起交流学习 2 IEEE Standard Test Access Port and Boundary-Scan Architecture 既然是介绍 JTAG 调试, 还是让我们从 IEEE 的 JTAG 调试标准开始吧 JTAG 是 JOINT TEST ACTION GROUP 的简称 IEEE 标准就是由 JTAG 这个组织最初提出的, 最终由 IEEE 批准并且标准化的 所以, 这个 IEEE 这个标准一般也俗称 JTAG 调试标准 接下来的这一部分, 主要简单的介绍了 TAP (TEST ACCESS PORT) 和 BOUNDARY-SCAN ARCHITECTURE 的基本构架 虽然不是很全面, 但对了解 JTAG 的基本原理来说, 应该是差不离了 如果希望更全面深入的了解 JTAG 的工作原理, 可以参考 IEEE 标准 2-1 边界扫描在 JTAG 调试当中, 边界扫描 (Boundary-Scan) 是一个很重要的概念 边界扫描技术的基本思想是在靠近芯片的输入输出管脚上增加一个移位寄存器单元 因为这些移位寄存器单元都分布在芯片的边界上 ( 周围 ), 所以被称为边界扫描寄存器 (Boundary-Scan Register Cell) 当芯片处于调试状态的时候, 这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来 通过这些边界扫描寄存器单元, 可以实现对芯片输入输出信号的观察和控制 对于芯片的输入管脚, 可以通过与之相连的边界扫描寄存器单元把信号 ( 数据 ) 加载倒该管脚中去 ; 对于芯片的输出管脚, 也可以通过与之相连的边界扫描寄存器 捕获 (CAPTURE) 该管脚上的输出信号 在正常的运行状态下, 这些边界扫描寄存器对芯片来说是透明的, 所以正常的运行不会受到任何影响 这样, 边界扫描寄存器提供了一个便捷的方式用以观测和控制所需要调试的芯片 另外, 芯片输入输出管脚上的边界扫描 ( 移位 ) 寄存器单元可以相互连接起来, 在芯片的周围形成一个边界扫描链 (Boundary-Scan Chain) 一般的芯片都会提供几条独立的边界扫描链, 用来实现完整的测试功能 边界扫描链可以串行的输入和输出, 通过相应的时钟信号和控制信号, 就可以方便的观察和控制处在调试状态下的芯片 利用边界扫描链可以实现对芯片的输入输出进行观察和控制 下一个问题是 : 如何来管理和使用这些边界扫描链? 对边界扫描链的控制主要是通过 TAP (Test Access Port)Controller 来完成的 在下一个小节, 我们一起来看看 TAP 是如何工作的 2-2 TAP (TEST ACCESS PORT) 在上一节, 我们已经简单介绍了边界扫描链, 而且也了解了一般的芯片都会提供几条边界扫描链, 用来实现完整的测试功能 下面, 我将逐步介绍如何实现扫描链的控制和访问 1

2 在 IEEE 标准里面, 寄存器被分为两大类 : 数据寄存器 (DR-Data Register) 和指令寄存器 (IR-Instruction Register) 边界扫描链属于数据寄存器中很重要的一种 边界扫描链用来实现对芯片的输入输出的观察和控制 而指令寄存器用来实现对数据寄存器的控制, 例如 : 在芯片提供的所有边界扫描链中, 选择一条指定的边界扫描链作为当前的目标扫描链, 并作为访问对象 下面, 让我们从 TAP(Test Access Port) 开始 TAP 是一个通用的端口, 通过 TAP 可以访问芯片提供的所有数据寄存器 (DR) 和指令寄存器 (IR) 对整个 TAP 的控制是通过 TAP Controller 来完成的 TAP 总共包括 5 个信号接口 TCK TMS TDI TDO 和 TRST : 其中 4 个是输入信号接口和另外 1 个是输出信号接口 一般, 我们见到的开发板上都有一个 JTAG 接口, 该 JTAG 接口的主要信号接口就是这 5 个 下面, 我先分别介绍这个 5 个接口信号及其作用 Test Clock Input (TCK) TCK 为 TAP 的操作提供了一个独立的 基本的时钟信号,TAP 的所有操作都是通过这个时钟信号来驱动的 TCK 在 IEEE 标准里是强制要求的 Test Mode Selection Input (TMS) TMS 信号用来控制 TAP 状态机的转换 通过 TMS 信号, 可以控制 TAP 在不同的状态间相互转换 TMS 信号在 TCK 的上升沿有效 TMS 在 IEEE 标准里是强制要求的 Test Data Input (TDI) TDI 是数据输入的接口 所有要输入到特定寄存器的数据都是通过 TDI 接口一位一位串行输入的 ( 由 TCK 驱动 ) TDI 在 IEEE 标准里是强制要求的 Test Data Output (TDO) TDO 是数据输出的接口 所有要从特定的寄存器中输出的数据都是通过 TDO 接口一位一位串行输出的 ( 由 TCK 驱动 ) TDO 在 IEEE 标准里是强制要求的 Test Reset Input (TRST) TRST 可以用来对 TAP Controller 进行复位 ( 初始化 ) 不过这个信号接口在 IEEE 标准里是可选的, 并不是强制要求的 因为通过 TMS 也可以对 TAP Controller 进行复位 ( 初始化 ) 事实上, 通过 TAP 接口, 对数据寄存器 (DR) 进行访问的一般过程是 : 通过指令寄存器 (IR), 选定一个需要访问的数据寄存器 ; 把选定的数据寄存器连接到 TDI 和 TDO 之间 ; 由 TCK 驱动, 通过 TDI, 把需要的数据输入到选定的数据寄存器当中去 ; 同时把选定的数据寄存器中的数据通过 TDO 读出来 接下来, 让我们一起来了解一下 TAP 的状态机 TAP 的状态机如图 1 所示, 总共有 16 个状态 在图中, 每个六边形表示一个状态, 六边形中标有该状态的名称和标识代码 图中的箭头表示了 TAP Controller 内部所有可能的状态转换流程 状态的转换是由 TMS 控制的, 所以在每个箭头上有标有 tms = 0 或者 tms = 1 在 TCK 的驱动下, 从当前状态到下一个状态的转换是由 TMS 信号决定 假设 TAP Controller 的当前状态为 Select-DR-Scan, 在 TCK 的驱动下, 如果 TMS = 0,TAP Controller 进入 Capture-DR 状态 ; 如果 TMS = 1,TAP Controller 进入 Select-IR-Scan 状态 2

3 图 1. TAP Controller State Transitions 这个状态机看似很复杂, 其实理解以后会发现这个状态机其实很直接 很简单 观察图 1, 我们可以发现, 除了 Test-Logic Reset 和 Test-Run/Idle 状态外, 其他的状态有些类似 例如 Select-DR-Scan 和 Select-IR-Scan 对应,Capture-DR 和 Capture-IR 对应,Shift-DR 和 Shift-IR 对应, 等等 在这些对应的状态中,DR 表示 Data Register,IR 表示 Instruction Register 记得我们前面说过吗, 寄存器分为两大类, 数据寄存器和指令寄存器 其实标识有 DR 的这些状态是用来访问数据寄存器的, 而标识有 IR 的这些状态是用来访问指令寄存器的 在详细描述整个状态机中的每一个状态之前, 首先让我们来想一想 : 要通过边界扫描链来观察和控制芯片的输入和输出, 需要做些什么? 如果需要捕获芯片某个管脚上的输出, 首先需要把该管脚上的输出装载到边界扫描链的寄存器单元里去, 然后通过 TDO 输出, 这样我们就可以从 TDO 上得到相应管脚上的输出信号 如果要在芯片的某个管脚上加载一个特定的信号, 则首先需要通过 TDI 把期望的信号移位到与相应管脚相连的边界扫描链的寄存器单元里去, 然后把该寄存器单元的值加载到相应的芯片管脚 下面, 让我们一起来看看每个状态具体表示什么意思? 完成什么功能? Test-Logic Reset 系统上电后,TAP Controller 自动进入该状态 在该状态下, 测试部分的逻辑电路全部被 3

4 禁用, 以保证芯片核心逻辑电路的正常工作 通过 TRST 信号也可以对测试逻辑电路进行复位, 使得 TAP Controller 进入 Test-Logic Reset 状态 前面我们说过 TRST 是可选的一个信号接口, 这是因为在 TMS 上连续加 5 个 TCK 脉冲宽度的 1 信号也可以对测试逻辑电路进行复位, 使得 TAP Controller 进入 Test-Logic Reset 状态 所以, 在不提供 TRST 信号的情况下, 也不会产生影响 在该状态下, 如果 TMS 一直保持为 1,TAP Controller 将保持在 Test-Logic Reset 状态下 ; 如果 TMS 由 1 变为 0 ( 在 TCK 的上升沿触发 ), 将使 TAP Controller 进入 Run-Test/Idle 状态 Run-Test/Idle 这个是 TAP Controller 在不同操作间的一个中间状态 这个状态下的动作取决于当前指令寄存器中的指令 有些指令会在该状态下执行一定的操作, 而有些指令在该状态下不需要执行任何操作 在该状态下, 如果 TMS 一直保持为 0,TAP Controller 将一直保持在 Run-Test/Idle 状态下 ; 如果 TMS 由 0 变为 1 ( 在 TCK 的上升沿触发 ), 将使 TAP Controller 进入 Select-DR-Scan 状态 Select-DR-Scan 这是一个临时的中间状态 如果 TMS 为 0 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Capture-DR 状态, 后续的系列动作都将以数据寄存器作为操作对象 ; 如果 TMS 为 1 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Select-IR-Scan 状态 Capture-DR 当 TAP Controller 在这个状态中, 在 TCK 的上升沿, 芯片输出管脚上的信号将被 捕获 到与之对应的数据寄存器的各个单元中去 如果 TMS 为 0 ( 在 TCK 的上升沿触发 ), TAP Controller 进入 Shift-DR 状态 ; 如果 TMS 为 1 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Exit1-DR 状态 Shift-DR 在这个状态中, 由 TCK 驱动, 每一个时钟周期, 被连接在 TDI 和 TDO 之间的数据寄存器将从 TDI 接收一位数据, 同时通过 TDO 输出一位数据 如果 TMS 为 0 ( 在 TCK 的上升沿触发 ),TAP Controller 保持在 Shift-DR 状态 ; 如果 TMS 为 1 ( 在 TCK 的上升沿触发 ),TAP Controller 进入到 Exit1-DR 状态 假设当前的数据寄存器的长度为 4 如果 TMS 保持为 0, 那在 4 个 TCK 时钟周期后, 该数据寄存器中原来的 4 位数据 ( 一般是在 Capture-DR 状态中捕获的数据 ) 将从 TDO 输出来 ; 同时该数据寄存器中的每个寄存器单元中将分别获得从 TDI 输入的 4 位新数据 Update-DR 在 Update-DR 状态下, 由 TCK 上升沿驱动, 数据寄存器当中的数据将被加载到相应的芯片管脚上去, 用以驱动芯片 在该状态下, 如果 TMS 为 0,TAP Controller 将回到 Run-Test/Idle 状态 ; 如果 TMS 为 1,TAP Controller 将进入 Select-DR-Scan 状态 Select-IR-Scan 这是一个临时的中间状态 如果 TMS 为 0 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Capture-IR 状态, 后续的系列动作都将以指令寄存器作为操作对象 ; 如果 TMS 为 1 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Test-Logic Reset 状态 Capture-IR 当 TAP Controller 在这个状态中, 在 TCK 的上升沿, 一个特定的逻辑序列将被装载到指令寄存器中去 如果 TMS 为 0 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Shift-IR 状态 ; 如果 TMS 为 1 ( 在 TCK 的上升沿触发 ),TAP Controller 进入 Exit1-IR 状态 Shift-IR 在这个状态中, 由 TCK 驱动, 每一个时钟周期, 被连接在 TDI 和 TDO 之间的指令寄存 4

5 器将从 TDI 接收一位数据, 同时通过 TDO 输出一位数据 如果 TMS 为 0 ( 在 TCK 的上升沿触发 ),TAP Controller 保持在 Shift-IR 状态 ; 如果 TMS 为 1 ( 在 TCK 的上升沿触发 ),TAP Controller 进入到 Exit1-IR 状态 假设指令寄存器的长度为 4 如果 TMS 保持为 0, 那在 4 个 TCK 时钟周期后, 指令寄存器中原来的 4bit 长的特定逻辑序列 ( 在 Capture-IR 状态中捕获的特定逻辑序列 ) 将从 TDO 输出来, 该特定的逻辑序列可以用来判断操作是否正确 ; 同时指令寄存器将获得从 TDI 输入的一个 4bit 长的新指令 Update-IR 在这个状态中, 在 Shift-IR 状态下输入的新指令将被用来更新指令寄存器 说了那么多, 下面, 让我们先看看指令寄存器和数据寄存器访问的一般过程, 以便建立一个直观的概念 1. 系统上电,TAP Controller 进入 Test-Logic Reset 状态, 然后依次进入 :Run-Test/Idle Select-DR-Scan Select-IR-Scan Capture-IR Shift-IR Exit1-IR Update-IR, 最后回到 Run-Test/Idle 状态 在 Capture-IR 状态中, 一个特定的逻辑序列被加载到指令寄存器当中 ; 然后进入到 Shift-IR 状态 在 Shift-IR 状态下, 通过 TCK 的驱动, 可以将一条特定的指令送到指令寄存器当中去 每条指令都将确定一条相关的数据寄存器 然后从 Shift-IR Exit1-IR Update-IR 在 Update-IR 状态, 刚才输入到指令寄存器中的指令将用来更新指令寄存器 最后, 进入到 Run-Test/Idle 状态, 指令生效, 完成对指令寄存器的访问 2. 当前可以访问的数据寄存器由指令寄存器中的当前指令决定 要访问由刚才的指令选定的数据寄存器, 需要以 Run-Test/Idle 为起点, 依次进入 Select-DR-Scan Capture-DR Shift-DR Exit1-DR Update-DR, 最后回到 Run-Test/Idle 状态 在这个过程当中, 被当前指令选定的数据寄存器会被连接在 TDI 和 TDO 之间 通过 TDI 和 TDO, 就可以将新的数据加载到数据寄存器当中去, 同时, 也可以捕获数据寄存器中的数据 具体过程如下 在 Capture-DR 状态中, 由 TCK 的驱动, 芯片管脚上的输出信号会被 捕获 到相应的边界扫描寄存器单元中去 这样, 当前的数据寄存器当中就记录了芯片相应管脚上的输出信号 接下来从 Capture-DR 进入到 Shift-DR 状态中去 在 Shift-DR 状态中, 由 TCK 驱动, 在每一个时钟周期内, 一位新的数据可以通过 TDI 串行输入到数据寄存器当中去, 同时, 数据寄存器可以通过 TDO 串行输出一位先前捕获的数据 在经过与数据寄存器长度相同的时钟周期后, 就可以完成新信号的输入和捕获数据的输出 接下来通过 Exit1-DR 状态进入到 Update-DR 状态 在 Update-DR 状态中, 数据寄存器中的新数据被加载到与数据寄存器的每个寄存器单元相连的芯片管脚上去 最后, 回到 Run-Test/Idle 状态, 完成对数据寄存器的访问 上面描述的就是通过 TAP 对数据寄存器进行访问的一般流程 会不会还是觉得很抽象? 让我们来看一个更直观的例子 现在假设,TAP Controller 现在处在 Run-Test/Idle 状态, 指令寄存器当中已经成功的写入了一条新的指令, 该指令选定的是一条长度为 6 的边界扫描链 下面让我们来看看实际如何来访问这条边界扫描链 图 2 所示的是测试芯片及其被当前指令选定的长度为 6 的边界扫描链 由图 2 可以看出, 当前选择的边界扫描链由 6 个边界扫描移位寄存器单元组成, 并且被连接在 TDI 和 TDO 之间 TCK 时钟信号与每个边界扫描移位寄存器单元相连 每个时钟周期可以驱动边界扫描链的数据由 TDI 到 TDO 的方向移动一位, 这样, 新的数据可以通过 TDI 输入一位, 边界扫描链的数据可以通过 TDO 输出一位 经过 6 个时钟周期, 就可以完全更新边界扫描链里的数据, 而且可以将边界扫描链里捕获的 6 位数据通过 5

6 TDO 全部移出来 图 2. 测试芯片及其当前选定的边界扫描链 图 3 表示了边界扫描链的访问过程 图 3.1 表示了芯片和边界扫描链的初始化状态, 在测试状态下, 芯片的外部输入和输出被隔离开了, 芯片的输入和输出可以通过相应的边界扫描链来观察和控制 在图 3.1 中, 扫描链里的每个移位寄存器单元的数据是不确定的, 所以在图中用 X 表示, 整个扫描链里的数据序列是 XXXXXX 要从 TDI 输入到测试芯片上的数据序列是 : 同时要从 TDO 得到芯片相应管脚上的状态 现在 TAP Controller 从 Run-Test/Idle 状态经过 Select-DR-Scan 状态进入到 Capture-DR 状态, 在 Capture-DR 状态当中, 在一个 TCK 时钟的驱动下, 芯片管脚上的信号状态全部被捕获到相应的边界扫描移位寄存器单元当中去, 如图 3.2 所示 从图 3.2 中我们可以看出, 在进入 Capture-DR 状态后, 经过一个 TCK 时钟周期, 现在扫描链中的数据序列变成了 : 在数据捕获完成以后, 从 Capture-DR 状态进入到 Shift-DR 状态 在 Shift-DR 状态中, 我们将通过 6 个 TCK 时钟周期来把新的数据序列 (101010) 通过 TDI 输入到边界扫描链当中去 ; 同时, 将边界扫描链中捕获的数据序列 (111000) 通过 TDO 输出来 在进入到 Shift-DR 状态后, 每经过一个 TCK 时钟驱动, 边界扫描链从 TDO 输出一位数据 ; 同时, 从 TDI 接收一位新的数据 图 3.3 所示的是在 Shift-DR 状态下,1 个 TCK 时钟周期后的扫描链的变化 图 3.4 所示的是在 Shift-DR 状态下,2 个 TCK 时钟周期后的扫描链的变化 此时, 扫描链已经从 TDI 串行得到了两位新数据, 从 TDO 也串行输出了两位数据 在 TCK 时钟的驱动下, 这个过程一直继续下去 图 3.5 所示的是在经过 6 个 TCK 时钟周期以后扫描链的情况 从图 3.5 中我们可以看到 : 边界扫描链当中已经包含了新的数据序列 : 在 TDO 端, 经过 6 个 TCK 时钟驱动以后, 也接收到了在 Capture-DR 状态下捕获到的数据序列 : 到目前为止, 虽然扫描链当中包含了新的数据序列 : , 但测试芯片的管脚上的状态还是保持为 : 下一步, 需要更新测试芯片相应管脚上的信号状态 要实现更新,TAP Controller 从 Shift-DR 状态, 经过 Exit1-DR 状态, 进入到 Update-DR 状态 在 Update-DR 状态中, 经过一个周期的 TCK 时钟驱动, 边界扫描链中的新数据序列将被加载到测试芯片的相应管脚上去, 如图 3.6 所示 从图 3.6 可以看出, 测试芯片的状态已经被更新, 相应管脚上的状态序列已经从 变为 最后从 Update-DR 状态回到 Run-Test/Idle 状态, 完成对选定的边界扫描链的访问 6

7 (1) 初始化状态 (2)CAPTURE-DR (3)SHIFT-DR + 1 TCK 7

8 (4)SHIFT-DR + 2 TCK (5)SHIFT-DR + 6 TCK (6)UPDATE-DR 图 3. 边界扫描链的访问过程 8

9 在看完上面这个例子以后, 对 TAP Controller 的状态机应该大概了解了吧? 对如何访问边界扫描链应该也有个直观的概念了吧? 虽然上面的这个例子只是说明了如何访问边界扫描链, 对其它的数据寄存器 指令寄存器的访问过程也是类似的 要实现对指令寄存器的访问, 不同的是 TAP Controller 必须经过不同的状态序列 :Run-Test/Idle Select-DR-Scan Select-IR-Scan Capture-IR Shift-IR Exit1-IR Update-IR Run-Test/Idle. 2-3 指令寄存器 公共指令以及数据寄存器在 IEEE 标准当中, 规定了一些指令寄存器 公共指令和相关的一些数据寄存器 对于特定的芯片而言, 芯片厂商都一般都会在 IEEE 标准的基础上, 扩充一些私有的指令和数据寄存器, 以帮助在开发过程中进行进行方便的测试和调试 在这一部分, 我将简单介绍 IEEE 规定的一些常用的指令及其相关的寄存器 与 ARM7TDMI 相关的私有指令和寄存器将在后面的部分专门介绍 指令寄存器 : 指令寄存器允许特定的指令被装载到指令寄存器当中, 用来选择需要执行的测试, 或者选择需要访问的测试数据寄存器 每个支持 JTAG 调试的芯片必须包含一个指令寄存器 BYPASS 指令和 Bypass 寄存器 : Bypass 寄存器是一个一位的移位寄存器, 通过 BYPASS 指令, 可以将 bypass 寄存器连接到 TDI 和 TDO 之间 在不需要进行任何测试的时候, 将 bypass 寄存器连接在 TDI 和 TDO 之间, 在 TDI 和 TDO 之间提供一条长度最短的串行路径 这样允许测试数据可以快速的通过当前的芯片送到开发板上别的芯片上去 IDCODE 指令和 Device Identification 寄存器 : Device identification 寄存器中可以包括生产厂商的信息, 部件号码, 和器件的版本信息等 使用 IDCODE 指令, 就可以通过 TAP 来确定器件的这些相关信息 例如,ARM MULTI-ICE 可以自动识别当前调试的是什么片子, 其实就是通过 IDCODE 指令访问 Device Identification 寄存器来获取的 INTEST 指令和 Boundary-Scan 寄存器 : Boundary-Scan 寄存器就是我们前面例子中说到的边界扫描链 通过边界扫描链, 可以进行部件间的连通性测试 当然, 更重要的是可以对测试器件的输入输出进行观测和控制, 以达到测试器件的内部逻辑的目的 INTEST 指令是在 IEEE 标准里面定义的一条很重要的指令 : 结合边界扫描链, 该指令允许对开发板上器件的系统逻辑进行内部测试 在 ARM JTAG 调试当中, 这是一条频繁使用的测试指令 我们前面说过, 寄存器分为两大类 : 指令寄存器和数据寄存器 在上面提到的 Bypass 寄存器 Device Identification 寄存器和 Boundary-scan 寄存器 ( 边界扫描链 ), 都属于数据寄存器 在 调试当中, 边界扫描寄存器 ( 边界扫描链 ) 最重要, 使用的也最为频繁 3 ARM7TDMI 调试构架在这个小节里, 我将介绍一下 ARM7TIMI 的调试构架, 让大家对 ARM7TDMI JTAG 调有个大概的认识 细节问题将在下一小节中介绍 ARM7TDMI 典型的调试系统结构如图 4 所示 一个调试系统一般包括三个部分 : 调试主机 协议转换器和调试目标 9

10 图 4. ARM7TDMI 典型的系统调试结构 调试主机一般是一台运行调试软件 ( 例如 ADS) 的计算机 调试主机可以发出一些高层的调试命令, 例如设置断点 访问内存等 协议转换器 ( 例如 MULTI-ICE), 用来将调试主机发出的高层调试命令转换为底层的 ARM JTAG 调试命令 调试目标一般就是指基于 ARM7TDMI 内核 MCU 目标开发板 经过协议转换器进行命令解释, 主机上运行的调试软件就可以通过 JTAG 接口直接和 ARM7TDMI 内核对话 通过扫描链, 可以把 ARM/THUMB 指令插入到 ARM7TDMI 的指令流水线当中去执行 通过插入特定 ARM/THUMB 指令, 我们可以检查 保存或者改变内核和系统的状态 为了支持底层的调试,ARM7TDMI 处理器提供了硬件上的扩展, 这些调试扩展包括: 停止程序的运行 检查和修改 ARM7TDMI 的内核状态 观察和修改内存 恢复程序的运行 ARM7TDMI 处理器的结构框图如下图所示 : 图 5. ARM7TDMI 处理器结构框图 10

11 从图 5 可以看到,ARM7TDMI 处理器主要包括三大部分 : ARM CPU Main Processor Logic 这部分包括了对调试的硬件支持 ; Embedded ICE-RT Logic 这部分包括了一组寄存器和比较器, 用来产生调试异常 设置断点和观察点 ; TAP Controller TAP Controller 通过 JTAG 接口来控制和操作扫描链 从图 5, 我们可以发现 ARM7TDMI 提供了 4 条扫描链 :Scan Chain 0, 1, 2 & 3. Scan Chain 0 通过扫描链 0 可以访问 ARM7TDMI 内核的外围电路, 包括数据总线 通过该扫描链 可以进行芯片间的测试 (EXTEST) 和芯片的内部测试 (INTEST) 该扫描链长度为 113 位, 具体包括 : 数据总线的 0-31 位, 内核控制信号, 地址总线的 31-0 位, EmbeddedICE-RT 的控制信号 Scan Chain 1 扫描链 1 是扫描链 0 的子集, 长度为 33 位, 具体包括 : 数据总线的 0-31 位 BREAKPT 信号 扫描链 1 比扫描链 0 的长度短了很多, 通过扫描链 1 可以更快的插入指令或者 是数据到 ARM7TDMI 的内部 Scan Chain 2 扫描链 2 长度为 38 位, 该扫描链是专门用来访问 EmbeddedICE-RT 内部的寄存器 通过访问 EmbeddedICE-RT 的内部寄存器, 可以让 ARM7TDMI 进入调试状态 设置 断点 设置观察点 Scan Chain 3 通过扫描链 3,ARM7TDMI 可以访问外部的边界扫描链 该扫描链用的很少, 在此 就不介绍了, 想了解的网友可以参考 ARM7TDMI 手册 在实际的调试过程中, 扫描链 1 和扫描链 2 用的最多 基本上所有的调试动作都是通过这两 条扫描链来完成的 ARM7TDMI 还提供了 3 个附加的信号 :DBGRQ DBGACK 和 BREAKPT. 这 3 个信号都被 EmbeddedICE-RT 控制, 可以用来使得处理器从正常的运行状态进入调试状态或从调试状态返回到正常的运行状态 DBGREQ 调试请求, 通过把 DBGREQ 置 1, 可以迫使 ARM7TDMI 进入调试状态 DBGACK 调试确认, 通过 DBGACK, 可以判断当前 ARM7TDMI 是否在调试状态 BREAKPT 断点信号, 这个信号是输入到 ARM7TDMI 处理器内核的 如果 BREAKPT 被置 1, 当前的内存访问被设置为断点 如果当前的内存访问是取指令的话, 当该指令被执行的时候,ARM7TDMI 处理器自动进入调试状态 ; 如果当前的内存访问是存取数据的话, 在存储完成以后,ARM7TDMI 处理器自动进入调试状态 11

12 4 ARM7TDMI 调试原理在这个小节里, 我将详细介绍 ARM7TIMI 的调试原理, 并对一些比较感兴趣的问题进行讨论 例如, 如何设置断点? 如何让 ARM7TDMI 进入调试状态? 在调试状态下, 如何访问 ARM7TDMI 的内部寄存器? 如何访问内存单元? 在继续之前, 看看 ARM7TDMI 的正常运行状态和调试状态的区别 在正常运行状态下, ARM7TDMI 由 MCLK(Memory Clock) 驱动, 正常运行 在调试状态下,ARM7TDMI 的正常运行被打断, 并且和系统的其它部分隔离开来 在调试状态下, 我们可以通过插入特定的 ARM/THUMB 的指令来读写 ARM7TDMI 的内部寄存器和修改内存的内容 在调试状态下, ARM7TDMI 由内部的调试时钟 DCLK(Debug Clock) 驱动 DCLK 比 MCLK 慢很多, 所以在调试状态下, 插入的 ARM/THUMB 指令的运行速度会比较慢 ( 现对而言 ) 在完成需要的操作后, 可以用 RESTART JTAG 指令让 ARM7TDMI 返回到正常运行状态, 恢复原来的运行 4-1 ARM7TDMI 的指令寄存器及常用 JTAG 指令 ARM7TDMI 的指令寄存器长度是 4 位, 通过 TAP 和 JTAG 接口, 可以把指令装载到指令寄存器当中去 在 CAPTURE-IR 状态下, 固定值 B0001 总是被装载到指令寄存器当中去 在 SHIFT-IR 状态中, 可以把 ARM7TDMI 支持的新指令从 TDI 串行输入, 同时固定值 B0001 会从 TDO 串行输出 通过这个输出的固定值, 可以判断当前的操作是否正确 在 UPDATE-IR 状态, 新输入的指令被装载到指令寄存器当中去 最后回到 RUN-TEST/IDLE 状态后, 新指令立即生效 下面先来看看在 ARM7TDMI 调试当中经常用到的几条 JTAG 指令 IDCODE 该指令的二进制代码是 1110 IDCODE 指令将 Device Identification Code 寄存器连接到 TDI 和 TDO 之间 Device Identification Code 寄存器的长度是 32 位, 通过 TAP 就可以将 ARM7TDMI 的 ID 给读出来 ARM7TDMI 的 ID 是 0x1F0F0F0F. 在 CAPTURE-DR 状态下, 器件的 ID 被捕获到 ID 寄存器里面 在 SHIFT-DR 状态下, 先前捕获的 ID 通过 TDO 位移出来, 总共需要 32 个 TCK 时钟周期 在 UPDATE-DR 状态下,ID 寄存器不受任何影响 SCAN_N 该指令的二进制代码是 0010 ARM7TDMI 提供了 4 条扫描链, 通过 SCAN_N 指令可以选择需要访问的扫描链 一般来说, 需要访问 Embedded ICE-RT 的寄存器时, 选择扫描链 2; 需要插入指令到 ARM7TDMI 内核去执行的时候, 选择扫描链 1 选择扫描链的过程如下 : 先把 SCAN_N 指令装载到指令寄存器当中去, 该指令会将长度为 4 位的扫描链选择寄存器连接到 TDI 和 TDO 之间 ; 然后进入到 CAPTURE-DR 状态, 在这个状态下, 固定值 B1000 将被捕获到扫描链选择寄存器当中去 ; 在 SHIFT-DR 状态下, 将需要选择的扫描链的号码通过 TDI 输入到扫描链选择寄存器当中去 ; 在 UPDATE-DR 状态下, 被选择的扫描链将被连接到 TDI 和 TDO 之间 在 TAP 被复位以后, 默认状态下选择的是扫描链 3 在使用 SCAN_N 选定了一条扫描链后, 当前选定的扫描链会一直保持不变, 直到在下一次调用 SCAN_N 选择另外的扫描链 BYPASS 该指令的二进制代码是 1111 BYPASS 指令将 1-BIT 长的 BYPASS 寄存器连接到 TDI 和 TDO 之间 INTEST 该指令的二进制代码是 1100 INTEST 指令将通过 SCAN_N 选定的扫描链置于内部测 12

13 试模式 RESTART 该指令的二进制代码是 0100 RESTART 指令用来使 ARM7TDMI 处理器从调试状态退回到正常的运行状态 4-2 EmbeddedICE-RT Logic 在这个小节里, 主要介绍通过扫描链 2 来访问 EmbeddedICE-RT 内部的寄存器 EmbeddedICE-RT 内部包括了丰富的寄存器, 通过这些寄存器, 可以控制 ARM7TDMI 进入或者退出调试状态 ; 可以设置断点和观察点 先来看看 EmbeddedICE-RT 包括那些寄存器, 下面这个表里罗列了 EmbeddedICE-RT 中包含的所有寄存器 不同的寄存器有不同的长度, 而且被分配了一个长度为 5 的地址 其中 Debug Control Register 用来控制 EmbeddedICE-RT; 通过 Debug Status Register 可以查询当前系统的状态 ;Abort Status Register 用来确定异常的产生原因 : 断点 观察点还是真的异常 ; Debug Comms Control Register 和 Debug Comms Data Register 是用来控制和操作 Debug Communication Channel 的 ; 后面的所有寄存器都是关于 WATCH POINT 的, 设置断点和观察点就是通过设置这些寄存器来实现的 后面我将逐一的进行介绍 TABLE I. Mapping of EmbeddedICE-RT Registers 要访问 EmbeddedICE-RT 内部的寄存器, 必须通过扫描链 2 来实现 扫描链的长度是 38 位, 其中 0-4 位用来标识要访问的寄存器的 5 位宽的地址 ;5-36 位为数据位 ; 第 37 位用 来标识对当前寄存器进行读操作还是写操作 如果是对当前寄存器进行写操作,5-36 的数 13

14 据位用来标识需要写入到寄存器的数据 ; 如果对当前寄存器进行读操作,5-36 的数据位用 来存储从寄存器中读出的数据 假设我们现在想访问 Debug Control Register, 对其进行写操 作, 首先需要选择扫描链 2, 将其连接到 TDI 和 TDO 之间, 然后通过扫描链 2 对 Debug Control Register 进行访问 其过程如下所述 通过 TAP 将 SCAN_N 指令写入到指令寄存器当中去, TAP 状态转换如下 :RUN-TEST/IDLE SELECT-DR-SCAN SELECT-IR-SCAN CAPTURE-IR SHIFT-IR EXIT1-IR UPDATE-IR RUN-TEST/IDLE, 在 SHIFT-IR 状 态下, 将 SCAN_N 通过 TDI 写到指令寄存器中去 ; 接下来, 访问被 SCAN_N 指令连接到 TDI 和 TDO 直接的扫描链选择寄存器, 通过将 2 写入到扫描链选择寄存器当中去, 以将扫描链 2 连接到 TDI 和 TDO 之间,TAP 状态转换过程如下 :RUN-TEST/IDLE SELECT-DR-SCAN CAPTURE-DR SHIFT-DR EXIT1-DR UPDATE-DR RUN-TEST/IDLE, 在 SHIFT-DR 状态下, 将数值 2 通过 TDI 写到扫描链选择寄存器当中去 在通过扫描链 2 访问任何 EmbeddedICE-RT 内部寄存器之前, 我们还需要用 INTEST 指令将当前通过 SCAN_N 指令选 择的扫描链置内部测试状态 写入 INTEST 指令的过程和写入 SCAN_N 指令的过程类似 在 此就不多说了 好, 至此, 我们已经选择了扫描链 2, 并且将它置于内部测试状态 接下来, 我们就可以通过扫描链 2 访问 EmbeddedICE-RT 内部寄存器了 下面, 以写 Debug Control Register 为例, 看看怎样实现访问 假设要将 Debug Control Register 的 6 位全部置 1, 按照 扫描链 2 的格式, 需要写入到扫描链 2 第序列应该为 : 1,0000,0000,0000,0000,0000,0000,0011,1111,00000 在上面这个长度为 38 位的序列当中, 低 5 位红色标识的数列是 Debug Control Register 的地址 ; 最高位蓝色标识的 1 表示对 Debug Control Register 进行写操作 ; 中间黑色表示的 32 位是要写 入到 Debug Control Register 的数据, 因为 Debug Control Register 长度为 6, 所以只有低 6 为 的数据序列 有效 要将上面长度为 38 位的序列写入到扫描链 2 中,TAP 状态转换过 程如下 :RUN-TEST/IDLE SELECT-DR-SCAN CAPTURE-DR SHIFT-DR EXIT1-DR UPDATE-DR RUN-TEST/IDLE 在 SHIFT-DR 状态下, 通过 38 个 TCK 时钟 驱动, 就可以将上面的序列串行输入到扫描练 2 当中去 在回到 RUN-TEST/IDLE 状态后, Debug Control Register 的值就会被改写为 我们已经知道如何访问 EmbeddedICE-RT 的内部寄存器了, 下面让我们一起来了解了解 各个寄存器的作用 Debug Control Register 从该寄存器的名称可以看出, 该寄存器是用来控制调试的 下面这个表是 Debug Control 寄存器的格式 DBGACK, 用来控制 DBGACK 信号的值, 通过 Debug Control 寄存器, 可以设置 DBGACK 的值 个人的感觉是, 不要人为的去设置这个值, 让 EmbeddedICE-RT 自动控制 DBGRQ, 是调试请求信号, 通过将该信号置 1, 可以强制 ARM7TDMI 暂停当前的指令, 进入调试状态 INTDIS 用来控制中断 SBZ/RAZ 任何时候都必须被置 0 Monitor Mode Enable 用来控制是否进入 Monitor 模式, 我没有用过这个控制位, 按我个人的理解, 该模式在调试当中一般不会用到 EmbeddedICE-RT Disable, 很明显, 这个控制位用来控制整个 EmbeddedICE-RT, 是启用还是禁用 如果禁用的话,ARM7TDMI 将一直保持在正常的运行状态 总结一下, 通过 Debug Control 寄存器, 可以强制让 ARM7TDMI 进入调试状态 这是第一种让 ARM7TDMI 进入调试状态的方法, 另外, 也可以通过断点或者是观察点来进入调试状态, 每当设置的断点或 14

15 者观察点被触发后,ARM7TDMI 自动进入调试状态 在我们调试的时候, 第一步一般都是先用 DBGRQ 信号使得 ARM7TDMI 进入调试状态, 然后将我们需要调试的程序装载到内存里去, 接着在需要的地方设置断点和观察点, 开始调试 ( 单步运行 全速运行 让断点或者观察点触发 ) Debug Status Register 从该寄存器的名称可以看出, 该寄存器是用来保存当前低调试状态的 虽然参手册上说该寄存器可读可写, 不过建议对该寄存器只进行读操作 该寄存器的长度位 5, 格式如下 : DBGACK 信号用来标识当前系统是否处于调试状态, 当 ARM7TDMI 进入调试状态后, 该信号会被自动置 1 所以, 通过查询该位, 就可以判断 ARM7TDMI 当前的状态 DBGRQ 信号用来标识 DBGRQ 信号的当前状态, 要设置 DBGRQ 信号请访问 Debug Control 寄存器 IFEN 用来标识系统的中断控制状态 : 启用还是禁用?cgenL, 可以用来判断当前对调试器 (DEBUGGER) 在调试状态下对内存的访问是否完成 TBIT, 该位用来判断 ARM7TDMI 是从 ARM 状态还是 THUMB 状态进入到调试状态的 Abort Status Register 该寄存器的长度为 1, 该寄存器用来判断一个异常的产生的原因 : 断点触发? 观察点触发? 还是一个真的异常? Watch Point 0/1 Address Value/Mask Register Watch Point 0/1 Data Value/Mask Register Watch Point 0/1 Control Value/Mask Register 关于 WATCH POINT 的 6 个寄存器, 因为联系比较紧密, 我在这里对这 6 个寄存器一并介绍 ARM7TDMI 有两组 WATCH POINT 寄存器, 所以总共有 12 个寄存器, 在这里我只介绍其中的一组, 另外一组的功能完全是一样的 看看上面提到的 6 个寄存器, 其实是 3 对寄存器, 其中 3 个是 Value 寄存器, 另外 3 个是 Mask 寄存器, 通过 Mask 寄存器的设置, 可以屏蔽相应的 Value 寄存器的某些或全部数据位, 在比较的时候不予以考虑 WP Address Value/Mask 是用来监控地址总线的,WP Data Value/Mask 是用来监控数据总线的 每组寄存器都与一个比较器相联系, 该比较器的比较结果决定了断点条件是否满足 每次对存储空间进行访问,Watch Point 的比较器都会判断当前访问的地址和 WP Address Value 寄存器的中的地址是否匹配? 该地址中的数据和 WP Data Value 寄存器中的数据是否匹配? 如果地址和数据同时都匹配,BREAKPT 信号会被置 1, 当前的内存访问被设置为断点 如果当前的内存访问是取指令的话, 当该指令被执行的时候,ARM7TDMI 处理器自动进入调试状态 ; 如果当前的内存访问是存取数据的话, 在存储完成以后,ARM7TDMI 处理器自动进入调试状态 通过相应的 MASK 寄存器, 可以使得比较器的使用很灵活 例如, 我们只考虑地址是否匹配, 可将 WP Data Mask 寄存器的值设置为 :0xFFFFFFFF. 这样的话, 数据部分总是被认为是匹配的, 是实际上起作用的就是地址和 WP Address Value 寄存器的值是否匹配 ; 反过来, 如果我们只希望考虑数据是否匹配, 而不考虑地址是否匹配, 可以将 WP Address Mask 寄存器的值设置为 0xFFFFFFFF. 这样的话, 地址部分总是被认为是匹配的, 实际上起作用的就是数据和 WP Data Value 寄存器的值是否匹配 另外一个寄存器,WP Control Value/Mask 是用来控制该组的 WP 寄存器的, 同时提供些附加的 15

16 比较条件 ( 信息 ) 下面逐一介绍 WP Control Value/Mask Register WP Control Value 寄存器的长度为 9 位,WP Control Mask 寄存器的长度为 8 位, 因为 WP Control Value 寄存器的最高位是用来控制启用 / 禁止 WP 功能的, 该位不可以被屏蔽 WP Control Mask 寄存器的作用和前面的两种 MASK 寄存器的作用类似, 这里不多说了 下面具体看看 WP Control Value 寄存器, 其格式如下 : ENABLE: 如果该位置 0 的话, 意味着断点触发条件永远不成立, 也就是把全部断点都给 disable 掉了 ; RANGE: 暂时不会用, 呵呵 ; CHAIN: 暂时不会用, 呵呵 ; EXTERN: 外部到 EmbeddedICE-RT 的输入, 通过该输入, 可以使得断点的触发依赖于一定的外部条件 ; ntrans: 用来判断是在用户态下还是非用户态下, 用户态下 :ntrans = 0, 否则 ntrans = 1; nopc: 检测当前的周期是取指令还是进行数据访问 ; MAS[1:0]: 和 ARM7TDMI 的 MAS[1:0] 信号进行比较, 以探测当前总线的宽度是 8 位 16 位还是 32 位 ; nrw: nrw = 0, 当前的是读周期,nRW = 1, 当前的是写周期 在 WP Control Value 寄存器中用的比较多的是 npoc, 用来区分当前的是一个取指令周期, 还是普通的数据访问周期 断点和观察点是不一样的 断点用来标识某个地址上的一条指令, 如果要将一个 WATCH POINT 寄存器组用作断点设置, 首先需要置 WP Control Value 寄存器的 npoc 位为 0, 用来表示 : 只有在当前的周期是进行取指令的前提下, 才触发断点 观察点用来观察某个地址上的数据变化的, 如果要将一个 WATCH POINT 寄存器组用作观察点使用, 首先需要置 WP Control Value 寄存器的 npoc 位为 1, 用来表示 : 只有在当前的周期是进行普通的数据访问的前提下, 才触发观察点 WP Address Value/Mask Register 和硬件断点断点是用来标识某个地址上的指令的, 所以要将一个 WATCH POINT 用作断点设置, 首先需要将 WP Control Value 寄存器的 npoc 位置 0, 用来表示 : 只有在当前的周期是进行取指令的条件下, 才触发断点 要在一个地址设置一个断点, 可以通过 WP Address Value/Mask 这两个寄存器来实现 假设, 要在地址 0x0040 设置一个断点, 可以将 WP Address Value 寄存器的值设置为 0x0040, 同时将 WP Address Mask 寄存器的值设置为 0x0 另外, 将 WP Data Mask 设置为 0xFFFFFFFF, 这样可以屏蔽掉 WP Data value 寄存器的影响, 在进行比较的时候, 只考虑地址是否匹配 这样, 每次 ARM7TDMI 从地址 0x0040 取指令的话, 不管该指令是什么, 断点就会被触发,ARM7TDMI 会暂停当前的运行, 自动进入调试状态, 要清除该断点的话, 只要改变 WP Address Value 寄存器的值, 或者设置 WP Control Value 寄存器, 禁止该功能 如果你想在所有地址的低 16 位的值为 0x0040 的地方设置断点, 可以配合使用 WP Address Mask 寄存器, 16

17 将它的值设置为 0xFFFF,0000, 这样的话, 每次比较的时候, 高 16 为的地址就会被屏蔽掉 其实这种使用方式应该是比较少的, 比较多的情况是, 屏蔽掉最低 2 位或者最低 1 位的地址 在 ARM 状态下, 因为 ARM 指令的长度是 32 位的, 所有指令地址的最低 2 位必须为 0, 所以, 如果在 ARM 状态下, 一般将 WP Address Mask 的低 2 位置 1, 在进行地址比较的时候, 屏蔽掉地址低最低 2 位, 确保断点是被设置在正确的地址上 ; 如果类似, 如果是在 THUMB 状态下, 一般需要将 WP Address Mask 的最低 1 位置 1 上面描述的是第一种设置断点的方式, 这种方式是通过地址比较来实现断点的 这也是我们常说的硬件断点, 这类断点可以被设置在任何地址 ( 包括 FLASH 和 SDRAM) 因为 ARM7TDMI 提供了两组 WP Address Value/Mask 寄存器, 所以, 可以支持两个硬件断点 下面让我们来看看断点的另外一种实现方式 WP Data Value/Mask Register 和软件断点在调试过程当中, 通过 WP Data Value/Mask 寄存器也可以实现断点设置 利用 WP Data Value/Mask 如何实现断点设置呢? 和硬件断点的设置一样, 首先需要将 WP Control Value 寄存器的 npoc 位置 0, 用来表示 : 只有在当前的周期是进行取指令的条件下, 才触发断点 然后, 将 WP Address Mask 寄存器的值设置为 :0xFFFFFFFF, 这样可以屏蔽掉 WP Address value 寄存器的影响, 在进行比较的时候, 只考虑数据是否匹配 接下来, 将 WP Data Value 寄存器的值设置为一个固定的值, 例如 :0xDEDEDEDE, 将 WP Data Mask 寄存器的值设置为 0x 在需要设置断点的地方, 将其内容替换为 0xDEDEDEDE 这样, 一但程序运行到该位置, 尝试从该位置取指令或者数据的时候, 因为取得的数据值和 WP Data Value 寄存器的值相同,ARM7TDMI 会暂停当前的运行, 自动进入调试状态 要清除该位置上的断点, 我们只需要将该位置原来的指令恢复就可以了 这样, 退出调试状态后, 程序可以继续正常的运行 通过 WP Data Value/Mask 寄存器, 我们可以在任何需要设置断点的地方, 将其内容替换为一个固定的序列, 就可以达到设置断点的目的 这种断点就是我们通常所说的软件断点 软件断点的设置方式使得 ARM7TDMI 可以支持任意数量的软件断点 但也决定了软件断点的局限性 : 软件断点不能设置在 ROM/FLASH 里面 因为软件断点的实现需要替换要设置断点的位置的内容, 这点在 ROM/FLASH 做不到 ( 虽然从某种意义上来说, FLASH 也是可读写的, 但是需要特殊的指令 ) WP Address Value/Mask Register 和观察点 WP Data Value/Mask Register 也可以用来设置观察点, 用以观察某个地址的数据变化 每当系统访问 ( 读写 ) 完在被观察的地址的数据的时候,ARM7TDMI 就会进入调试状态, 这样, 我们就可以马上检查该地址上的数据 要设置一个观察点, 将 WP Address Value 寄存器的值设置为需要观察的数据的地址, 将 WP Address Mask 寄存器的值设置为 0x , 将 WP Data Mask 寄存器的值设置为 0xFFFFFFFF 同时不要忘记设置 WP Control Value 寄存器 :npoc = 1( 数据访问, 而非取指令 ); 还可以设置 nrw, 表示是对读操作进行观察, 还是对写操作进行观察 ; 另外, 也可以通过 MAS[1:0] 设置合适的数据宽度 (8 位 16 位 32 位 ) 如果希望 WP Control Value 寄存器的某些位不起作用, 可以恰当的设置 WP Control Mask 寄存器 例如, 如果希望对读操作和写操作都进行观察, 那么就可以设置 WP Control Mask 寄存器的第 0 位为 1 在这一小节里, 我们介绍了如何通过扫描链 2 访问 EmbeddedICE-RT 的内部寄存器以及 EmbeddedICE-RT 的内部寄存器的作用 同时我们还介绍了通过 EmbeddedICE-RT 内部寄存器 17

18 使 ARM7TDMI 进入调试状态的 3 种方式 : 控制 DBGRQ 信号 断点 观察点 要使得 ARM7TDMI 推出调试状态, 可以使用 RESTART JTAG 指令 4-3 通过扫描链 1 访问 ARM7TDMI 的通用寄存器和系统存储空间在这个小节里, 我们将讨论如何通过边界扫描链 1 来访问处于调试状态的 ARM7TDMI. 这个小节的所有讨论都基于这样的一个默认条件 :ARM7TDMI 已经进入到调试状态 (DBGRQ 断点 观察点) 除非明确指出, 否则都默认为 ARM7TDMI 处于调试状态 边界扫描链 1 分布在 ARM7TDMI 的 32 数据总线周围, 另外包括 BREAKPT 信号, 总长度为 33 位 其扫描寄存器单元的分布如下图所示 : 通过边界扫描链 1 的前 32 位, 我们可以插入 THUMB/ARM 指令 ( 不是 JTAG 指令 ) 到 ARM7TDMI 的指令流水线当中去, 让 ARM7TDMI 在 DCLK 的驱动下, 执行这些指令 通过这种方式, 我们可以检查和修改 ARM7TDMI 的通用寄存器和系统内存 为什么通过扫描链可以将指令插入到 ARM7TDMI 的流水线当中去? 可以访问 ARM7TDMI 的内部同意寄存器? 这从边界扫描链 1 的结构可以得到答案 边界扫描链分布在 ARM7TDMI32 位数据总线的周围, 每次 ARM7TDMI 取指令或者进行数据存储, 都要通过 32 位数据总线进行 这样, 通过边界扫描链 1, 就可以插入新指令或者新数据, 同时也可以捕获出现在数据总线上的数据 在调试状态下,ARM7TDMI 支持如下的这些指令 : 数据处理指令 load, store, load multiple, and store multiple 指令 MSR,MRS 指令 扫描链 1 中的第 33 位,BREAKPT 输入, 在调试过程当中有很重要的作用, 主要体现在 : 在 ARM7TDMI 刚进入调试状态的时候, 通过读取该位的值, 可以判断进入调试状态的原因 : 如果 BREAKPT = 0, 由断点触发 ; 如果 BREAKPT = 1, 由观察点触发 在调试的时候,ARM7TDMI 允许特定的指令以系统速度执行, 由 MCLK 驱动 这是通过边界扫描链 1 的 BREAKPT 位来完成的 如果 BREAKPT 置 0, 意味着下一条指令以调试速度执行 (DCLK 驱动 ); 如果 BREAKPT 置 1, 意味着下一条指令以系统速度执行 (MCLK 驱动 ) 当执行到被标识为以系统速度执行的指令时,ARM7TDMI 会同步于 MCLK, 由 MCLK 驱动该指令的执行, 在执行完毕后,ARM7TDMI 会重新回到调试状态, 后面的执行重新由 DCLK 驱动 关于扫描链 1 的 BREAKPT 的具体使 18

19 用方式, 在后面我会结合具体例子进行说明 ARM7TDMI 采用的是 3 级流水线, 指令的执行分为 3 个阶段 ( 如图 6 所示 ): Fetch 取指令, 从内存中取指令 ; Decode 译指令, 解析指令中需要用到的寄存器 ; Execute 执行指令 图 6. ARM7TDMI 指令流水线 在插入 ARM 指令前, 先通过 JTAG 指令 SCAN_N 选择边界扫描链 1, 并用 JTAG 指令 INTEST 将边界扫描链 1 置于 INTEST 状态 接下来, 就可以通过 JTAG 接口将需要的指令或者数据放到 ARM7TDMI 32 位数据总线 ( 边界扫描链 1) 上去 插入指令 / 数据的过程如下 :TAP Controller 的状态变化如下 :RUN-TEST/IDLE SELECT-DR-SCAN CAPTURE-DR SHIFT-DR EXIT1-DR UPDATE-DR RUN-TEST/IDLE 在 CAPTURE-DR 状态下, 可以通过边界扫描链 1 捕获 ARM7TDMI 32 位数据总线上的数据 在 SHIFT-DR 状态下, 通过 33 个 TCK 时钟驱动, 就可以将 32 位长的新指令或者需要的数据加上 BREAKPT 输入到扫描链 1 当中去 同时, 在 CAPTURE-DR 状态下捕获的数据总线上的数据也可以通过 TDO 输出 到 UPDATE-DR 状态下, 输入的指令 / 数据就会被放到 32 位的数据总线上去 回到 RUN-TEST/IDLE 状态后, 插入的指令 / 数据会在 DCLK 的驱动下执行 另外提醒一点, 因为扫描链 1 的第一位对应于 D[0], 而在将指令插入前将整个指令 +BREAKPT 共 33 位序列的比特顺序颠倒过来 这样, 通过 TDI 先送入的是 BREAKPT, 然后是指令的第 31 位 30 位 29 位 第 0 位 下面, 通过几个具体的例子, 来看看如何通过插入 ARM 指令 / 数据来访问 ARM7TDMI 的内部通用寄存器和系统内存 (1). 读取通用寄存器 R0 的值 : 要读取寄存器 R0 的值, 可以用指令 STR R0, [R0] = 0xE 来实现 该指令将寄存器 R0 的值存储到内存单元 R0 中去 因为在 ARM7TDMI 处于调试状态的时候,ARM7TDMI 和外部是隔离开来的, 所以该指令实际上不能访问内存单元, 也不会对内存单元产生任何影响 使用指令 STR R0, [R0] 的目的是使得寄存器 R0 的值出现在数据总线上, 这样我们就可以通过扫描链 1 将其捕获, 然后从 TDO 输出 指令 STR R0, [R0] 的执行需要 2 个指令执行周期 (CYCLE) 在第 1 个指令执行周期, 执行地址计算 ; 在第 2 个指令执行周期, 将寄存器 R0 的值放到数据总线上去 要读取寄存器 R0 的值, 对边界扫描链 1 的操作过程如下 ( 在下面描述的每一个步骤,TAP 状态都是从 RUN-TEST/IDLE 状态出发, 最后回到 RUN-TEST/IDLE 状态 ): 插入指令 STR R0, [R0] & BREAKPT = 0: - 这步相当于指令 STR R0, [R0] 的取指令周期 (3 级流水线 ); 插入空指令 MOV R0, R0 & BREAKPT = 0: 19

20 - 这一步读取新指令 MOV R0, R0, 同时, 相当于指令 STR R0, [R0] 的译指令周期 (3 级流水线 ); 插入空指令 MOV R0, R0 & BREAKPT = 0: - 这一步读取新指令 MOV R0, R0, 同时, 插入的 STR R0, [R0] 指令开始执行 (3 级流水线 ) 在这一步,STR R0, [R0] 指令处在第 1 个指令执行周期, 在该周期, 先执行地址计算 ; 通过扫描链 1 读出捕获的数据总线上的数据 : - 在这一步, 指令 STR R0, [R0] 继续执行, 指令 STR R0, [R0] 处在第 2 个指令执行周期 在这一步, 寄存器 R0 的值会被放到数据总线上去, 指令 STR R0, [R0] 执行完毕 所以, 在这一步, 从扫描链中读出的数据就是寄存器 R0 的值 另外, 在这一步, 因为还处在 STR R0, [R0] 的指令执行周期内, 所以访问扫描链 1 的时候, 通过 TDI 输入的空指令实际上是会被 ARM7TDMI 忽略 至此, 我们成功获得寄存器 R0 的值 因为除了 STR R0, [R0] 指令外, 插入的另外 2 条指令都是空指令, 所以后面我们可以不考虑这 2 条指令的执行结果 (2). 修改通用寄存器 R0 的值 : 要修改寄存器 R0 的值, 可以用指令 LDR R0, [R0] = 0xE 来实现 该指令将内存单元 R0 的值存储到寄存器 R0 中去 因为在 ARM7TDMI 处于调试状态的时候, ARM7TDMI 和外部是隔离开来的, 所以该指令实际上不能访问内存单元, 也不会对内存单元产生任何影响 使用指令 LDR R0, [R0] 的目的是 : 该指令要从内存单元 R0 中取数据放到数据总线上去, 这样我们就可以通过扫描链 1 将任意需要的值放到数据总线上去, 达到修改寄存器 R0 的目的 指令 LDR R0, [R0] 的执行需要 3 个指令执行周期 (CYCLE) 在第 1 个指令执行周期, 执行地址计算 ; 在第 2 个指令执行周期, 从内存单元 R0 中读取数据, 并将数据放到数据总线上去 ; 在第 3 个指令执行周期, 将数据总线上的数据写到寄存器 R0 中去 要修改寄存器 R0 的值, 对边界扫描链 1 的操作过程如下 ( 在下面描述的每一个步骤,TAP 状态都是从 RUN-TEST/IDLE 状态出发, 最后回到 RUN-TEST/IDLE 状态 ): 插入指令 LDR R0, [R0]& BREAKPT = 0: - 这步相当于指令 LDR R0, [R0] 的取指令周期 (3 级流水线 ); 插入空指令 MOV R0, R0 & BREAKPT = 0: - 这一步读取新指令 MOV R0, R0, 同时, 相当于指令 LDR R0, [R0] 的译指令周期 (3 级流水线 ); 插入空指令 MOV R0, R0 & BREAKPT = 0: - 这一步读取新指令 MOV R0, R0, 同时, 插入的 LDR R0, [R0] 指令开始执行 (3 级流水线 ) 在这一步,LDR R0, [R0] 指令处在第 1 个指令执行周期, 在该周期, 先执行地址计算 ; 通过扫描链 1 将寄存器 R0 的新值放到数据总线上去 : - 在这一步, 指令 LDR R0, [R0] 继续执行,LDR R0, [R0] 指令处在第 2 个指令执行周期 在这一步, 通过扫描链 1, 将 R0 的新值放到数据总线上去 对 ARM7TDMI 而言, 相当于从系统内存中取得了所需的数据 插入空指令 MOV R0, R0 & BREAKPT = 0: - 在这一步, 指令 LDR R0, [R0] 继续执行, 指令 LDR R0, [R0] 处在第 3 个指令执行周期 在这一步, 数据总线上的数据写到寄存器 R0 中去, 完成对寄存器 R0 的修改, 指令 LDR R0, [R0] 执行完毕 另外, 在这一步, 因为还处在 LDR R0, [R0] 的指令执行周期内, 所以访问扫描链 1 的时候, 通过 TDI 输入的空指令实际上是会被 ARM7TDMI 20

21 忽略 至此, 我们成功修改了寄存器 R0 的值 因为除了 STR R0, [R0] 指令外, 插入的另外 2 条指令都是空指令, 所以后面我们可以不考虑这 2 条指令的执行结果 (3). 读内存 : 在前面说过, 当 ARM7TDMI 处于调试状态的时候, 不能访问系统的存储空间, 这是因为在调试状态下, 指令的执行是由 DCLK 驱动的 而对存储空间 ( 内存 ) 的访问需要 MCLK 的驱动 那在调试状态下, 如何实现对存储空间的访问呢? 这个时候, 边界扫描链 1 的 BREAKPT 位就派上用场了 在通过扫描链 1 插入一条指令的时候, 如果将 BREAKPT 位置 1, 意味这条指令的下面一条指令将在 MCLK 的驱动下执行, 执行完毕后, 自动返回调试状态 这样, 通过扫描链 1 的 BREAKPT 位, 我们就可以实现对系统存储空间的访问 让我们来看看要读取内存地址 ADDR 上的 32 位数据的大概步骤 首先, 我们将要访问的地址 ADDR 写到寄存器 R0 当中去 ; 然后用指令 LDR R1, [R0] 将地址 ADDR 处的 32 位长的数据拷贝到寄存器 R1 当中去 ; 最后, 将寄存器 R1 的值读出来, 就得到了存储空间地址 ADDR 处的值 修改寄存器 R0 的值和读取寄存器 R1 的值的步骤在前面都详细介绍了, 在下面, 我只介绍结合 BREAKPT 如何用指令 LDR R1, [R0] 来真正的访问系统存储空间, 将地址 R0 处的内容拷贝到寄存器 R1 当中去 具体过程如下 ( 在下面描述的每一个步骤,TAP 状态都是从 RUN-TEST/IDLE 状态出发, 最后回到 RUN-TEST/IDLE 状态 ): 插入空指令 MOV R0, R0 & BREAKPT = 1: - 首先插入一条空指令, 该指令的主要目的是将扫描链 1 的 BREAKPT 信号置 1 这样, 这条空指令的下一条指令将在 MCLK 的驱动下, 回到正常状态下运行 插入指令 LDR R1, [R0]& BREAKPT = 0: - 因为上一条指令将扫描链 1 的 BREAKPT 置 1 了, 所以, 这条指令将在 MCLK 的驱动下, 回到正常的系统状态下去执行 ; 将 JTAG RESTART 指令插入到 ARM7TDMI 的 JTAG 指令寄存器当中去 : - 将 RESTART 插入到 JTAG 指令寄存器当中去有几个作用 一是, 使 ARM7TDMI 重新同步于 MCLK 信号 ; 二是, 使刚才插入的指令 LDR R1, [R0] 在系统正常状态下, 在 MCLK 的驱动下执行 ; 三是, 在系系统正常状态下执行完指令 LDR R1, [R0] 后, 使 ARM7TDMI 自动返回到调试状态下 ; 在将 RESTART 写入到 JTAG 指令寄存器, 并且在 TAP Controller 回到 RUN-TEST/IDLE 状态后,ARM7TDMI 将会暂时返回到正常的运行状态 在正常的运行状态下,ARM7TDMI 将以系统速度 (MCLK 驱动 ) 完成指令 LDR R1, [R0] 的执行 执行完毕后,ARM7TDMI 将自动返回到调试状态 这样, 寄存器 R1 中就已经有了地址 ADDR 处数值的一个拷贝了 最后需要做的就是通过前面介绍的方法, 在调试状态下, 将 R1 的值读出来 在需要访问内存的时候, 需要注意的就是扫描链 1 中 BREAKPT 位的设置, 以及 JTAG RESTART 指令的使用 (4). 写内存 : 修改内存的过程和读取内存的过程类似, 大概步骤如下 : 将内存地址 ADDR 写到寄存器 R0 当中去, 将新的值写到寄存器 R1 当中去, 最后利用指令 STR R1 [R0] 完成实际的内存访问 在将指令 STR R1 [R0] 插入插入到扫描链 0 之前前, 将扫描链 1 的 BREAKPT 位置 1, 以使得关键指令 STR R1 [R0] 能在 MCLK 的驱动下, 回到正常的系统状态下去执行, 以便能正常访问系统存储 具体的过程在此就不在罗嗦了 21

22 在这个小节里, 我们主要介绍了通过边界扫描链 1 如何访问 ARM7TDMI 的通用寄存器和系统存储空间 在我们的讨论当中, 为了简单起见, 我们使用了最简单的 LDR 和 STR 指令 在实际的调试过程中, 可以使用 LDM 和 STM 指令, 这样一次可以读写多个寄存器或者是多个地址上的数据, 提高效率 从上面的讨论可以看出, 在调试状态下, 每次对通用寄存器和系统存储系统进行访问都需用多条指令来实现 每次插入一条指令到扫描链 1 中去, 都需要 33 个 TCK 时钟周期 因为并口的速率限制, 通过并口进行调试时, 速度会比较的慢 如果使用 USB 接口或者网络接口, 调试的速度将能够获得很大的提升 5 总结在实际的调试过程中, 有很多的细节问题需要考虑, 例如 : 从 ARM 状态还是 THUMB 状态进入调试状态? 系统工作在 LITTLE ENDIAN 模式还是 BIG ENDIAN 模式? 在此就一一略过了, 感兴趣的朋友可以参考相关的资料 只是希望大家看了这篇文章后, 对了解 ARM JTAG 调试的原理和过程有一定的帮助 另外, 如果文章中有什么地方理解有不对的地方, 希望大伙能发 给我指出来, 相信通过你的 , 我也能进一步的加深对 ARM JTAG 调试的理解 同时, 我也会尽力的纠正 参考资料 : [1] IEEE Standard Test Access Port and Boundary-Scan Architecture [2] Application Note 28: The ARM7TDMI Debug Architecture [3] ARM7TDMI (Rev 4) Technical Reference Manual TWENTYONE Oct

ARM JTAG实时仿真器安装使用指南

ARM JTAG实时仿真器安装使用指南 ARM JTAG Version 1.31 2003. 11. 12 ARM JTAG ARM JTAG.3 ARM 2.1.4 2.2.4 ARM JTAG 3.1 18 3.2 18 3.2.1 Multi-ICE Server.18 3.2.2 ADS..21 ARM JTAG 4.1 Multi-ICE Server 33 4.1.1 Multi-ICE Server..... 33 4.1.2

More information

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63>

<4D F736F F D20B5DAC8FDCBC4D5C2D7F7D2B5B4F0B0B82E646F63> 第三章 Q3 1 1. 省略了 I/O 操作的复杂逻辑, 易实现, 耗费低 ; 2. 可以利用丰富的内存寻址模式实现灵活的 I/O 操作 Q3 2 假设存储单元 ds1 处寄存器地址为 0x2000, 代码如下 #define ds1 0x2000 while ( *ds1 == 0 ) ; Q3 3 假设设备 (dev1) 中有两个寄存器 ds1 和 dd1,dev1 的地址为 0x1000,ds1

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

Smart2.doc

Smart2.doc Smart-ICE ARM RealView Developer Suite, ARM http://www.armzone.com 1 Smart-ICE Part 1.... 5 1.1... 5 1.1.1... 5 1.1.2... 6 1.1.3... 7 1.2 Smart-ICE... 7 1.2.1... 7 1.2.2... 8 1.3... 9 1.3.1... 9 1.3.2...

More information

untitled

untitled http://www.embedded-soc.com/ J-LINK J-Link Rev2.1 http://www.embedded-soc.com/ 2007-11-11 http://www.embedded-soc.com/ J-LINK J-Link ARM JTAG J-LINK J-LINKJLINK J-FLASH ARM F.A.Q jlink GDBserver J-Flash

More information

.------------------------------------------------------------------1. DSP --------------------------------2. ----------------3 3.1 -------------------

.------------------------------------------------------------------1. DSP --------------------------------2. ----------------3 3.1 ------------------- ICETEK-5100PP ICETEK-5100USB1.1/2.0 DSP 118 A 1004 010-82671912/13/14/15 E-mailwelcome@realtimedsp.com.cn 100086 010-82671916 www.realtimedsp.com.cn .------------------------------------------------------------------1.

More information

Chapter #

Chapter # 第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层

More information

IDEO_HCD_0716

IDEO_HCD_0716 IDEO HCD Toolkit Tencent CDC ...? Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC Tencent CDC

More information

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0 SH79F6431 1. SH79F6431 1T 8051 FLASH SH79F JET51 Keil µ vision JTAG 1.1. SH79F6431 LQFP64 1.2. (Target Board) SH79F6431 1 V 1.0 1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F6431 1 2 1 B. 1(VCC/GND)

More information

TD

TD *TD-000212-05* 20- 应用实例 4 本例显示的是使用两个亚低 音扬声器和多个顶箱的双声 道 立体声 设置 除了各声道都增加了一个顶 箱外 也可以增加更多的顶 箱 本例和例 3 的情况一 致 声道 2 或 右声道 声道 1 或 左声道 要接到更多的顶箱 将最后 一个顶箱的全幅线路输出接 头处的线缆接到下一个顶箱 的全幅线路输入接头 在不 降低信号质量的情况下 最

More information

P4VM800_BIOS_CN.p65

P4VM800_BIOS_CN.p65 1 Main H/W Monitor Boot Security Exit System Overview System Time System Date [ 17:00:09] [Fri 02/25/2005] BIOS Version : P4VM800 BIOS P1.00 Processor Type : Intel (R) Pentium (R) 4 CPU 2.40 GHz Processor

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

P4V88+_BIOS_CN.p65

P4V88+_BIOS_CN.p65 1 Main H/W Monitor Boot Security Exit System Overview System Time System Date [ 17:00:09] [Wed 12/22/2004] BIOS Version : P4V88+ BIOS P1.00 Processor Type : Intel (R) Pentium (R) 4 CPU 2.40 GHz Processor

More information

untitled

untitled XILINX Platform Cbale USB www.hseda.com ...... Platform Cable USB Compatible.................. impact.........1 platform Cable USB Compatible.........1...1...1...1...1...1 Platform Cable USB Compatible

More information

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas

目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas 目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding

More information

ICD ICD ICD ICD ICD

ICD ICD ICD ICD ICD MPLAB ICD2 MPLAB ICD2 PIC MPLAB-IDE V6.0 ICD2 usb PC RS232 MPLAB IDE PC PC 2.0 5.5V LED EEDATA MPLAB ICD2 Microchip MPLAB-IDE v6.0 Windows 95/98 Windows NT Windows 2000 www.elc-mcu.com 1 ICD2...4 1.1 ICD2...4

More information

1 CPU

1 CPU 2000 Tel 82316285 82317634 Mail liuxd@buaa.edu.cn 1 CPU 2 CPU 7 72 A B 85 15 3 1/2 M301 2~17 : 3/4 1/2 323 IBM PC 1. 2. 3. 1. 2. 3. 1.1 Hardware Software 1.2 M3 M2 M1 1.2 M3 M1 M2 M2 M1 M1 M1 1.2 M3 M1

More information

使用Cassandra和Spark 2.0实现Rest API服务

使用Cassandra和Spark 2.0实现Rest API服务 使用 Cassandra 和 Spark 2.0 实现 Rest API 服务 在这篇文章中, 我将介绍如何在 Spark 中使用 Akkahttp 并结合 Cassandra 实现 REST 服务, 在这个系统中 Cassandra 用于数据的存储 我们已经见识到 Spark 的威力, 如果和 Cassandra 正确地结合可以实现更强大的系统 我们先创建一个 build.sbt 文件, 内容如下

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #

MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP # iptables 默认安全规则脚本 一 #nat 路由器 ( 一 ) 允许路由 # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT ( 二 ) DNAT 与端口转发 1 启用 DNAT 转发 # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 dprot 422 -j DNAT to-destination

More information

IC芯片自主创新设计实验

IC芯片自主创新设计实验 IC 芯片自主创新设计实验 设计报告 设计题目 : 格雷码计数器芯片设计 设计学生 : 吴东生 ( 集成电路 ) 景国新 ( 固体电子 ) 林道明 ( 集成电路 ) 连维重 ( 集成电路 ) 施望 ( 集成电路 ) 刘锦秀 ( 集成电路 ) 刘中伟 ( 集成电路 ) 李梦宁 ( 集成电路 ) 指导教师 : 阮爱武 杜涛 指导单位 : 电子设计自动化技术 课程组 一 格雷码计数器芯片设计概述 功能描述

More information

CHCN_8-14_K.indd

CHCN_8-14_K.indd 是德科技 三个理由让您选择深存储快响应示波器 应用指南 介绍 1. 更长的波形捕获时间 = / 1 1 Mpts 10 GSa/s 1 2 100 Mpts 10 1. = / 1 Mpts 10 GSa/s 1 ms 2. = / 100 Mpts 10 GSa/s 10 ms 3 12.5 Mpts 3 300 Kpts 3 3. 3 12.5 Mpts 3 300 Kpts? Agilent

More information

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt

Microsoft PowerPoint - CA_03 Chapter5 Part-II_multi _V1.ppt Chapter5-2 The Processor: Datapath and Control (Multi-cycle implementation) 臺大電機系 吳安宇教授 V1. 03/27/2007 For 2007 DSD Course 臺大電機吳安宇教授 - 計算機結構 1 Outline 5.1 Introduction 5.2 Logic Design Conventions 5.3

More information

Converting image (bmp/jpg) file into binary format

Converting image (bmp/jpg) file into binary format RAiO Image Tool 操作说明 Version 1.0 July 26, 2016 RAiO Technology Inc. Copyright RAiO Technology Inc. 2013 RAiO TECHNOLOGY INC. www.raio.com.tw Revise History Version Date Description 0.1 September 01, 2014

More information

OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Prot

OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Prot OSI OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Protocol OSI OSI OSI OSI OSI O S I 2-1 Application

More information

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica CP Chip Power ARM Cortex-M3 (STM32F) ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplication and hardware

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

EK-STM32F

EK-STM32F STMEVKIT-STM32F10xx8 软 件 开 发 入 门 指 南 目 录 1 EWARM 安 装... 1 1.1 第 一 步 : 在 线 注 册... 1 1.2 第 二 步 : 下 载 软 件... 2 1.3 第 三 步 : 安 装 EWARM... 3 2 基 于 STMEVKIT-STM32F10xx8 的 示 例 代 码 运 行... 6 2.1 GPIO Demo... 6 2.2

More information

第七章 中断

第七章 中断 嵌入式系统 SOPC(SOC),A case study llxx@ustc.edu.cn 内容提要 本讲的目的 : 介绍嵌入式系统 ; 了解 SOPC 的开发过程 现代计算机系统 嵌入式系统的应用 llxx@ustc.edu.cn 4/87 嵌入式控制系统的软 / 硬件框架 llxx@ustc.edu.cn 5/87 基于 FPGA 的嵌入式系统硬件平台 基于 FPGA 的嵌入式系统结构 FPGA

More information

Andes Technology PPT Temp

Andes Technology PPT Temp 晶心科技線上技術研討會 AndesCore 便捷的全 C 嵌入式编程 晶心科技市場及技術服務部毛礼杰軟件經理 WWW.ANDESTECH.COM 大纲 系统初始化介绍 异常和中断说明 全 C 语法例子说明 总结 2 CPU 相关特性 1: 中断向量表 系统初始化 (1) 2: 系统寄存器 通常需要用 assembly( 汇编 / 组合 ) 语言来操作 AndesCore 全 C 嵌入式编程 C 扩展语法

More information

吉林大学学报 工学版 244 第 4 卷 复杂 鉴于本文篇幅所限 具体公式可详见参考文 献 7 每帧的动力学方程建立及其解算方法如图 3 所示 图4 滚转角速度与输入量 η 随时间的变化波形 Fig 4 Waveform of roll rate and input η with time changing 图5 Fig 5 滚转角随时间的变化波形 Waveform of roll angle with

More information

行业

行业 PCI-1716/1716L 1.1...2 1.1.1...2 1.1.2 / /SD*/BU*...2 1.1.3 FIFO( )...2 1.1.4...2 1.1.5 16 16...3 1.1.6...3 1.1.7 ID...3 1.2...3 2.1...3 2.2...4 2.2.1...4 2.2.2...6 2.3... 11 2.3.1... 11 2.3.2...12 2.3.3...13

More information

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Terminal Mode No User User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2 Mon1 Cam-- Mon- Cam-- Prohibited M04 Mon1 Cam03 Mon1 Cam03

More information

行业

行业 PCI-1710 1.1...2 1.1.1...2 1.1.2...2 1.1.3 FIFO( )...2 1.1.4...2 1.1.5...2 1.1.6 16 16...3 1.1.7...3 1.2...3 1.3...3 2.1...3 2.2...4 2.2.1...4 2.2.2...5 2.3...9 2.3.1...10 2.3.2... 11 2.3.3...12 2.3.4...12

More information

FPGAs in Next Generation Wireless Networks WPChinese

FPGAs in Next Generation Wireless Networks WPChinese FPGA 2010 3 Lattice Semiconductor 5555 Northeast Moore Ct. Hillsboro, Oregon 97124 USA Telephone: (503) 268-8000 www.latticesemi.com 1 FPGAs in Next Generation Wireless Networks GSM GSM-EDGE 384kbps CDMA2000

More information

行业

行业 PCL-1800 PCL-1800 1.1...2 1.1.1 1K FIFO...2 1.1.2...2 1.1.3 16...3 1.1.4...3 1.1.5...3 1.1.6...3 1.2...3 1.3...4 1.4...5 2.1...5 2.2...6 2.2.1...6 2.2.2...6 2.2.3 D/A...7 2.2.4...7 2.2.5 TRIG0 GATE0...8

More information

行业

行业 PCL-818HD/HG/L PCL-818HD/HG/L 1.1...2 1.1.1 /...2 1.1.2 ID...2 1.2...3 1.3...3 2.1...3 2.2...3 2.2.1...4 2.2.2...4 2.2.3 DMA...5 2.2.4...5 2.2.5 D/A...5 2.2.6...6 2.2.7 EXE.trigger GATE0...6 2.2.8 FIFO

More information

Abstract arm linux tool-chain root NET-Start! 2

Abstract arm linux tool-chain root NET-Start! 2 Lab III - Embedding Linux 1 Abstract arm linux tool-chain root NET-Start! 2 Part 1.4 Step1. tool-chain 4 Step2. PATH 4 Part 2 kernel 5 Step1. 5 Step2... 6 Step3...8 Part 3 root. 8 Step1. 8 Step2. 8 Part

More information

lecture21

lecture21 Lecture 21: CPU - Datapath and Control 中央处理器 : 数据通路和控制器 singlepath2 单周期数据通路的设计 主要内容 CPU 的功能及其与计算机性能的关系 数据通路的位置 单周期数据通路的设计 数据通路的功能和实现 - 操作元件 ( 组合逻辑部件 ) - 状态 / 存储元件 ( 时序逻辑部件 ) 数据通路的定时 选择 MIPS 指令集的一个子集作为

More information

水晶分析师

水晶分析师 大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS

More information

行业

行业 PCI-1711/1711L 1.1...2 1.1.1...2 1.1.2...2 1.1.3 FIFO...2 1.1.4...2 1.1.5 16 16...3 1.2...3 2.1...3 2.2...3 2.2.1... 2.2.2...8 2.3...10 2.3.1...10 2.3.2... 11 2.3.3...12 2.3.4...13 2.4.5...14 3.1...16

More information

长 安 大 学 硕 士 学 位 论 文 基 于 数 据 仓 库 和 数 据 挖 掘 的 行 为 分 析 研 究 姓 名 : 杨 雅 薇 申 请 学 位 级 别 : 硕 士 专 业 : 计 算 机 软 件 与 理 论 指 导 教 师 : 张 卫 钢 20100530 长安大学硕士学位论文 3 1 3系统架构设计 行为分析数据仓库的应用模型由四部分组成 如图3 3所示

More information

Microsoft Word - EE-175_cn.doc

Microsoft Word - EE-175_cn.doc Engineer-to-Engineer Note EE-175 更 多 关 于 ADI 公 司 的 DSP 处 理 器 以 及 开 发 工 具 的 技 术 资 料, 请 访 问 网 站 :http://www.analog.com/ee-note 和 http://www.analog.com/processor 如 需 技 术 支 持, 请 发 邮 件 至 processor.support@analog.com

More information

行业

行业 PCI-1727U 快 速 安 装 使 用 手 册 PCI-1727U 快 速 安 装 使 用 手 册... 1 第 一 章 产 品 介 绍... 2 1.1 概 述...2 1.1.1 即 插 即 用 功 能...2 1.1.2 灵 活 的 电 压 输 出 范 围...2 1.1.3 板 卡 ID...2 1.2 特 点 :...2 1.3 选 型 指 导...2 第 二 章 安 装 与 测 试...

More information

LETD型LED灯炮规格的更改

LETD型LED灯炮规格的更改 2018 十二月 1/10 页 软件错误问题软件错误 1 Automation Organizer(WindLDR) 软件之修复 针对版本 : WindLDR 版本 8.2.0 至版本 8.9.1 (Automation Organizer 版本 3.20 至 版本 3.12.1) 注 : 包括由官网下载的版本 当使用以上版本软件, 软件错误 1 将会出现在以下型号 : FC6A CPU 模块 -

More information

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe   Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L 1 SH88F516 8051 64K FLASH 1024 EEPROM SH88F516 JET51 S-Lab Keil µ vision ISP51 Keil µ vision ISP51 ISP51 PC RS232 MCU SH88F516 SH88F516 1.1 SH88F516 1.1 SH88F516 SH88Fxx: QFP44, DIP40 RAM Flash E2 ADC

More information

Microsoft Word - AVR32 UC3 isp下载.doc

Microsoft Word - AVR32 UC3 isp下载.doc AVR32 UC3 ISP 下载 2008 年 4 月 1 AVR32 UC3 系列控制器在出厂时在内部 Flash 里已经固化了一个 USB DFU bootloader, 可以通过 AVR32 UC3 系列控制器的 USB 接口, 利用内部固化的 USB bootloader 进行 ISP(In-System Programming) 下载 一 Bootloader 环境 图 1 Bootloader

More information

邏輯分析儀的概念與原理-展示版

邏輯分析儀的概念與原理-展示版 PC Base Standalone LA-100 Q&A - - - - - - - SCOPE - - LA - - ( Embedded ) ( Skew ) - Data In External CLK Internal CLK Display Buffer ASIC CPU Memory Trigger Level - - Clock BUS Timing State - ( Timing

More information

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi SPHE8202R Design Guide V2.0 JUN, 2007 19, Innovation First Road Science Park Hsin-Chu Taiwan 300 R.O.C. Tel: 886-3-578-6005 Fax: 886-3-578-4418 Web: www.sunplus.com SPHE8202R Design Guide Important Notice

More information

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页

一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 第 1 页共 32 页 crm Mobile V1.0 for IOS 用户手册 一 登录 crm Mobile 系统 : 输入 ShijiCare 用户名和密码, 登录系统, 如图所示 : 第 2 页共 32 页 二 crm Mobile 界面介绍 : 第 3 页共 32 页 三 新建 (New) 功能使用说明 1 选择产品 第 4 页共 32 页 2 填写问题的简要描述和详细描述 第 5 页共

More information

HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700 M725 CF214X (14X) 17.5 HP 5200 Q7516A U16-2CHIP SSS 846 芯片记号 (U16-2) Canon LBP-3500, LBP-3900, LBP-392

HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700 M725 CF214X (14X) 17.5 HP 5200 Q7516A U16-2CHIP SSS 846 芯片记号 (U16-2) Canon LBP-3500, LBP-3900, LBP-392 HP and Canon 单色通用芯片表在线访问我们的网站, 可以得到更多的信息 : www.scc-inc.com/chipcenter 全部开始都是专利通用芯片一个芯片, 多个不同型号的硒鼓 注意 : 当在这个文档上要寻找一个特殊的 或打印机的型号时, 在你的键盘上同时按 CTRL 键和 F 键就能搜索到 HP and Canon 单色通用芯片表 SCC 芯片 图片 HP 700 M712, 700

More information

通过Hive将数据写入到ElasticSearch

通过Hive将数据写入到ElasticSearch 我在 使用 Hive 读取 ElasticSearch 中的数据 文章中介绍了如何使用 Hive 读取 ElasticSearch 中的数据, 本文将接着上文继续介绍如何使用 Hive 将数据写入到 ElasticSearch 中 在使用前同样需要加入 elasticsearch-hadoop-2.3.4.jar 依赖, 具体请参见前文介绍 我们先在 Hive 里面建个名为 iteblog 的表,

More information

51 C 51 isp 10 C PCB C C C C KEIL

51 C 51 isp 10   C   PCB C C C C KEIL http://wwwispdowncom 51 C " + + " 51 AT89S51 In-System-Programming ISP 10 io 244 CPLD ATMEL PIC CPLD/FPGA ARM9 ISP http://wwwispdowncom/showoneproductasp?productid=15 51 C C C C C ispdown http://wwwispdowncom

More information

2009 年第 6 期 高清总动员 35

2009 年第 6 期 高清总动员 35 要说 08 年最成功的高清机, 非三合一 F1/F2 莫属 它集中了国内不同的高清接收需求, 整合了当时能想到的各种功能, 为欣赏高清奥运, 满足高端发烧人士, 做出了贡献 F1/F2 的成功, 说明不依赖进口, 我们也有能力打造顶级的高清机, 并且更适合国内的使用习惯 不过, 即使 F1/F2 的终极版, 也不兼容 ABS-S 或 ISDB-S, 没有网络功能, 不能 USB 录像等等, 有一定的局限性

More information

目 录

目 录 1 Quick51...1 1.1 SmartSOPC Quick51...1 1.2 Quick51...1 1.3 Quick51...2 2 Keil C51 Quick51...4 2.1 Keil C51...4 2.2 Keil C51...4 2.3 1 Keil C51...4 2.4 Flash Magic...9 2.5 ISP...9 2.6...10 2.7 Keil C51...12

More information

逢 甲 大 學

逢  甲  大  學 益 老 年 不 易更 例 不 異 列 - I - 錄 錄 流 錄 六 來 錄 - II - 錄 錄 錄 錄 錄 錄 參 料 錄 - III - 料 讀 讀 錄 讀 數 錄 錄 錄 錄 錄 - IV - 錄 錄 行 錄 錄 錄 錄 讀 錄 錄 錄 讀 錄 錄 - V - 了 說 力 兩 了 - 1 - 列 邏 路 列 不 不 FLEX 10K Devices at a Glance Feature

More information

2017創形パンフ表1_表4

2017創形パンフ表1_表4 2017 SCHOOL GUIDE BOOK 2017 SOKEI ACADEMY OF FINE ART & DESIGN 关于创形美术学校? 创形美术学校是培育专业艺术家的摇篮 大家知道 : 用普通的教育课程来培育专业的艺术家是件困难的事 在我们创形, 从老师到办公人员, 大家全体都是专业的艺术家 在美术界, 设计界当中取得卓越成绩的艺术家们将为大家面对面地传授心得 我们重视的并不是通过指定的教学说明书来指导大家,

More information

Tel:010-62981668-2930 1

Tel:010-62981668-2930  1 Access 93C46 with SPI function V1.0.0 Jan. 31, 2005 http://www.sunplusmcu.com Tel:010-62981668-2930 http://www.sunplusmcu.com E-mail:mcu@sunplus.com.cn 1 0 0...2 1...3 2...4 2.1...4 2.2...5 3...6 3.1 AT93C46...6

More information

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0

六域链联盟 SDChain-Matrix 节点搭建指南 2018/07/26 Version : 1.0.0 SDChain-Matrix 节点搭建指南 目录 1 环境要求... 3 2 软件下载... 4 3 安装部署... 4 3.1 部署可执行程序目录... 4 3.2 部署配置文件目录... 4 3.3 部署数据库文件目录... 4 3.4 部署日志文件目录... 4 3.5 部署依赖库文件目录... 4 4 配置参数... 5 5 启动运行... 7 5.1 普通模式启动... 7 5.2 加载启动模式...

More information

Microsoft Word - EK-LM3S8962_EvalBoard_UM部分翻译.doc

Microsoft Word - EK-LM3S8962_EvalBoard_UM部分翻译.doc Debugging Stellaris microcontrollers support programming and debugging using either JTAG or SWD. JTAG uses the signals TCK, TMS, TDI, and TDO. SWD requires fewer signals (SWCLK, SWDIO, and, optionally,

More information

第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳

第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 第 十 一 期 2015 年 2 月 热 点 政 策 与 问 答 嘉 定 区 税 务 局 纳 税 服 务 中 心 编 第 十 一 期 2015 年 2 月 关 于 车 辆 购 置 税 征 收 管 理 有 关 问 题 的 公 告 ( 点 击 跳 转 至 全 文 ) 国 家 税 务 总 局 公 告 2015 年 第 4 号 关 于 电 池 涂 料 消 费 税 征 收 管 理 有 关 问 题 的 公 告

More information

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63>

<4D F736F F D203034CAB5D1E9CBC D20B5C4494F20BDD3BFDACAB5D1E92E646F63> 实验四 ARM 的 I/O 接口实验 一 实验目的 1. 了解 S3C44B0X 的通用 I/O 接口 2. 掌握 I/0 功能的复用并熟练的配置, 进行编程实验二 实验设备 1. EL-ARM-830 教学实验箱,PentiumII 以上的 PC 机, 仿真器电缆 2. PC 操作系统 WIN98 或 WIN2000 或 WINXP,ARM SDT2.5 或 ADS1.2 集成开发环境, 仿真器驱动程序

More information

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2

NEXT SDT2.51 C:\ARM251 SDT2.51 ARM SDT 2.51 ARM PROJECT MANAGER SDT 2 S3C44B0 SDT DRAGNBOY MICROSTAR ARM 51 ARM S3C44B0 ARM SDT2.51 IAR ADS SDT2.51 S3C44B0 LEDTEST SDT ARM 1 2 SDT embed.8800.org SDT2.51 SDT2.51 ARM ARM CPU ARM SDT ADS ADS MULTI-ICE SDT JTAG JTAG SDT SDT2.51

More information

RX Trial Kit

RX Trial Kit RX Trial Kit 面 向 RX610 群 单 片 机 的 简 易 开 发 套 件 瑞 萨 电 子 ( 中 国 ) 有 限 公 司 R&D Center 2011 Renesas Electronics (China) Co., Ltd. All rights reserved. 目 录 1. RX Trial Kit 套 件 2. 使 用 RX Trial Kit 需 要 安 装 的 软 件

More information

01

01 ZEBRA 技术白皮书 条码编码 101 相关知识介绍 引言 20 70 数据 80 20 90 (JIT) AIAG EIA HIBCC HAZMAT 条码的优势提高数据准确性 99% 85% / / 提升效率 / 2 Zebra Technologies 保持一致性 ID 改进库存和资产管理 成本 / 效益分析 ID ID ID (ERP) RFID Zebra Technologies 3 ID

More information

Bus Hound 5

Bus Hound 5 Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus

More information

Microsoft Word - AN3259C

Microsoft Word - AN3259C www.maxim-ic.com.cn 应用笔记 3259 DS31256 Envoy - 寄存器转储列程 概述本应用笔记提供了将 DS31256 的寄存器 排队程序 描述符和 FIFO RAM 的内容转储到一个文件的程序代码 这些数据在 DS31256 无法正常工作时非常关键, 为进一步的研究和调试提供了重要信息 例如, 寄存器数据经过转储后可以显示每个 DS31256 寄存器的设置 为了保证正确地设置器件,

More information

mvc

mvc Build an application Tutor : Michael Pan Application Source codes - - Frameworks Xib files - - Resources - ( ) info.plist - UIKit Framework UIApplication Event status bar, icon... delegation [UIApplication

More information

手册 doc

手册 doc 1. 2. 3. 3.1 3.2 3.3 SD 3.4 3.5 SD 3.6 3.7 4. 4.1 4.2 4.3 SD 4.4 5. 5.1 5.2 5.3 SD 6. 1. 1~3 ( ) 320x240~704x288 66 (2G SD 320x2401FPS ) 32M~2G SD SD SD SD 24V DC 3W( ) -10~70 10~90% 154x44x144mm 2. DVR106

More information

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor 1 4.1.1.1 (Load) 14 1.1 1 4.1.1.2 (Save) 14 1.1.1 1 4.1.2 (Buffer) 16 1.1.2 1 4.1.3 (Device) 16 1.1.3 1 4.1.3.1 (Select Device) 16 2 4.1.3.2 (Device Info) 16 2.1 2 4.1.3.3 (Adapter) 17 2.1.1 CD-ROM 2 4.1.4

More information

RAID RAID 0 RAID 1 RAID 5 RAID * (-1)* (/ 2)* No Yes Yes Yes SATA A. B. BIOS SATA C. RAID BIOS RAID ( ) D. RAID/AHCI ( ) S ATA S S D ( ) (

RAID RAID 0 RAID 1 RAID 5 RAID * (-1)* (/ 2)* No Yes Yes Yes SATA A. B. BIOS SATA C. RAID BIOS RAID ( ) D. RAID/AHCI ( ) S ATA S S D ( ) ( SATA... 2 RAID/AHCI... 16 Intel Optane... 19 Intel Virtual RAID on CPU (Intel VROC)... 21 RAID RAID 0 RAID 1 RAID 5 RAID 10 2 2 3 4 * (-1)* (/ 2)* No Yes Yes Yes SATA A. B. BIOS SATA C. RAID BIOS RAID

More information

附件四:

附件四: 新 办 企 业 纳 税 服 务 手 册 上 海 市 崇 明 县 国 家 税 务 局 上 海 市 地 方 税 务 局 崇 明 分 局 二 一 三 年 一 月 1 使 用 说 明 1 本 手 册 于 纳 税 人 申 请 新 办 税 务 登 记 时 由 税 务 机 关 发 放, 也 可 在 上 海 税 务 网 崇 明 税 务 局 子 网 站 进 行 下 载 和 参 阅 2 如 需 进 一 步 了 解 相

More information

行业

行业 PCI-1762 PCI-1762 1.1...2 1.1.1...2 1.1.2...2 1.1.3...2 1.1.4 PCI...2 1.1.5 ID...2 1.2...3 1.3...3 2.1...3 2.2...3 2.2.1 NC/NO(/)...3 2.2.2...4 2.2.2 ID...5 2.3...5 2.3.1...5 2.3.2...7 2.4...12 2.4.1...12

More information

一个开放源码的嵌入式仿真环境 ― SkyEye

一个开放源码的嵌入式仿真环境 ― SkyEye SkyEye SkyEye http://hpclab.cs.tsinghua.edu.cn/~skyeye/ I hear and I forget, I see and I remember, I do and I understand. SkyEye SkyEye SkyEye SkyEye SkyEye 1. SkyEye PC pervasive computing PC I O PDA

More information

FM1935X智能非接触读写器芯片

FM1935X智能非接触读写器芯片 FM33A0xx MCU 2017. 05 2.0 1 (http://www.fmsh.com/) 2.0 2 ... 3 1... 4 1.1... 4 1.2... 4 1.3... 5 1.3.1... 5 1.3.2... 5 1.4... 8 1.4.1 LQFP100... 8 1.4.2 LQFP80... 9 1.4.3... 9 2... 15 2.1 LQFP100... 15

More information

Microsoft Word - 39.doc

Microsoft Word - 39.doc 摘 基 于 ARM 的 嵌 入 式 无 线 AP 的 设 计 杨 健 陈 永 泰 ( 武 汉 理 工 大 学 信 息 工 程 学 院, 武 汉 430070) 要 : 本 文 首 先 介 绍 了 无 线 AP 的 基 本 原 理, 然 后 重 点 描 述 基 于 AT76C510 的 无 线 AP 的 硬 件 设 计 及 嵌 入 式 系 统 uclinux 最 后 对 IEEE802.11b 的 安

More information

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12 ... 3... 3... 3... 3... 4 1JTAG ICE PC... 4 2JTAG ICE... 4 3... 4 4... 4 5JTAG... 5 6ISP... 5 IDE... 6 1 AVR STUDIO... 6 2 JTAGICE... 6 3JTAGICE... 12 4.... 16 5.... 17 6. JTAG ICE... 19 ISP... 20 1PonyProg2000...

More information

路由器基本配置

路由器基本配置 路由器基本配置 本章内容 路由器的基本操作 实验练习 常用的路由器配置方法 TFTP Console MODEM AUX telnet web 任何 Interface AUX 备份接口, 一般用于路由器的管理备份接口 路由器的操作模式 : 配置模式 1. 线路配置模式 Router(config-line)# 配置路由器的线路参数 2. 路由协议配置模式 Router(config-router)#

More information

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( ) RAID RAID 0 RAID 1 RAID 5 RAID 10 2 2 3 4 * (-1)* (/2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( ) ( ) ( ) Windows USB 1 SATA A. SATASATAIntel SATA (SATA3

More information

Microsoft Word - JTAG电路设计规范.doc

Microsoft Word - JTAG电路设计规范.doc JTAG 电路设计规范 (V1.0) 深圳市金鹏飞科技发展有限公司 第 1 页共 1 页 前 言 本技术设计规范根据国家标准和原邮电部标准以及国际标准 IEEE STD 1149.1 系列标准编制而成 第 2 页共 2 页 1 目的目前, 使用的芯片中越来越多的 CPU EPLD FPGA DSP 以及一些专用芯片 ( 如 ATM 层专用芯片 ) 等提供符合 IEEE 1149.1 的 JTAG 测试口,

More information

F515_CS_Book.book

F515_CS_Book.book /USB , ( ) / L R 1 > > > 2, / 3 L 1 > > > 2 + - 3, 4 L 1 了解显示屏上显示的图标 Wap 信箱收到一条 Wap push 信息 ( ) GSM 手机已连接到 GSM 网络 指示条越多, 接收质量越好 2 ...........................4.............................. 4 Micro SD (

More information

使用MapReduce读取XML文件

使用MapReduce读取XML文件 使用 MapReduce 读取 XML 文件 XML( 可扩展标记语言, 英语 :extensible Markup Language, 简称 : XML) 是一种标记语言, 也是行业标准数据交换交换格式, 它很适合在系统之间进行数据存储和交换 ( 话说 Hadoop H ive 等的配置文件就是 XML 格式的 ) 本文将介绍如何使用 MapReduce 来读取 XML 文件 但是 Had oop

More information

untitled

untitled MODBUS 1 MODBUS...1 1...4 1.1...4 1.2...4 1.3...4 1.4... 2...5 2.1...5 2.2...5 3...6 3.1 OPENSERIAL...6 3.2 CLOSESERIAL...8 3.3 RDMULTIBIT...8 3.4 RDMULTIWORD...9 3.5 WRTONEBIT...11 3.6 WRTONEWORD...12

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

untitled

untitled FBC0409 V1.0 1.0 05.06.22 SIA 2005 SIA SIA SIA SIA SIA 114 86-24-23970133 HTTP://WWW.SIA.CN YANG@SIA.CN 2 ...5...5...6 PIN...6...7 1 CPU...8 2...8 4...8 5 DMA...9 7....9 8...9 9...10 A...10 B...10...11.

More information

AT89C2051中文资料.doc

AT89C2051中文资料.doc 图形点阵液晶显示模块使用手册 TG12864C(L) 广州捷胜吉电子科技 地址 : 广州市天河区天河路 561# 新赛格电子城 B2226 电话 :(020)33550997 13829772038 网址 :WWW.GZJSJDZ.COM E-mail:CJKD@21CN.COM 目 录 ( 一 ) 概述 (1) ( 二 ) 外形尺寸图 (1) ( 三 ) 模块主要硬件构成说明 (2) ( 四 )

More information

网上对外发布资料适用版本

网上对外发布资料适用版本 HDLC-LCM 嵌 入 式 低 功 耗 通 信 模 块 Rev.2016.0602 用 户 手 册 电 话 :400-025-5057 网 址 :www.yacer.cn 目 录 1 概 述... 1 1.1 简 介... 1 1.2 特 点... 1 1.3 应 用... 1 1.4 订 购 信 息... 1 1.5 技 术 规 格... 2 1.6 机 械 尺 寸 图... 3 2 硬 件 结

More information

33 丘 京 南 国 家 统 计 局 统 计 教 育 培 训 中 心 副 主 任 34 白 涛 云 南 昆 明 十 中 高 级 教 师 35 白 先 春 南 京 财 经 大 学 统 计 学 系 教 授 36 吕 珩 河 南 信 息 统 计 职 业 学 院 科 研 处 处 长 / 讲 师 37 吕 小

33 丘 京 南 国 家 统 计 局 统 计 教 育 培 训 中 心 副 主 任 34 白 涛 云 南 昆 明 十 中 高 级 教 师 35 白 先 春 南 京 财 经 大 学 统 计 学 系 教 授 36 吕 珩 河 南 信 息 统 计 职 业 学 院 科 研 处 处 长 / 讲 师 37 吕 小 中 国 统 计 教 育 学 会 第 六 届 理 事 名 单 ( 按 姓 氏 笔 画 排 序 ) 2014 年 8 月 序 号 姓 名 单 位 职 称 / 职 务 1 丁 洁 丽 武 汉 大 学 讲 师 2 于 声 涛 烟 台 职 业 学 院 会 统 系 系 主 任 / 教 授 3 万 国 京 江 西 省 信 息 科 技 学 校 副 校 长 4 万 崇 华 广 东 医 学 院 教 授 5 马 骏 天

More information

关于罗斯福时代新政 宪法革命 的几点浅见 韩 铁 美国宪法的若干重要法理原则及其运用在富兰克林 罗斯福总统任内 发生了巨大变化 史称新政 宪法革命 不过 这种变化并不是在所谓 年最高法院的 及时转向 中一锤定音的 最高法院在正当程序 商业权 公众福利条款上的态度及其变化充分说明 新政宪法革命无论是从当时还是其后的发展来看都有它的连续性 局限性和复杂性 只有认识到了这一点 我们对新政宪法革命乃至于整个新政的历史评价才会比较准确

More information