|
楼主 |
发表于 2005-8-24 20:01:00
|
显示全部楼层
5 软件编程
<P>在线写Flash的程序用Turbo C编写。程序使用PC的并行口,将程序通过含有JTAG的芯片写入Flash芯片。程序先对PC的并口初始化,对JTAG口复位和测试,并读Flash,判断是否加锁。如加锁,必须先解锁,方可进行操作。写Flash之前,必须对其先擦除。将JTAG芯片设置在EXTEST模式,通过PC的并口,将目标文件通过JTAG写入Flash,并在烧写完成后进行校验。程序主流程如图4所示。</P>
<P>通过JTAG的读芯片ID子程序如下:</P>
<P>void id_command(void){</P>
<P>putp(1,0,IP); //Run-Test/Idle;使JTAG复位</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,1,IP);</P>
<P>putp(1,1,IP); //选择指令寄存器</P>
<P>putp(1,0,IP); //捕获指令寄存器</P>
<P>putp(1,0,IP); /移位指令寄存器</P>
<P>putp(0,0,IP); //SA1110JTAG口指令长度5位,IDCODE为01100</P>
<P>putp(1,0,IP);</P>
<P>putp(1,0,IP);</P>
<P>putp(0,0,IP);</P>
<P>putp(0,0,IP);</P>
<P>putp(0,1,IP); //退出指令寄存器</P>
<P>putp(1,1,IP); //更新指令寄存器,执行指令寄存器中的指令</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,1,IP);</P>
<P>putp(1,0,IP);</P>
<P>if(check_id(SA1110ID))</P>
<P>error_out("failed to read device ID for the SA-1110");</P>
<P>putp(1,1,IP); //退出数据寄存器</P>
<P>putp(1,1,IP); //更新数据寄存器</P>
<P>putp(1,0,IP); //Run-Test/Idle,使JTAG复位</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>putp(1,0,IP); //Run-Test/Idle</P>
<P>}</P>
<P>6 电路设计和编程中的注意事项</P>
<P>①Flash芯片的WE、CE、OE等控制线必须与SA1110的BSR相连。只有这样,才能通过BSR控制Flash的相应引脚。</P>
<P>②JTAG口与PC并口的连接线要尽量短,原则上不大于15cm。</P>
<P>③Flash在擦写和编程时所需的工作电流较大,在选用系统的供电芯片时,必须加以考虑。</P>
<P>④为提高对Flash的编程速度,尽量使TCK不低于6MHz,可编写烧写Flash程序时实现。
<IMG src="http://www.embeder.com/bbs/style/snow/image/attachment.gif" border=0>本主题包含附件: <IMG src="http://www.embeder.com/bbs/image/fileicon/gif.gif" border=0><a href="http://www.embeder.com/bbs/upload/sf_200542113127.gif" target="_blank" >sf_200542113127.gif</A> (27171bytes)
<a href="http://www.embeder.com/bbs/upload/sf_200542113127.gif" target="_blank" ><IMG src="http://www.embeder.com/bbs/upload/sf_200542113127.gif" border=0></A>
</P> |
|