第 4 章 应用系统设计
560 likes | 774 Views
第 4 章 应用系统设计. 4.1 系统设计概述 4.2 ARM920T 简介 4.3 S3C2410X 处理器详解 4.4 单元电路设计 4.5 存储器系统设计 4.6 JTAG 调试接口设计 4.7 综合训练之通过 JTAG 访问外设. 4.1 系统设计概述. 4.2 ARM920T 简介. ARM920T 是 ARM920TDMI 系列中的一款通用性的微处理器, ARM920TDMI 系列微处理器包含如下几种类型的内核。 ARM9TDMI :只有内核。 ARM940T :由内核、高速缓存和内存保护单元组成。
第 4 章 应用系统设计
E N D
Presentation Transcript
第4章 应用系统设计 4.1 系统设计概述 4.2 ARM920T简介 4.3 S3C2410X处理器详解 4.4 单元电路设计 4.5 存储器系统设计 4.6 JTAG调试接口设计 4.7 综合训练之通过JTAG访问外设
4.2 ARM920T简介 ARM920T是ARM920TDMI系列中的一款通用性的微处理器,ARM920TDMI系列微处理器包含如下几种类型的内核。 ARM9TDMI:只有内核。 ARM940T:由内核、高速缓存和内存保护单元组成。 ARM920T:由内核、高速缓存和内存管理单元(MMU)组成。 4.2.1 ARM920T系统结构分析 4.2.2 ARM920T内核编程模型
ARM920T系统结构分析 ARM9TDMI采用5级流水线,其结构图如图4.2所示,具有分开的指令和数据存储器,5级流水线具体如下。 (1)取指:从存储器中取出指令,并将其放入指令流水线。 (2)译码:对指令进行译码。 (3)执行:把一个操作数移位,产生ALU的结果。 (4)缓冲/数据:如果需要,则访问数据存储器;否则ALU的结果只是简单地缓冲1个时钟周期,以便所有的指令具有同样的流水线流程。 (5)回写:将指令产生的结果回写到寄存器,包括任何从存储器中读取的数据。 ARM9TDMI处理器一个显著的特点是采用指令和数据分离访问的方式,即采用了指令缓存(I-Cache)和数据缓存(D-Cache)。这样可以把指令访问和数据访问单独安排1级流水线。
ARM920T以ARM9TDMI为内核,增加了高速缓存和内存管理单元,系统结构图如图4.3所示。ARM920T以ARM9TDMI为内核,增加了高速缓存和内存管理单元,系统结构图如图4.3所示。
ARM920T内核编程模型 字(Word),在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位。 半字(Half-Word),在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。 字节(Byte),在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。 指令长度可以是32位(在ARM状态下),也可以为16位(在Thumb状态下)。 ARM920T中支持字节(8位)、半字(16位)、字(32位)3种数据类型,其中,字需要4字节对齐,半字需要2字节对齐。 1.ARM微处理器的工作状态 从编程的角度看,ARM920T微处理器的工作状态一般有两种: ARM状态,此时处理器执行32位的、字对齐的ARM指令; Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。 ARM指令集和Thumb指令集均有切换处理器状态的指令,在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。但ARM微处理器在开始执行代码时,应该处于ARM状态。 当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。当操作数寄存器的状态位为0时,执行BX指令可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,将PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
2.ARM体系结构的存储器格式 ARM920T体系结构将存储器看做是从零地址开始的字节的线性组合。从0字节到3字节放置第1个存储的字数据,从第4个字节到第7个字节放置第2个存储的字数据,依次排列。作为32位的微处理器,ARM920T体系结构所支持的最大寻址空间为4GB(232字节)。 ARM920T体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。 大端格式中字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图4.4所示。
3.处理器模式 ARM920T支持7种运行模式,分别为: 用户模式(usr),ARM处理器正常的程序执行状态; 快速中断模式(fiq),用于高速数据传输或通道处理; 外部中断模式(irq),用于通用的中断处理; 管理模式(svc),操作系统使用的保护模式; 数据访问终止模式(abt),当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护; 系统模式(sys),运行具有特权的操作系统任务; 未定义指令中止模式(und),当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。 除用户模式以外,其余的6种模式称为非用户模式或特权模式;其中除去用户模式和系统模式以外的5种又称为异常模式,常用于处理中断或异常,以及访问受保护的系统资源等情况。
4.寄存器组织 ARM920T共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决于微处理器的工作状态及具体的运行模式。 在ARM状态下,任一时刻可以访问16个通用寄存器和1~2个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器,图4.6所示为在每一种运行模式下,可以访问的寄存器。 在ARM状态下有16个直接访问寄存器R0~R15,除R15寄存器外均为通用目的,可用来存储数据或地址值。除此之外,还有第17个寄存器用来存储状态信息。 R14也称为子程序连接寄存器(Subroutine Link Register)或连接寄存器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。在其他情况下,R14用做通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。 寄存器R15用做程序计数器(PC)。在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1]用于保存PC。 寄存器R16用做当前程序状态寄存器(Current Program Status Register,CPSR),CPSR可在任何运行模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。
每一种非用户模式下都有一个专用的物理状态寄存器,称为SPSR(Saved Program Status Register,备份的程序状态寄存器)。当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。 fiq模式下有7个分组寄存器R8_fiq~R14_fiq,在ARM状态下,许多fiq处理都不用保存任何寄存器。usr、fiq、irq、svc、abt、und模式下有两个分组寄存器R13和R14,而每种模式都有一个自己的堆栈指针和连接寄存器.。 Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0)、程序计数器(PC)、堆栈指针(SP)、连接寄存器(LR)和CPSR。同时,在每一种特权模式下都有一组SP、LR和SPSR。图4.7所示表明Thumb状态下的寄存器组织。 Thumb状态下的寄存器组织与ARM状态下的寄存器组织存在如下关系: Thumb状态下和ARM状态下的R0~R7是相同的; Thumb状态下和ARM状态下的CPSR和所有的SPSR是相同的; Thumb状态下的SP对应于ARM状态下的R13; Thumb状态下的LR对应于ARM状态下的R14; Thumb状态下的程序计数器对应于ARM状态下的R15。 以上的对应关系如图4.8所示。 在Thumb状态下,高位寄存器R8~R15并不是标准寄存器集的一部分,但可使用汇编语言程序受限制地访问这些寄存器,将其用做快速的暂存器。使用带特殊变量的MOV指令,数据可以在低位寄存器和高位寄存器之间进行传送;高位寄存器的值可以使用CMP和ADD指令进行比较或加上低位寄存器中的值。
5.程序状态寄存器 ARM920T体系结构中包含一个当前程序状态寄存器(CPSR)和5个备份的程序状态寄存器(SPSR)。备份的程序状态寄存器用来进行异常处理,其功能包括: 保存ALU中的当前操作信息; 控制允许和禁止中断; 设置处理器的运行模式。 程序状态寄存器每一位的安排如图4.9所示。
6.条件码标志(Condition Code Flags) N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。条件码标志各位的具体含义如表4.1所示。
7.控制位 CPSR的低8位(包括I、F、T和M[4:0])称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。 中断禁止位I、F:置1时,禁止IRQ中断和FIQ中断。 T标志位:该位反映处理器的运行状态。当该位为1时,程序运行于Thumb状态,否则运行于ARM状态。该信号反映在外部引脚TBIT上。在程序中不得修改CPSR中的TBIT位,否则处理器工作状态不能确定。 运行模式位M[4:0]:M0、M1、M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如表4.2所示。 保留位:CPSR中的其余位为保留位,当改变CPSR中的条件码标志位或者控制位时,保留位不要被改变,在程序中也不要使用保留位来存储数据。保留位将用于ARM版本的扩展。
8.异常(Exceptions) 当正常的程序执行流程发生暂时的停止时,称之为异常。在处理异常之前,当前处理器的状态必须保留,这样,当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,处理器会按固定的优先级对多个异常进行处理。ARM920T对异常的处理按以下步骤操作: (1)将下一条指令的地址存入相应连接寄存器LR。若异常是从ARM状态进入,LR寄存器中保存的是下一条指令的地址(当前PC+4或PC+8,与异常的类型有关);若异常是从Thumb状态进入,则在LR寄存器中保存当前PC的偏移量。这样,异常处理程序就不需要确定异常是从何种状态进入的,程序在处理异常返回时能从正确的位置重新开始执行。例如:在软件中断异常SWI中,指令 MOV PC,R14_svc总是返回到下一条指令,而不管SWI是在ARM状态执行,还是在Thumb状态执行。 (2)将CPSR复制到相应的SPSR中。 (3)根据异常类型,强制设置CPSR的运行模式位。 (4)强制PC从相应的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 进入异常处理前可以设置中断禁止位,以禁止异常处理时对中断的响应。如果异常发生时,处理器处于Thumb状态,则当异常向量地址加载入PC时,处理器自动切换到ARM状态。异常处理完毕之后,执行以下操作从异常返回: (1)将连接寄存器LR的值减去相应的偏移量后送到PC中。 (2)将SPSR复制回CPSR中。 (3)若在进入异常处理时设置了中断禁止位,要在此清除。
表4.3总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。表4.3总结了进入异常处理时保存在相应R14中的PC值,及在退出异常处理时推荐使用的指令。
应用程序中的异常处理:当系统运行时,异常可能会随时发生。为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。当异常处理完成以后,返回到主程序继续执行。各异常向量地址如表4.4所示。应用程序中的异常处理:当系统运行时,异常可能会随时发生。为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。当异常处理完成以后,返回到主程序继续执行。各异常向量地址如表4.4所示。 当多个异常同时发生时,系统根据固定的优先级决定异常的处理顺序。异常优先级由高到低的排列次序为:复位、数据中止、FIQ、IRQ、预取指令中止、未定义指令、SWI。
4.3 S3C2410X处理器详解 S3C2410X在包含ARM920T核的同时,增加了丰富的外围资源,如图4.10所示。主要片内外围模块包括: 1个LCD控制器,支持STN和TFT液晶显示屏; 外部存储器管理(SDRAM控制器和芯片选择逻辑); 3个通道的UART; 4个通道的DMA,支持存储器和I/O口之间的传输,以猝发模式提高传输率; 4个具有PWM功能的16位定时/计数器和1个16位内部定时器,支持外部时钟源; 8通道的10位ADC,最高速率可达500kB/s,10位分辨率; 触摸屏接口; IIS总线接口; 2个USB主机接口,1个USB设备接口; 2个SPI接口; SD卡接口和MMC卡接口; 16位看门狗定时器; 117位通用I/O口和24位外部中断源; 8通道10位AD控制器; 电源管理。
S3C2410X支持大、小端模式,将存储空间分成8组(Bank),每组大小是128MB,共计1GB。S3C2410X支持大、小端模式,将存储空间分成8组(Bank),每组大小是128MB,共计1GB。
特殊功能寄存器 1.内存控制器(Memory Controller) 内存控制器为访问外部存储空间提供存储器控制信号,共有13个寄存器。
2.Nand Flash 控制器 S3C2410X支持Nand Flash启动,启动代码存储在Nand Flash上。启动时,Nand Flash的前4KB将被装载到内部的固定地址中,利用硬件纠错码ECC对数据的正确性检验,然后开始执行其中的启动代码。一般情况下,该启动代码会把Nand Flash中的内容拷贝到SDRAM中去,拷贝完后,主程序将在SDRAM中执行。操作流程如图4.13所示。
自动引导模式流程: 复位; 如果自动引导模式使能,Nand Flash中的前4KB代码拷贝到内部的小石头区域; 小石头映射到nGCS0; CPU开始执行小石头区域中的代码。 Nand Flash模式: 通过NFCONF寄存器设置Nand Flash配置; 把Nand Flash命令写入NFCMD寄存器; 把Nand Flash地址写入NFADDR寄存器; 读/写数据同时通过NFSTAT寄存器检测Nand Flash状态。读操作前或者程序执行后检查R/nB信号。
3.时钟和电源管理 S3C2410X的主时钟由外部晶振或者外部时钟提供,选择后可以生成3种时钟信号,分别是CPU使用的FCLK,AHB总线使用的HCLK和APB总线使用的PCLK。时钟管理模块同时拥有两个锁相环,一个称为MPLL,用于FCLK、HCLK和PCLK;另一个称为UPLL,用于USB设备。对时钟的选择是通过OM[3:2]实现的。 OM[3:2]=00B时,晶体为MPLL CLK和UPLL CLK提供时钟源; OM[3:2]=01B时,晶体为MPLL CLK提供时钟源,EXTCLK为UPLL CLK提供时钟源; OM[3:2]=10B时,EXTCLK为MPLL CLK提供时钟源,晶体为UPLL CLK提供时钟源; OM[3:2]=11B时,EXTCLK为MPLL CLK和UPLL CLK提供时钟。 (1)锁相环PLL。 锁相环最基本的结构由3个基本的部件组成:鉴相器(PFD)、环路滤波器(Loop Filter)和压控振荡器(VCO),如图4.14所示。鉴相器是个相位比较装置,它把输入信号Fref与压控振荡器输出分频后的信号Fvco的相位进行比较,产生对应于两个信号相位差的误差电压。环路滤波器的作用是滤除误差电压中的高频成分和噪声,以保证环路所要求的性能,增加系统的稳定性。压控振荡器受控制电压的控制,使压控振荡器的频率向输入信号的频率靠拢,直至消除频差而锁定。由此可见,锁相环是个相位误差控制系统。它比较输入信号和压控振荡器输出信号之间的相位差,从而产生误差控制电压来调整压控振荡器的频率,以达到与输入信号同频。
S3C2410X增加了1个转换泵和3个除法器来增加控制。转换泵首先对PFD的输出信号按一定比例转换,然后传递给外部滤波器,最后由外部滤波器驱动压控振荡VCO。除法器P对输入信号Fin分频产生信号Fref,除法器M对压控振荡器输出信号分频产生信号Fvco,分频器S对压控振荡器输出信号分频后生成了MPLL。S3C2410X增加了1个转换泵和3个除法器来增加控制。转换泵首先对PFD的输出信号按一定比例转换,然后传递给外部滤波器,最后由外部滤波器驱动压控振荡VCO。除法器P对输入信号Fin分频产生信号Fref,除法器M对压控振荡器输出信号分频产生信号Fvco,分频器S对压控振荡器输出信号分频后生成了MPLL。 在环路开始工作时,如果Fref与Fvco频率不同,则是由于两信号之间存在固有的频率差,因此它们之间的相位差一直在变化,使得鉴相器PFD输出的误差电压就在一定范围内变化。在这种误差电压的控制下,压控振荡器的频率也在变化。若Fvco的频率能够变化到与Fref相等,那么在满足稳定性条件下就在这个频率上稳定下来。达到稳定后,Fref与Fvco之间的频差为零,相差不再随时间变化,误差电压为一固定值,此时环路进入“锁定”状态。这就是锁相环工作的大致过程。 系统稳定后Fref与Fvco相等,可得输出频率MPLL与输入时钟频率Fin的关系式:
(2)时钟控制逻辑。 时钟控制逻辑决定了所使用的时钟源,是采用MPLL作为FCLK,还是采用外部时钟。复位后,Fin直接传递给FCLK,即使不想改变默认的PLLCON值,也需要重新写一遍。FCLK由ARM920T核使用,HCLK提供给AHB总线,PCLK提供给了APB总线。 S3C2410X支持HCLK、FCLK和PCLK的分频选择,其比率是通过CLKDIV寄存器中的HDIVN和PDIVN控制的,如表4.8所示。
(3)电源管理。 S3C2410X电源管理模块通过4种模式有效地控制功耗: Normal模式:为CPU和所有的外设提供时钟,所有的外设开启时,该模式下的功耗最大。这种模式允许用户通过软件控制外设,可以断开提供给外设的时钟以降低功耗。 Slow模式:采用外部时钟生成FCLK的方式,此时电源的功耗取决于外部时钟。 Idle模式:断开FCLK与CPU核的连接,外设保持正常,该模式下的任何中断都可唤醒CPU。 Power-off模式:断开内部电源,只给内部的唤醒逻辑供电。一般模式下需要两个电源,一个提供给唤醒逻辑,另外一个提供给CPU和内部逻辑,在Power-off模式下,后一个电源关闭。该模式可以通过EINT[15:0]和RTC唤醒。
(4)时钟和电源管理寄存器。 S3C2410X通过控制寄存器实现对时钟和电源的管理,相关寄存器如表4.10所示。
4.4 单元电路设计 尽管硬件选型与单元电路设计部分的内容是基于S3C2410X的系统,但由于ARM体系结构的一致性和常见外围电路的通用性,只要读者能真正理解本部分的设计方法,那么由此设计出基于其他ARM微处理器的系统,应该也是比较容易的。 4.4.1 电源电路设计 4.4.2 晶振电路设计 4.4.3 复位电路设计 4.4.4 串行接口电路设计
晶振电路设计 S3C2410X微处理器的主时钟可以由外部时钟源提供,也可以由外部振荡器提供,如图4.17所示,采用哪种方式通过引脚OM[3:2]来进行选择。 OM[3:2]=00时,MPLL和UPLL的时钟均选择外部振荡器; OM[3:2]=01时,MPLL的时钟选择外部振荡器;UPLL选择外部时钟源; OM[3:2]=10时,MPLL的时钟选择外部时钟源;UPLL选择外部振荡器; OM[3:2]=11时,MPLL和UPLL的时钟均选择外部时钟源。 该系统中选择OM[3:2]均接地的方式,即采用外部振荡器提供系统时钟。外部振荡器由12MHz晶振和2个15pF的微调电容组成。
4.5 存储器系统设计 在该系统中,设计了3种存储器接口电路,Nor Flash接口、Nand Flash接口和SDRAM接口电路。引导程序既可存储在Nor Flash中,也可存储在Nand Flash中。而SDRAM中存储的是执行中的程序和产生的数据。存储在Nor Flash中的程序可直接执行,与在SDRAM执行相比速度较慢。存储在Nand Flash中的程序,需要拷贝到RAM中去执行。 4.5.1 8位存储器接口设计 4.5.2 Flash接口电路设计 4.5.3 SDRAM接口电路设计
8位存储器接口设计 由于ARM微处理器的体系结构支持8位/16位/32位的存储器系统,相应地可以构建8位的存储器系统、16位的存储器系统或32位的存储器系统。32位的存储器系统具有较高的性能,而16位的存储器系统则在成本及功耗方面占有优势,而8位的存储器系统现在已经很少使用。
Flash接口电路设计 1.Nor和Nand Flash的区别 Nor的特点是XIP(eXecute In Place,芯片内执行)特性,这样,应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。Nor的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。Nand结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。 (1)性能比较。 Flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。Nand器件执行擦除操作是十分简单的,而Nor则要求在进行写入前先要将目标块内所有的位都写为0。 Nor的读速度比Nand稍快一些。 Nand的写入速度比Nor快很多。Nand的4ms擦除速度远比Nor的5s快。 Nand的擦除单元更小,相应的擦除电路更少。 (2)容量和成本。 Nand Flash的单元尺寸几乎是Nor器件的一半,由于生产过程更为简单,Nand结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。在Nand闪存中每个块的最大擦写次数是一百万次,而Nor的擦写次数是十万次。 (3)接口差别。 Nor Flash带有SRAM接口,Nand器件使用复杂的I/O口来串行存取数据。
4.6 JTAG调试接口设计 JTAG是Joint Test Action Group(联合测试行动小组)的简称,由于IEEE 1149.1标准是由JTAG这个组织最初提出的,最终由IEEE批准并且标准化的。所以IEEE 1149.1这个标准一般也俗称JTAG调试标准。 4.6.1 JTAG综述 4.6.2 TAP状态机 4.6.3 接口电路设计
JTAG综述 JTAG标准主要用于芯片内部测试及对系统进行仿真、调试。JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(Test Access Port,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对多个器件分别测试。JTAG接口还常用于实现ISP(In-System Programmable,在系统可编程)功能,如对FLASH器件进行编程等。 1.边界扫描 在JTAG调试中,边界扫描(Boundary-Scan)是一个很重要的概念。边界扫描技术的基本思想是在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上,所以被称为边界扫描寄存器(Boundary-Scan Register Cell)。 芯片处于调试状态的时候,这些边界扫描寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入输出信号的观察和控制。如果需要捕获芯片某个管脚上的输出,首先需要把该管脚上的输出装载到边界扫描链的寄存器单元中去,然后通过TDO输出,这样,我们就可以从TDO上得到相应管脚上的输出信号。如果要在芯片的某个管脚上加载一个特定的信号,则首先需要通过TDI把期望的信号移位到与相应管脚相连的边界扫描链的寄存器单元里去,然后将该寄存器单元的值加载到相应的芯片管脚。
2.TAP接口 利用边界扫描链可以实现对芯片的输入输出进行观察和控制,对边界扫描链的控制主要是通过TAP控制器来完成的。在IEEE 1149.1标准中,寄存器被分为两大类:数据寄存器(Data Register,简称DR)和指令寄存器(Instruction Register,简称IR)。边界扫描链属于数据寄存器中很重要的一种。边界扫描链用来实现对芯片的输入输出的观察和控制,而指令寄存器用来实现对数据寄存器的控制。 TAP(Test Access Port)是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器(DR)和指令寄存器(IR)。对整个TAP的控制是通过TAP Controller来完成的。TAP总共包括5个信号接口TCK、TMS、TDI、TDO和TRST,其中前4个是输入信号接口,最后1个是输出信号接口。 TCK:测试时钟(Test Clock Input),为TAP的操作提供了一个独立的、基本的时钟信号,TAP的所有操作都是通过这个时钟信号来驱动的。TCK在IEEE 1149.1标准中是强制要求的。 TMS:测试模式选择(Test Mode Selection Input),用来控制TAP状态机的转换。通过TMS信号,可以控制TAP在不同的状态间相互转换。TMS信号在TCK的上升沿有效。TMS在IEEE 1149.1标准中是强制要求的。 TDI:数据输入(Test Data Input),所有要输入到特定寄存器的数据都是通过TDI接口一位一位串行输入的。TDI在IEEE 1149.1标准中是强制要求的。 TDO:数据输出(Test Data Output),所有要从特定的寄存器中输出的数据都是通过TDO接口一位一位串行输出的。TDO在IEEE 1149.1标准中是强制要求的。 TRST:JTAG复位信号(Test Reset Input),可以用来对TAP Controller进行复位(初始化)。因为通过TMS也可以对TAP Controller进行复位(初始化),所以该信号接口在IEEE 1149.1标准中是可选的,并不是强制要求的。
TAP状态机 TAP的状态机如图4.30所示,总共有16个状态。在这些对应的状态中,标识有DR的状态是用来访问数据寄存器的,而标识有IR的状态是用来访问指令寄存器的。
2.访问步骤 TAP状态的转换就是在TCK的驱动下,依靠TMS来控制完成对指令寄存器和数据寄存器的访问。对指令寄存器的访问先于对数据寄存器的访问,系统上电后,TAP Controller首先进入Test-Logic Reset状态,在TMS的控制下然后依次进入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状态,指令生效,完成对指令寄存器的访问。 当前可以访问的数据寄存器由指令寄存器中的当前指令决定。要访问由上一个指令选定的数据寄存器,需要以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状态,完成对数据寄存器的访问。
4.7 综合训练之通过JTAG访问外设 在保证电源电路、晶振电路和复位电路正常工作的前提下,通过JTAG接口不仅可以调试S3C2410X,还可以实现对外围设备的读写。 4.7.1 烧写Flash 4.7.2 访问处理器寄存器