专利名称:一种基于片上闪存的系统芯片jtag调试控制方法
技术领域:
本发明涉及系统芯片领域,尤其是一种系统芯片JTAG调试控制方法。
背景技术:
系统芯片(SOC,System on Chip)是指在单个芯片上集成一个完整的系统。这一 设计技术始于20世纪90年代中期。随着半导体工艺技术的快速发展,IC (Integrated Circuit,集成电路)设计者能够将越来越复杂的功能集成到单个硅片上,出现了集成电路 (IC)向集成系统(IS,Integrate System)转变的趋势,SOC就是在这一转变下产生的。随 着深亚微米工艺技术日益成熟,集成电路芯片的规模越来越大。数字IC从基于时序驱动 的设计方法,发展到基于IP (Intellectual Property,知识产权)核复用的设计方法,这一 设计方法在SOC中得到广泛的应用。SOC能够充分的利用现有的设计积累,极大的提高了 ASIC (Application Specified Integrated Circuit,专用集成电路)的设计能力,因此发 展十分的迅速,并成为集成电路发展的必然趋势。JTAG 是 Joint Test Action Group(联合测试行为组织)的简称。IEEE 1149.1 标 准就是由JTAG这个组织最初提出的,最终由IEEE批准并且标准化的。所以,IEEE 1149.1 这个标准一般也俗称JTAG调试标准。JTAG接口主要用于芯片的调试,还可以用于实现ISP (In-System Programmable,在线编程),对FLASH (闪存)等器件进行编程。在JTAG调试当中,边界扫描是一个很重要的概念。边界扫描技术的基本思想是 在靠近芯片的输入输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布 在芯片的边界上,所以被称为边界扫描寄存器。当芯片处于调试状态的时候,这些边界扫描 寄存器可以将芯片和外围的输入输出隔离开来。通过这些边界扫描寄存器单元,就可以观 察和控制芯片上的输入和输出信号。对于芯片的输入管脚,可以通过与之相连的边界扫描 寄存器单元把信号(数据)加载倒该管脚中去;对于芯片的输出管脚,也可以通过与之相连 的边界扫描寄存器获取该管脚上的输出信号。在正常的运行状态下,这些边界扫描寄存器 对芯片来说是透明的,所以正常的运行不会受到任何影响。这样,边界扫描寄存器提供了一 个便捷的方式用以观测和控制所需要调试的芯片,任意的读取和修改芯片内的寄存器以及 数据成为可能。另外,芯片输入输出管脚上的边界扫描寄存器单元可以相互连接起来,在芯 片的周围形成一个边界扫描链。边界扫描链可以串行的输入和输出,通过相应的时钟信号 和控制信号,就可以方便的观察和控制处在调试状态下的芯片。JTAG通过TAP (Test Access Port,测试访问口)来实现对边界扫描链的控制。在 IEEE 1149. 1标准里面,将寄存器分为两大类数据寄存器(DR)和指令寄存器(IR)。边界 扫描链属于数据寄存器中很重要的一种,用来实现对芯片的输入输出的观察和控制,数据 寄存器还包括器件标识寄存器和旁路寄存器。而指令寄存器用来实现对数据寄存器的控 制,例如可以为边界扫描链指定一个访问对象。TAP是一个通用的端口,通过TAP可以访问芯片提供的所有数据寄存器和指令 寄存器。对整个TAP的控制是通过TAP Controller (TAP控制器)来完成的。标准的TAP接口是四线TMS (Test Mode Selection hput,测试模式选择输入)、TCK (Test Clock Input,测试时钟输入)、TDI (Test Data Input,测试数据输入)、TDO (Test Data Output, 测试数据输出)。还有一根可选引脚TRST(Test Reset hput,测试复位输入)。这些引脚 的定义为TCK为TAP的操作提供一个独立的,基本的时钟信号,TAP的一切操作都要通过这 个时钟来驱动;TDI为测试数据输入,所有要输入到特定寄存器的数据都要通过TDI接口来 一位一位的串行输入,这个输入也有TCK来驱动;TDO为测试数据输出,所有要从特定寄存 器读取的数据都通过TDO—位一位串行的输出,这个过程需要通过TCK驱动;TMS为测试模 式选择,用来控制TAP状态机的转换,通过这一信号可以控制TAP在不同状态之间转换,从 而根据用户要求完成不同操作,该信号在TCK上升沿有效;TRST为测试复位线,通过这一信 号可以对TAP状态机复位。通过TAP对数据寄存器进行访问的一般过程如下首先,通过指令寄存器,选择一 个需要访问的数据寄存器;其次,将选定的数据寄存器连接到TDI和TDO上,即将数据寄存 器绑定到扫描链路上;最后,在TCK的驱动下,经过TDI,将需要的数据输入到指定的数据寄 存器,同时通过TD0,将指定的数据寄存器中的数据输出。TAP状态机如附图1所示,总共有16个状态,通过TMS来控制这些状态之间的转 换,从而达到对数据寄存器的输入和读取。JTAG测试系统的正常操作过程是向指令寄存器 送入指令,然后通过数据寄存器进行测试。测试指令指出了下一个要进行的测试以及测试 需要使用的数据寄存器。指令分为公开和私有,已经定义的标准指定了一个兼容器件必须 支持的最小公开指令集。而私有指令主要用于片上的专用测试,标准并没有做出具体的规 定。JTAG的边界扫描结构如图2所示。BSC (Boundary Scan Cell)为边界扫描单元, 能够截取各个输入输出管脚的数据。数据寄存器的三个重要部分如下器件标识寄存器能 够读出固定在芯片内部的标识码;旁路寄存器将TDI延迟一个时钟连接到TD0,使得测试台 可以快速的访问下一个器件(在多个器件串行连接的情况下);边界扫描寄存器能够截取芯 片核心逻辑与输入输出管脚之间的所有信号。一个支持JTAG调试的CPU,只要时钟TCK正常,就可以通过JTAG接口访问CPU的 内部寄存器和挂在CPU总线上的设备,如RAM (Random Access Memory,随机存取存储器) 等存储设备以及UART,TIMER, GPIO等通用IP和特定芯片的专用IP。这就为系统芯片的调 试提供了极为便利的条件。但是随之而来也产生了新的问题。由于通过JTAG接口可以读 取和修改芯片内部存储设备的数据和IP的寄存器,这就使得那些对信息安全有特殊要求 的芯片面临数据泄露和被篡改的危险。片上闪存具有非易失性的特点,在断电后能够保存数据。同时由于其位于芯片内 部,在芯片封装完成后,通过JTAG接口可以读写片上闪存,但通过其它的方式则很难读取和 改变片上闪存的数据。需要说明的是,在理论上,JTAG接口可以访问CPU总线上的任何设备, 所以应该能够写片上闪存,但闪存的写入方式与RAM不大相同,写的时序根据不同的闪存而 不同,因此需要一个特定的接口 IP将片上闪存与总线相连,实现指定闪存的写入功能。
发明内容
为了克服已有的系统芯片JTAG调试控制方法的存在数据安全隐患、安全性较差的不足,本发明提供一种在方便调试的同时保障数据安全、提升安全性的基于片上闪存的 系统芯片JTAG调试控制方法。本发明解决其技术问题所采用的技术方案是
一种基于片上闪存的系统芯片JTAG调试控制方法,所述JTAG通过TAP实现对边界扫 描链的控制,所述TAP接口包括TCK接口、TMS接口、TDI接口、TDO接口和TRST接口,所述 TCK接口、TMS接口和TDI接口分别通过一个二选一的数据选择器来控制,数据选择器的两 个输入分别为正常信号和固定的低电平或高电平,再通过系统芯片内的一个位宽为一位的 寄存器REGl来控制数据选择器,当寄存器REGl的值为一时,将低电平信号连接到TCK接 口、TMS接口和TDI接口上,屏蔽JTAG接口 ;而寄存器REGl的值为零时,将正常信号连接到 TCK接口、TMS接口和TDI接口上,进入正常的调试模式;
设置两个关键值为KEYl和KEY2,以及选定片上闪存中存放关键词的地址ADDR ; 所述系统芯片JTAG调试控制方法包括以下步骤
(1)、启动程序,从零地址开始取指,即进入ROM段;
(2)、从片上闪存的ADDR地址读取32位数据VALUE,并将VALUE与关键值KEYl进行比
较
如果VALUE与KEYl相等,则将REGl写成一,此时JTAG接口被屏蔽,并跳转到程序的起 始地址;
如果VALUE与KEYl不相等,则将REGl写成零,此时JTAG接口能够正常的工作,顺利进 入调试模式;
(3)继续将VALUE与KEY2进行比较
如果VALUE与KEY2相等,则直接跳转到程序的起始地址。如果VALUE月KEY2不相等, 则跳转到一段循环指令。作为优选的一种方案所述TRST接口也通过一个二选一的数据选择器来控制,当 寄存器REGl的值为一时,将高电平信号接到TRST接口上;当寄存器REGl的值为零时,将正 常信号接到TRST接口上。进一步,所述寄存器REGl支持读和写。所述两个关键值KEYl和KEY2选用除了 OxfffTfTfT外的数值。所述两个关键值 KEYl和KEY2的地址与程序段的地址位于片上闪存的不同位置。本发明的技术构思为为了能够顺利的进入JTAG调试以及调试完成后能够安全 有效的屏蔽JTAG接口,本发明对JTAG的四根输入引脚TCK,TMS, TDI,TRST进行控制(如果 对应的JTAG接口没有TRST,也可只对其它三根控制)。由前文论述可知,这四根引脚对JTAG 调试起至关重要的作用,当这四根输入引脚能够正常输入时,JTAG工作在调试模式下,可以 去调试芯片。当TCK,TMS和TDI为固定的低电平,TRST为固定的高电平时,由于没有TCK 驱动,同时模式选择的TMS也为低电平,TAP状态机不能正常跳转,JTAG调试功能被屏蔽, 不能再去读取和修改芯片内部的数据。TRST被固定为高电平是因为TRST为低电平时,会 使JTAG接口复位,故将其接为高电平(没有这跟引脚也不影响最终的结果)。以下过程认为 JTAG为具有五线的接口,即JTAG接口包含TRST线。四根输入引脚分别通过一个二选一的数据选择器来控制。数据选择器的两个输入 分别为正常信号和固定的低电平或高电平。再通过芯片内的一个位宽为一位的寄存器REGl来控制数据选择器,当REGl的值为一时,将低电平信号连接到JTAG接口的TCK,TMS, TDI 上,并将高电平信号街道JTAG接口的TRST上,屏蔽JTAG接口;而REGl的值为零时,将正常 信号连接到JTAG接口的TCK,TMS, TDI和TRST上,进入正常的调试模式。考虑到片上闪存 的特性,我们将根据片上闪存的数据来决定REGl的值,从而达到对JTAG调试的控制。需要 注意的是,REGl不应该用全局复位信号去复位,即REGl只支持读和写,不支持任何形式的 复位。整个控制过程的核心是一段固化在芯片上的ROM程序,通过这段ROM程序可以根 据片上闪存的一个特殊地址的内容来使JTAG接口正常工作或者屏蔽JTAG接口。首先应该 决定两个32位的关键值,这两个关键值是判断当前需求的依据。由于片上闪存在出厂后一 般是擦除后的状态,即所有数据位都为一,所以选定的两个关键值应该避开Oxffffffff。记 这两个选定的关键值为KEYl和KEY2。其次应该选定一个存放关键值的地址。如果程序也 是存放在片上闪存上,那么应该注意不要让存放的程序段和存放关键值的地址冲突。记选 定的这个地址为ADDR。这段ROM程序起始地址位于芯片内地址空间的零地址。程序启动后会从零地址 开始取指,即会进入ROM段。ROM段固化的程序将完成以下一些操作首先,从片上闪存的 ADDR地址读取32位数据VALUE,并将VALUE与KEYl进行比较。如果VALUE与KEYl相等, 则将REGl写成一,此时JTAG接口被屏蔽,并跳转到程序的起始地址(一般为片上或者片外 存储器的基地址)。如果VALUE与KEYl不相等,则将REGl写成零,此时JTAG接口能够正常 的工作,顺利进入调试模式,并继续将VALUE与KEY2进行比较。如果VALUE与KEY2相等, 则直接跳转到程序的起始地址。如果VALUE月KEY2不相等,则跳转到一段循环指令。根据上面的分析,这段ROM程序会产生三个不同的状态屏蔽JTAG,跳转到程序起 始段;开启JTAG,跳转到程序起始段;开启JTAG,跳转到一段循环指令。这三种状态的作用 如下
(1)芯片调试前,片上闪存处于擦除的状态,所有的数据位都为一。复位后,位于零地址 的ROM程序从片上闪存ADDR地址读回的32位数据为Oxffffffff,与KEYl和KEY2都不相 等。ROM程序段将会开启JTAG,此时由于程序还没有装载到存储器中,不能直接跳到程序的 起始地址(否则CPU取到无法识别的指令),只能跳到一段循环指令,以确保能够顺利的进入 调试模式。进入JTAG调试模式后,将需要调试的程序载入存储器中相应的地址空间。并通 过JTAG接口将片上闪存的ADDR地址写成KEY2的值。(2)再次复位启动后,ROM程序段再次从片上闪存ADDR地址读取数据,这时读回的 数据为等于KEY2,JTAG正常的工作,由于程序已经下载完毕,可以直接跳到程序的起始地 址。这时可以正常的运行程序,监测程序运行的状态,并根据需要可以反复的修改和重新载 入程序。直到程序完全运行正确,并希望永久的屏蔽JTAG接口,以防止非法的读取和修改 芯片内的数据,这时通过JTAG接口将片上闪存的ADD地址写成KEYl的值。(3)由于片上闪存能够在断电后保存数据,以后的每一次复位重新启动后,ROM程 序段从片上闪存的ADDR地址读取的数据都等于KEYl的值,JTAG被屏蔽,无法再通过JTAG 接口去读取和修改芯片内的数据,也无法再去修改片上闪存的ADDR地址的数据,从而达到 了保护芯片内数据安全的作用。综上所述,本发明能够通过片上闪存安全有效的对系统芯片的JTAG调试进行控制,从而达到保护芯片数据安全的目的。本发明的有益效果主要表现在在方便调试的同时保障数据安全、提升安全性。
图1是TAP状态机的示意图。图2是JTAG的边界扫描结构图。
3AMBA(Advanced Microcontroller Bus Architecture, MW^W 制器总线架构)2. 0结构的简单片上系统的示意图。图4是CPU的JTAG接口的具体连接方法的示意图。图5是ROM程序的流程图。
具体实施例方式下面结合附图对本发明作进一步描述。参照图3 图5,一种基于片上闪存的系统芯片JTAG调试控制方法,所述JTAG通 过TAP实现对边界扫描链的控制,所述TAP接口包括TCK接口、TMS接口、TDI接口、TDO接 口和TRST接口,所述TCK接口、TMS接口和TDI接口分别通过一个二选一的数据选择器来 控制,数据选择器的两个输入分别为正常信号和固定的低电平或高电平,再通过系统芯片 内的一个位宽为一位的寄存器REGl来控制数据选择器,当寄存器REGl的值为一时,将低电 平信号连接到TCK接口、TMS接口和TDI接口上,屏蔽JTAG接口 ;而寄存器REGl的值为零 时,将正常信号连接到TCK接口、TMS接口和TDI接口上,进入正常的调试模式;
设置两个关键值为KEYl和KEY2,以及选定片上闪存中存放关键词的地址ADDR ; 所述系统芯片JTAG调试控制方法包括以下步骤 (1 )、启动程序,从零地址开始取指,即进入ROM段;
(2)、从片上闪存的ADDR地址读取32位数据VALUE,并将VALUE与关键值KEYl进行比
较
如果VALUE与KEYl相等,则将REGl写成一,此时JTAG接口被屏蔽,并跳转到程序的起 始地址;
如果VALUE与KEYl不相等,则将REGl写成零,此时JTAG接口能够正常的工作,顺利进 入调试模式;
(3)继续将VALUE与KEY2进行比较
如果VALUE与KEY2相等,则直接跳转到程序的起始地址。如果VALUE月KEY2不相等, 则跳转到一段循环指令。所述TRST接口也通过一个二选一的数据选择器来控制,当寄存器REGl的值为一 时,将高电平信号接到TRST接口上;当寄存器REGl的值为零时,将正常信号接到TRST接口 上。所述寄存器REGl支持读和写,不支持任何形式的复位。所述两个关键值KEYl和KEY2选用除了 Oxffffffff外的数值。所述两个关键值 KEYl和KEY2的地址与程序段的地址位于片上闪存的不同位置。
3W AMBA(Advanced Microcontroller Bus Architecture, ^MW控制器总线架构)2.0结构的简单片上系统。CPU是一颗支持JTAG调试的RISC (Reduced Instruction Set Computer,精简指令集计算机)微处理器。eFlash为片上闪存,采用4片 大小为128K的片上闪存并联,可以进行按word (字,即32位)访问,地址空间为0x80000 到 Oxfffffc。eFlash Controller (片上闪存控制器)为片上闪存与 AMBA AHB(Advanced High-performance Bus,高性能总线)的接口,这个接口能够将AHB总线信号转换为对应的 闪存控制信号,从而实现对闪存的读,写,擦操作。也正是有了这个接口,使得通过JTAG对 片上闪存在线编程成为可能。图4给出了 CPU的JTAG接口的具体连接方法,四个二选一的数据选择器来控制 JTAG接口的四个输入TMS,TCK, TDI, TRST0数据选择器一的两个输入分别为片上系统的 输入引脚TMS_IN和固定的低电平;数据选择器二的两个输入分别为片上系统的输入引脚 TCK_IN和固定的低电平;数据选择器三的两个输入分别为片上系统的输入引脚TDI_IN和 固定的低电平;数据选择器四的两个输入分别为片上系统输入引脚TRST_IN和固定的高电 平。四个数据选择的控制信号都为JTAG_0FF。这个控制信号来自eFlash Controller中的 一个寄存器REGl,并与REGl的值保持一致。这个REGl只有读写功能,不会随系统的复位 而复位。当控制信号JTAG_0FF为高电平时,固定的低电平和固定的高电平分别被选中,任 何的调试控制信息都无法传递给TAP,也就是说JTAG调试被完全屏蔽;当JTAG_0FF为低电 平时,来自片上系统的输入引脚被选中,可以通过这四根输入将需要的数据传入TAP,从而 JTAG调试能够正常的进行。选定两个关键值KEY1,KEY2分别为0x20101234和0x19876789 (关键值可任意选 取,注意不要选择Oxffffffff,原因见前文论述),存放关键值的地址ADDR为OxffffOc (可 在片上闪存地址空间范围内任意选取一个地址,注意不要与存储在片上闪存的数据相冲 突,而且按照word读取,地址应对齐)。为了能够根据片上闪存某个地址的值来改变寄存器REGl的值,需要固化一段ROM 程序,并将这段ROM程序作为整个芯片的启动程序。ROM程序的流程如附图5所示。首先 检测eFlash Controller是否是空闲的(只有在空闲状态,才能通过eFlash Controller 对片上闪存发起读操作)。非空闲则等待,空闲则从OxffffOc读取一个32位的数据,记为 VALUE。再将VALUE与0x20101234进行比较,相等则直接跳到程序起始地址。不相等则将 eFlash Controller中的寄存器REGl置成0,即将JTAG_0FF置成低电平,并继续将VALUE 与0x19876789进行比较。若两者相等,则跳到程序起始段;若两者不相等,则跳到一段位于 ROM程序的循环指令。芯片开始调试前,复位后从ROM程序段启动。从OxffffOc处读回的32位数据为 Oxffffffff (闪存初始状态为擦除状态),与KEY1,KEY2都不相等,ROM程序将REGl写0。 JTAG_0FF为低电平,JTAG能够正常工作,并跳到一段位与ROM程序的循环指令。此时可以 通过JTAG来装载需要调试的程序。程序装载完成后,再将OxfTfTOc写成0x19876789。复 位再启动后,从OxffffOc处读回来的值为0x19876789,与KEY2相等,ROM程序将REGl写0。 JTAG_0FF为低电平,JTAG能够正常工作,并跳到程序的起始段。此时可以通过JTAG来运行 程序,并可重复装载,反复调试。等到程序调试完全完成,再将OxfTfTOc写成0x20121234。 再次复位重启后,从OxffffOc读回的数据与KEYl相等,ROM程序将REGl写1。此时JTAG_ OFF为高电平,屏蔽JTAG接口,并直接跳到程序起始地址,开始运行程序。此时,不能再通过JTAG接口来截取或者修改程序,也不能再去写OxffffOc这个地址。闪存能够在断电后 保存OxffffOc处的数据,同时REGl不会被复位,从而JTAG被屏蔽的状态能够永久的保存。
权利要求
1.一种基于片上闪存的系统芯片JTAG调试控制方法,所述JTAG通过TAP实现对边界 扫描链的控制,所述TAP接口包括TCK接口、TMS接口、TDI接口、TDO接口和TRST接口,其 特征在于所述TCK接口、TMS接口和TDI接口分别通过一个二选一的数据选择器来控制, 数据选择器的两个输入分别为正常信号和固定的低电平或高电平,再通过系统芯片内的一 个位宽为一位的寄存器REGl来控制数据选择器,当寄存器REGl的值为一时,将低电平信号 连接到TCK接口、TMS接口和TDI接口上,屏蔽JTAG接口 ;而寄存器REGl的值为零时,将正 常信号连接到TCK接口、TMS接口和TDI接口上,进入正常的调试模式;设置两个关键值为KEYl和KEY2,以及选定片上闪存中存放关键词的地址ADDR ;所述系统芯片JTAG调试控制方法包括以下步骤(1 )、启动程序,从零地址开始取指,即进入ROM段;(2)、从片上闪存的ADDR地址读取32位数据VALUE,并将VALUE与关键值KEYl进行比较如果VALUE与KEYl相等,则将REGl写成一,此时JTAG接口被屏蔽,并跳转到程序的起 始地址;如果VALUE与KEYl不相等,则将REGl写成零,此时JTAG接口能够正常的工作,顺利进 入调试模式;(3)继续将VALUE与KEY2进行比较如果VALUE与KEY2相等,则直接跳转到程序的起始地址。
2.如果VALUE月KEY2不相等,则跳转到一段循环指令。
3.如权利要求1所述的一种基于片上闪存的系统芯片JTAG调试控制方法,其特征在 于所述TRST接口也通过一个二选一的数据选择器来控制,当寄存器REGl的值为一时,将 高电平信号接到TRST接口上;当寄存器REGl的值为零时,将正常信号接到TRST接口上。
4.如权利要求1或2所述的一种基于片上闪存的系统芯片JTAG调试控制方法,其特征 在于所述寄存器REGl支持读和写。
5.如权利要求1或2所述的一种基于片上闪存的系统芯片JTAG调试控制方法,其特征 在于所述两个关键值KEYl和KEY2选用除了 OxfffTfTfT外的数值。
6.如权利要求4所述的一种基于片上闪存的系统芯片JTAG调试控制方法,其特征在 于所述两个关键值KEYl和KEY2的地址与程序段的地址位于片上闪存的不同位置。
全文摘要
一种基于片上闪存的系统芯片JTAG调试控制方法,所述JTAG通过TAP实现对边界扫描链的控制,所述TCK接口、TMS接口和TDI接口分别通过一个二选一的数据选择器来控制,数据选择器的两个输入分别为正常信号和固定的低电平或高电平,再通过系统芯片内的一个位宽为一位的寄存器REG1来控制数据选择器,当寄存器REG1的值为一时,将低电平信号连接到TCK接口、TMS接口和TDI接口上,屏蔽JTAG接口;而寄存器REG1的值为零时,将正常信号连接到TCK接口、TMS接口和TDI接口上,进入正常的调试模式;根据片上闪存的数据决定寄存器REG1的值。本发明在方便调试的同时保障数据安全、提升安全性。
文档编号G01R31/3185GK102073009SQ20101056170
公开日2011年5月25日 申请日期2010年11月29日 优先权日2010年11月29日
发明者严晓浪, 曾健林, 葛海通, 黄凯 申请人:杭州中天微系统有限公司