JTAG口及其对Flash的在线编程
G控制器的指令寄存器中。再通过TDI将要写Flash的地址、数据及控制线信号入BSR中,并将数据锁存到BSC中,用EXTEST指令通过BSC将写入Flash。

5 软件编程
本文链接地址:http://www.oyaya.net/fanwen/view/140565.html

5 软件编程
在线写Flash的程序用Turbo C编写。程序使用PC的并行口,将程序通过含有JTAG的芯片写入Flash芯片。程序先对PC的并口初始化,对JTAG口复位和测试,并读Flash,判断是否加锁。如加锁,必须先解锁,方可进行操作。写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); //SA1110JTAG口指令长度5位,IDCODE为01100
putp(1,0,IP);
putp(1,0,IP);
putp(0,0,IP);
putp(0,0,IP);
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(SA1110ID))
error_out("failed to read device ID for the SA-1110");
putp(1,1,IP); //退出数据寄存器
putp(1,1,IP); //更新数据寄存器
putp(1,0,IP);
《JTAG口及其对Flash的在线编程(第2页)》