logo资料库

JTag下载程序原理.pdf

第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
资料共32页,剩余部分请下载后查看
版本记录
1 概述
2 Nand Flash知识
2.1 总览
2.1.1 存储结构
2.1.2 寻址
2.1.3 管脚
2.1.4 支持的命令
2.1.5 操作时序
2.2 实际读写源码
2.2.1 读操作过程
2.2.2 写操作过程
2.2.3 注意事项
3 JTAG协议
3.1 概览
3.1.1 边界扫描
3.1.2 测试访问端口(TAP)
3.1.3 TAP控制器
3.1.4 指令寄存器、指令以及数据寄存器
3.1.5 边界扫描链及BSDL文件
3.2 相关源码分析
4 并口
4.1 历史
4.2 管脚和寄存器介绍
4.2.1 数据寄存器
4.2.2 状态寄存器
4.2.3 控制寄存器
4.2.4 一些重要说明
4.2.5 EPP模式的信号定义
4.3 虚拟机上的并口安装
4.3.1 原生并口
4.3.2 PCI转并口
4.3.3 注意事项
4.4 Linux下对并口的编程
4.4.1 Linux下如何访问IO端口
4.4.2 Jflash源码中并口操作部分分析
4.5 JTAG与并口的硬件连接
5 Window下的JTAG开发
5.1 如何获取IO端口控制权
5.2 IO端口的操作API
5.3 关于并口的端口号
6 关于源码的说明
7 开发中碰到的问题及解决方案
7.1 检测不到并口
7.2 检测不到CPU和Flash
7.3 上面两项都ok,但是烧写不正常
7.4 读取Flash时出错
7.5 不同平台下Jflash程序的并口传输速度
8 参考文献
9 附录
10 联系方式
ARM+JTAG 作者:施金前 ARM+JTAG ver – 0.0.1 作者:施金前 修订者:施金前 2009-5-25 2009-05-25 开源社区,你我共享 第 1 页 / 共 32 页
ARM+JTAG 作者:施金前 版本记录 日期 2009-05-24 修订版本 描述 0.0.1 初稿 作者 施金前 2009-05-25 开源社区,你我共享 第 2 页 / 共 32 页
ARM+JTAG 作者:施金前 目录 2.1 2.2 3 3.2 4.1 4.2 版本记录.............................................................................................................................................................................2 目录 ....................................................................................................................................................................................3 1 概述.............................................................................................................................................................................5 2 Nand Flash知识 ..........................................................................................................................................................5 总览.............................................................................................................................................................5 2.1.1 存储结构.............................................................................................................................................5 2.1.2 寻址.....................................................................................................................................................5 2.1.3 管脚.....................................................................................................................................................6 2.1.4 支持的命令.........................................................................................................................................7 2.1.5 操作时序.............................................................................................................................................8 实际读写源码.............................................................................................................................................9 2.2.1 读操作过程.........................................................................................................................................9 2.2.2 写操作过程.......................................................................................................................................10 2.2.3 注意事项...........................................................................................................................................11 JTAG协议 .................................................................................................................................................................12 概览...........................................................................................................................................................12 3.1 3.1.1 边界扫描...........................................................................................................................................12 3.1.2 测试访问端口(TAP).........................................................................................................................13 3.1.3 TAP控制器 .......................................................................................................................................14 3.1.4 指令寄存器、指令以及数据寄存器...............................................................................................16 3.1.5 边界扫描链及BSDL文件.................................................................................................................18 相关源码分析...........................................................................................................................................19 4 并口...........................................................................................................................................................................20 历史...........................................................................................................................................................20 管脚和寄存器介绍...................................................................................................................................20 4.2.1 数据寄存器.......................................................................................................................................21 4.2.2 状态寄存器.......................................................................................................................................21 4.2.3 控制寄存器.......................................................................................................................................22 4.2.4 一些重要说明...................................................................................................................................22 4.2.5 EPP模式的信号定义........................................................................................................................23 虚拟机上的并口安装...............................................................................................................................23 4.3.1 原生并口...........................................................................................................................................23 4.3.2 PCI转并口.........................................................................................................................................24 4.3.3 注意事项...........................................................................................................................................24 Linux下对并口的编程 .............................................................................................................................25 Linux下如何访问IO端口 .................................................................................................................25 Jflash源码中并口操作部分分析......................................................................................................26 JTAG与并口的硬件连接 .........................................................................................................................27 5 Window下的JTAG开发 ...........................................................................................................................................28 如何获取IO端口控制权...........................................................................................................................28 IO端口的操作API ....................................................................................................................................28 关于并口的端口号...................................................................................................................................29 6 关于源码的说明.......................................................................................................................................................29 7 开发中碰到的问题及解决方案...............................................................................................................................30 检测不到并口...........................................................................................................................................30 检测不到CPU和Flash ..............................................................................................................................30 上面两项都ok,但是烧写不正常...........................................................................................................30 读取Flash时出错 ......................................................................................................................................31 不同平台下Jflash程序的并口传输速度..................................................................................................31 8 参考文献...................................................................................................................................................................31 9 附录...........................................................................................................................................................................31 7.1 7.2 7.3 7.4 7.5 4.4.1 4.4.2 4.5 5.1 5.2 5.3 4.3 4.4 2009-05-25 开源社区,你我共享 第 3 页 / 共 32 页
ARM+JTAG 作者:施金前 10 联系方式...........................................................................................................................................................32 2009-05-25 开源社区,你我共享 第 4 页 / 共 32 页
ARM+JTAG 作者:施金前 1 概述 本文主要结合 Jflash 的源码讨论如何利用 JTAG 下载二进制文件到 ARM 的原理。为了实现这个功能,我们 需要用到并口、JTAG、Nand Flash 以及 ARM 的一些调试架构,下面各章将分述之。我的想法是:每一章讨论 上面的一个问题并对 Jflash 源码中相关的部分进行说明。 Jflash 是 Linux 平台上用来烧写程序到 ARM 平台的一个工具,它涉及到很多底层硬件,如欲烧写的开发板 的硬件配置,其如下: CPU:S3C2440; Nand Flash:K9F1208,64M; 无 Nor Flash; JTAG 接口采用 Sdt 接口。 2 Nand Flash知识 我们的最终目的是将指定的二进制文件下载到 Nand Flash 上,所以本章先讨论 Nand Flash 的操作。 S3C2440 处理器集成了 8 位 NandFlash 控制器。目前市场上常见的 8 位 NandFlash 有三星公司的 K9F1208、 k9f1g08、k9f2g08 等。k9f1208、k9f1g08、k9f2g08 的数据页大小分别为 512Byte、2kByte、2kByte。它们在寻 址方式上有一定差异,所以程序代码并不通用。本章结合 S3C2440 与 K9F1208,讨论 NandFlash 的读写方法。 2.1 总览 2.1.1 存储结构 NAND Flash 的数据以 bit 的方式保存在 memory cell。一般来说,一个 cell 中只能存储一个 bit。这些 cell 以 8 个或者 16 个为单位,连成 bit line,形成所谓的 byte(x8)/word(x16),这就是 NAND Device 的位宽。这些 Line 会再组成 Page,而 Page 再组成 Block。目前 Nand Flash 的 Page 有几种大小,下面以 K9F1208 进行说明。 对于 K9F1208,每页 528Byte,其中 16Byte 用于标识该页的一些信息,称为 Spare Area。每 32 个 page 形 成一个 Block,即: 1 Block = 32 page = 32 * 528 Byte = 32 * (512Byte + 16Byte),可存储 16K 的内容。 K9F1208 可存储 64M Byte 的内容(不包含 Spare Area)。 64M Byte = 4K Block = 128K page Nand flash 以页为单位读写数据,而以块为单位擦除数据。按照这样的组织方式可以形成所谓的三类地址: -- Block Address -- Page Address -- Column Address 2.1.2 寻址 对于 K9F1208 来讲,地址和命令只能在 I/O[7:0]上传递,数据宽度是 8 位。 512byte 需要 9bit 来表示,对于 528byte 系列的 NAND,这 512byte 被分成 1st half 和 2nd half,各自的访问 由地址指针命令来选择,A[7:0]就是所谓的 column address。32 个 page 需要 5bit 来表示,占用 A[13:9],即该 page 在块内的相对地址。Block 的地址是由 A14 以上的 bit 来表示,例如 512Mb 的 NAND,共 4096block, 2009-05-25 开源社区,你我共享 第 5 页 / 共 32 页
ARM+JTAG 作者:施金前 因此,需要 12 个 bit 来表示,即 A[25:14],如果是 1Gbit 的 528byte/page 的 NAND Flash,则 block address 用 A[26:24]表示。而 page address 就是 blcok address | page address in block。NAND Flash 的地址表示为: Block Address | Page Address in block | halfpage pointer | Column Address 地址传送顺序是 Column Address,Page Address,Block Address。 由于地址只能在 I/O[7:0]上传递,因此,必须采用移位的方式进行。 例如,对于 512Mbit x8 的 NAND flash,地址范围是 0~0x3FF_FFFF,只要是这个范围内的数值表示的地址都是有效的。以 NAND_ADDR 为例: 第 1 步是传递 column address,就是 NAND_ADDR[7:0],不需移位即可传递到 I/O[7:0]上,而 halfpage pointer 即 bit8 是由操作指令决定的,即指令决定在哪个 halfpage 上进行读写。而真正的 bit8 的值是 don't care 的; 第 2 步就是将 NAND_ADDR 右移 9 位,将 NAND_ADDR[16:9]传到 I/O[7:0]上; 第 3 步将 NAND_ADDR[24:17]放到 I/O 上; 第 4 步需要将 NAND_ADDR[25]放到 I/O 上。 因此,整个地址传递过程需要 4 步才能完成,即 4-step addressing。 如果 NAND Flash 的容量是 256Mbit 以 下,那么,block adress 最高位只到 bit24,因此寻址只需要 3 步。 下面,就 16 位 的 NAND flash 器件稍微进行一下说明。 由于一个 page 的 main area 的容量为 256word, 仍相当于 512byte。但是,这个时候没有所谓 的 1st halfpage 和 2nd halfpage 之分了,所以,bit8 就变得没有意 义了,也就是这个时候 bit8 完全不用管,地址传递仍然和 8 位 器件相同。除了,这一点之外,x16 的 NAND 使用方法和 x8 的使用方法完全相同。 2.1.3 管脚 表 2.1 K9F1208 的管脚定义 管脚 功能 I/O0- I/O7 数据输入/输出口。用于输入命令、地址和数据,并在 read 操作中输出数据。当 芯片被取消片选货输出非能时,这些管脚为高阻状态。 CLE 命令锁存使能,输入口。当为高电平时,命令在/WE 信号的上升沿由 IO 口锁 入命令寄存器 ALE 地址锁存使能,输入口。当为高电平时,地址在/WE 信号的上升沿锁入地址寄 存器 /CE /RE /WE 片选,输入口。当设备处于 忙 状态时,/CE 的高电平将被忽略,设备在 编程 或 擦除 操作时不会翻好 standby 模式。 读使能,输入口。当其使能时,数据将被送至 I/O 总线上。在/RE 下降沿过后 tREA 时间后,输出数据才是有效的。该下降沿也将给内部列地址加一。 写使能,输入口。命令、地址及数据在该信号的上升沿有效。 2009-05-25 开源社区,你我共享 第 6 页 / 共 32 页
ARM+JTAG 作者:施金前 写保护,输入口。当/WP 有效时,内部电压产生器将被复位。 就绪/忙状态,输出口。该信号表明设备操作的状态。当为低电平时,表明 编 程、擦除或任意读操作在进行中,当这些操作结束时,该信号将返回高电平。 该管脚为开漏输出,且芯片被取消选中或输出非能时不会进入高阻态。 输出缓冲电压,以供给给输出缓冲。该管脚内部连接到 Vcc。 设备电源供给。 地 /WP RnB Vccq Vcc Vss 2.1.4 支持的命令 不同的 Flash 支持不同的命令,所以一般这部分代码的可移植性都不够强。K9F1208 支持的指令如下: 表 2.2 K9F1208 支持的指令集 注意: 1. 00h 命令表示后续传入地址的起始地址在 1st half,也就是从该 page 的 00 地址开始; 01h 命令表示后续传入地址的起始地址在 2 nd half,也就是从该 page 的 256 地址开始; 50h 命令表示后续传入地址的起始地址在 3 nd half,也就是读取该 page 的 Spare Area 区域; 通过 01h 命令指定访问 2nd half 后,下一个周期状态指针将自动移动到 1st half。也就是说:01h 命令的 有效期只有当前周期。 2. 90h 命令用于获取 Nand Flash 的 ID 号; 3. FFh 命令用于重启 Nand Flash; 4. 80h 命令用于启动 编程,开始根据传入的地址写 Flash,10h 命令提示 编程 命令的结束; 5. 60h 命令用于启动 擦除,开始根据传入的 Block 地址擦除一个 Block 的内容,D0 命令提示 擦除 命令 的结束; 2009-05-25 开源社区,你我共享 第 7 页 / 共 32 页
ARM+JTAG 作者:施金前 6. 70h 命令用于获取前一个命令操作的结果; 7. Page Program(True) and Copy-Back Program(True) are available on 1 plane operation. Page Program(Dummy) and Copy-Back Program(Dummy) are available on the 2nd,3rd,4th plane of multi plane operation. 8. The 71h command should be used for read status of Multi Plane operation. 9. Multi plane operation and Copy-Back Program are not supported with 1.8V device. Caution : Any undefined command inputs are prohibited except for above command set of Table 1. 2.1.5 操作时序 下表列出了 K9F1208 支持的所有最底层操作的电平时序。读者可在后面的读写源码中对比这些时序。 表 2.3 K9F1208 支持的所有最底层操作的电平时序 以发送 ReadID 命令为例,其时序图如下。 1)拉低/CE 以选通芯片;而后拉高 CLE,拉低/WE,同时输入 ReadID 命令(0x90),之后在/WE 的上升沿 将 ReadID 写入命令寄存器; 2)拉高 ALE,拉低/WE,同时送入地址 0x00, 之后在/WE 的上升沿该地址将被锁存; 3)拉低/RE,延时 tREA 后开始通过 IO 口读取数据; 4)根据读取的 ID 的大小重复步骤 3,直至读取结束。 2009-05-25 开源社区,你我共享 第 8 页 / 共 32 页
分享到:
收藏