在linux下使用S3C44B0X Jtag工具的方法
在linux下使用S3C44B0X Jtag工具的方法
下载源代码:(这是个.tar.gz文件,但这个地方似乎不能上传这个后缀名的文件.
下载之后用命令tar xzvf jtag_please_extract_with_gzip.wma解压)
http://linuxipy.bokee.com/inc/jtag_please_extract_with_gzip.wma
描述:
基于openwince中的jtag子项目(http://openwince.sourceforge.net/jtag/)
加入对新的JTAG器件和JTAG cable的支持。在原有的基础上,加入了对s3c44b0x的
支持,加入了对所谓的cfly.org JTAG cable的支持。(为何www.cfly.org打不开?)
openwince中的jtag项目有很多好的特性:
1. 九分好的程序结构加上合理的目录结构:方便扩展JTAG cable和JTAG-aware device。
之所以不说十分好,是我发现其Flash探测部分还不够好,程序使用一个统一的函数探测flash,
而最好的方式应该像linux的pci或usb子系统那样,把probe()做为驱动的一部分。
2. 支持脚本。
3. 支持对Flash的烧写。
4. 提供了一个bsdl文件的解析器,只要IC厂商提供bsdl文件,就能自动生成对应的配置文件。
使用方法:
看INSTALL和README。下面有个在我的44b0x上使用时的屏幕输出.(/**/之间为注释)
编译采用基本步骤:解压, make,
可执行文件生成在/src目录中,运行时必须在此目录中运行,否则找不到/data目录。
jtag> script jtaginit.rc /* jtaginit.rc是一个初始化的脚本 */
Initializing Cfly JTAG Cable on parallel port at 0x378
IR length: 4
Chain length: 1
Device Id: 00011111000011110000111100001111
Manufacturer: Samsung
Part: S3C44B0X
Stepping: V1
Filename: ../data/samsung/s3c44b0x/s3c44b0x
11011000011110110110111111111111111111101101101101101101101101101101101111101101 10110110110110110110110110110110110110110110101010101010101101010101010101000000 00000010001010101100111000010000110101011010101001010101011101011111111110100101 11111110111110111
No. Manufacturer Part Stepping Instruction Register
-------------------------------------------------------------------------------- -------------
0 Samsung S3C44B0X V1 SAMPLE/PRELOAD BSR
*0: Samsung S3C44B0X compatible bus driver via BSR (JTAG part No. 0)
jtag> script erasechip.rc /* 擦除整个Flash, Flash芯片为SST39VF1601 */
jtag> peek 0x00 /* 读地址0x0处的值, 可见擦除后为0 */
bus_read(0x00000000) = 0x0000FFFF (65535)
jtag> peek 0x02 /* s3c44b0x的A1接到Flash的A0, 所以第2个单元的地址为0x2 */
bus_read(0x00000002) = 0x0000FFFF (65535)
jtag> script wordprogram.rc /* 执行word program命令 */
jtag> poke 0x00 0x1245 /* 在0x0处写0x1245 */
jtag> script wordprogram.rc /* 单字写入时,每次写入之前都必须执行word program命令 */
jtag> poke 0x02 0xac3e /* 在0x2处写0xac3e */
jtag> peek 0x00
bus_read(0x00000000) = 0x00001245 (4677) /* 看看是否写入了正确的值。BINGO! */
jtag> peek 0x02
bus_read(0x00000002) = 0x0000AC3E (44094)
jtag>
继续开发:
可惜这个sourceforge上的项目很久没有进展了,程序也基本没什么文档。
doc/source_comment.txt是我写的一点点。
//////////////////////////////////////////////////////////////////////////////////////////////////
//-- Nov 30, 2005更新, 增加对SST39VF1601 Flash的支持,可将bin文件写入flash
jtag> detectflash 0x0
jedec_detect: mid bf, did 234b
Query identification string:
Primary Algorithm Command Set and Control Interface ID Code: 0x00BF (SST Standard Command Set)
Alternate Algorithm Command Set and Control Interface ID Code: 0x0000 (null)
Query system interface information:
Vcc Logic Supply Minimum Write/Erase or Write voltage: 0 mV
Vcc Logic Supply Maximum Write/Erase or Write voltage: 0 mV
Vpp [Programming] Supply Minimum Write/Erase voltage: 0 mV
Vpp [Programming] Supply Maximum Write/Erase voltage: 0 mV
Typical timeout per single byte/word program: 0 us
Typical timeout for maximum-size multi-byte program: 0 us
Typical timeout per individual block erase: 0 ms
Typical timeout for full chip erase: 0 ms
Maximum timeout for byte/word program: 0 us
Maximum timeout for multi-byte program: 0 us
Maximum timeout per individual block erase: 0 ms
Maximum timeout for chip erase: 0 ms
Device geometry definition:
Device Size: 2097152 B (2048 KiB, 2 MiB)
Flash Device Interface Code description: 0x0001 (x16)
Maximum number of bytes in multi-byte program: 0
Number of Erase Block Regions within device: 1
Erase Block Region Information:
Region 0:
Erase Block Size: 4096 B (4 KiB)
Number of Erase Blocks: 512
jtag> flashmem 0x0 hello.bin /*将hello.bin写入Flash地址0x0开始的空间*/
sst_flash_autodetect8...bus_width: 2..
sst_flash_autodetect16...bus_width: 2..
Chip: SST Flash
Manufacturer: SST
Chip: SST39VF1601
Protected: 0000
program:
flash_unlock_block 0x00000000 IGNORE
block 0 unlocked
sst_flash_erase_block 0x00000000
.flash_erase_block 0x00000000 DONE
erasing block 0: 0
flash_unlock_block 0x00001000 IGNORE
block 1 unlocked
sst_flash_erase_block 0x00001000
.flash_erase_block 0x00001000 DONE
erasing block 1: 0
flash_unlock_block 0x00002000 IGNORE
block 2 unlocked
sst_flash_erase_block 0x00002000
.flash_erase_block 0x00002000 DONE
erasing block 2: 0
flash_unlock_block 0x00003000 IGNORE
block 3 unlocked
sst_flash_erase_block 0x00003000
.flash_erase_block 0x00003000 DONE
erasing block 3: 0
flash_unlock_block 0x00004000 IGNORE
block 4 unlocked
sst_flash_erase_block 0x00004000
.flash_erase_block 0x00004000 DONE
erasing block 4: 0
flash_unlock_block 0x00005000 IGNORE
block 5 unlocked
sst_flash_erase_block 0x00005000
flash_erase_block 0x00005000 DONE
erasing block 5: 0
flash_unlock_block 0x00006000 IGNORE
block 6 unlocked
sst_flash_erase_block 0x00006000
.flash_erase_block 0x00006000 DONE
erasing block 6: 0
addr: 0x00006348 (done)
verify:
addr: 0x00006346
Done.