基于JTAG口对F1aSh的在线编程平台

随着嵌入式技术的发展,在一些高端的掌上设备中,都使用了flash芯片,如compaq的ipaq、联想的天祺系列等产品。但对于研发人员来说,在开发阶段需要大量的程序调试,就意味着要对f1ash进行擦除和改写的工作,因此,如何对f1ash进行在线编程是问题的关键所在。本文介绍一种通过 jtag对flash进行的在线编程方法。
1 jtag简介
jtag(joint test action group)是1985年制定的检测pcb和ic芯片的一个标准,1990年被修改后成为ieee的一个标准,即ieeell49.1-1990。通过这个标准,可对具有jtag口芯片的硬件电路进行边界扫描和故障检测。
具有jtag口的芯片都有如下jtag引脚定义:
tck--测试时钟输入;
tdi--测试
数据输入,数据通过tdi输入jtag口;
tdo--测试数据输出,数据通过tdo从jtag口输出;
tms--测试模式选择,tms用来设置jtag口处于某种特定的测试模式。
可选引脚trst一测试复位,输入引脚,低电平有效。
含有jtag口的芯片种类较多,如cpu、dsp、cpld等。
jtag内部有一个状态机,称为tap控制器。tap控制器的状态机通过tck和tms进行状态的改变,实现数据和指令的输入。图1为tap控制器的状态机框图。
2 jtag芯片的边界扫描寄存器
jtag标准定义了一个串行的移位寄存器。寄存器的每一个单元分配给ic芯片的相应引脚,每一个独立的单元称为bsc(boundary-scan cell)边界扫描单元。这个串联的bsc在ic内部构成jtag回路,所有的bsr(boundary-scan register)边界扫描寄存器通过jtag测试激活,平时这些引脚保持正常的ic功能。图2为具有jtag口的ic内部bsr单元与引脚的关系。
3 jtag在线写fiash的硬件电路设计和与pc的连接方式
以含jtag接口的strongarm salll0为例,flash为intel 28f128j32 16mb容量。salll0的jtag的tck、tdi、tms、tdo分别接pc并口的2、3、4、11线上,通过程序将对jtag口的控制指令和目标代码从pc的并口写入jtag的bsr中。在设计pcb时,必须将sall10的数据线和地址线及控制线与flash的地址线、数据线和控制线相连。因 salll0的数据线、地址线及控制线的引脚上都有其相应bsc,只要用jtag指令将数据、地址及控制信号送到其bsc中,就可通过bsc对应的引脚将信号送给flash,实现对flash的操作。jtag的系统板设计和连线关系如图3所示。
4 通过使用tap状态机的指令实行对fiash的操作
通过tck、tms的设置,可将jtag设置为接收指令或数据状态。jtag常用指令如下:
sample/preload--用此指令采样bsc内容或将数据写入bsc单元;
extest--当执行此指令时,bsc的内容通过引脚送到其连接的相应芯片的引脚,我们就是通过这条指令实现在线写f1ash的;
bypass--此指令将一个一位寄存器置于bsc的移位回路中,即仅有一个一位寄存器处于tdi和tdo之间。
在pcb电路设计好后,即可用程序先将对jtag的控制指令,通过tdi送入jtag控制器的指令寄存器中。再通过tdi将要写flash的地址、数据及控制线信号入bsr中,并将数据锁存到bsc中,用extest指令通过bsc将数据写入flash。
5 软件编程
在线写flash的程序用turbo c编写。程序使用pc的并行口,将程序通过含有jtag的芯片写入flash芯片。程序先对pc的并口初始化,对jtag口复位和测试,并读f1ash,判断是否加锁。如加锁,必须先解锁,方可进行操作。写flash之前,必须对其先擦除。将jtag芯片设置在extest模式,通过pc的并口,将目标文件通过jtag写入flash,
并在烧写完成后进行校验。程序主流程如图4所示。
通过jtag的读芯片id子程序如下
void id_command(void){
putp(1,0,ip);//run-test/idle:使jtag复位
putp(1,0,ip);//run-test/idle
putp(1,0,ip);//run-test/idle
putp(1,0,ip);//run-test/idle
putp(1,1,ip);
putp(1,1,ip); //选择指令寄存器
putp(1,0,ip); //捕获指令寄存器
putp(1,0,ip); //移位指令寄存器
putp(0,0,ip); // salll0 jtag口指令长度5位,
//idcode为01100
putp(1,0,ip);
putp(1,0,ip);
putp(0,0,ip);
putp(0,0,1p);
putp(0,1,ip); // 退出指令寄存器
putp(1,1,ip); // 更新指令寄存器,执行指令寄存器中的
// 指令
putp(1,0,ip); // run-test/idle
putp(1,0,ip); //run-test/idle
putp(1,0,ip); //run-test/idle
putp(1,1,ip);
putp(1,0,ip);
if(check-id(salll0id))
error_out(“failed to read device id for the sa-1110”);
putp(1,1,ip);//退出数据寄存器
putp(1,1,ip);//更新数据寄存器
putp(1,0,ip); // run-test/idle,使jtag复位
putp(1,0,ip);//run-test/idle
putp(1,0,ip); //run-test/idle}
6 电路设计和编程中的注意事项
①f1ash芯片的we、ce、oe等控制线必须与salll0的bsr相连。只有这样,才能通过bsr控制flash的相应引脚。
②jtag口与pc并口的连接线要尽量短,原则上不大于15 cm。
③f1ash在擦写和编程时所需的工作电流较大,在选用系统的供电芯片时,必须加以考虑。
④为提高对flash的编程速度,尽量使tck不低于6 mhz,可在编写烧写flash程序时实现。

TD-SCDMA是什么?
怎样通过PLC来控制伺服系统
RISC-V建设:你想获得的是免费or自由?
直线马达3D打印地震观测井房亮相合肥
接口调试与测试工具postman安装说明与基础功能
基于JTAG口对F1aSh的在线编程平台
什么?苹果山寨华为,三星山寨oppo
国产三极管命名方法(三极管命名方式)
工作学习一本搞定!笔记本电脑性价比推荐
你家扫地机器人智能吗?可能会让你大跌眼镜
DHL与Shopee达成全新合作 助力中国实现跨境业务
智能传感器的原理框图
漏电断路器和空气开关的区别
远东如何“触网”物联,用极致的产品和服务引领产业链发展?
音圈电机在五菱汽车上的应用
支持工控计算机设计的宽温内存iDIMM
虹膜识别技术的发展带动利基型LED市场成长
iphone8什么时候上市?iphone8最新消息:iPhone发布日期临近,但还未确定指纹识别放哪
51单片机定时器模式2与波特率的应用
EtherCAT 转 CClinkIE 协议网关与三菱CClinkIE通讯方法