wallyqin的个人空间 https://blog.eetop.cn/148101 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

jtag tools 软件

已有 4059 次阅读| 2008-3-17 17:12 |个人分类:闲言碎语

 

asmcos 发表于: 2007-1-17 11:04 来源: AKA信息技术

http://openwince.sourceforge.net/jtag/

Linux上的jtag软件,可以支持PXA 25x的并口烧写flash

最新回复

asmcos at 2007-1-17 11:06:41
原理图 PDF格式

WIGGLER原理图.rar
(2007-01-17 11:06:41, Size: 17.7 KB, Downloads: 68)

asmcos at 2007-1-17 11:07:04
PCB

wiggler-PCB.rar
(2007-01-17 11:07:04, Size: 122 KB, Downloads: 41)

asmcos at 2007-2-03 10:30:05
asmcos at 2007-4-08 10:52:39
Amine嵌入式系统 -> Amine -> [BLOG]学习嵌入式Linux on PXA270  登录 -> 注册 -> 回复主题 -> 发表主题




amine 2007-01-26 00:34
最近指导学生, 需要应用Linux到嵌入式系统, 需要好好学习一下
其实, 学习Linux早有此意, 从1995开始下载安装包, 其间又购买了许多光盘,
安装了数次, 但很少使用, 更别说深入学习, 10年过去了, 始发愤, 犹悔迟.

对嵌入式Linux应用, 吾为新手, 在此的笔记多为幼蒙之作, 望大家多指点

在学习时, 我都先定一主题, 如此的"Linux", 围绕该主题收集相关的资料,
并集中在一起, 一段落后, 刻光盘录之.

我虽初学Linux, 但有其他方面的知识积累, 加之涉及的知识庞杂,
实不宜按步顺序阅读学习. 拟采用问题驱动学习法,重在解惑, 并注重实际的应用操作.
所以后面的帖子可能以问题为题.

2007-02-03
准备进行时, 发现嵌入式Linux的学习和底层硬件平台关系密切,
直接进入Linux的应用和驱动的开发总觉得不是太踏实,
这也许和长期嵌入式系统开发的习惯相关, 原来的开发多是从底层开始,
多关注底层的细节: CPU原理, 内存配置, 外围芯片原理, 开发环境的建立, bootloader的编写, 操作系统的选择, 中间件的利用, 驱动设计, 最后应用
看来Linux的学习和这些细节也相关联, 而个人认为这些细节才是"嵌入式"的精髓
所以修改了帖子题目, 添加PXA270硬件平台限制

2007-02-12
这几天全钉着JTAG使劲了, 试了很多电路和软件, 没有突破, 郁闷得紧


amine 2007-01-26 00:36
做嵌入式Linux, 存在交叉开发环境中主机平台的选择, 一般选择Linux, 也可用Windows(使用cygwin或一些专业环境XDtools, Wind River的Workbench等).

准备使用Linux主机平台, 选择标准参考wrLinux的要求(参考Workbench-Tech-Note的P17):
Workbench 2.6 Host OS Support
Red Hat Enterprise Linux 3, update 6, Red Hat Enterprise Linux 4, update 3
Solaris 8, Solaris 9
SUSE Desktop Linux 9.3, SUSE Desktop Linux 10
Windows 2000 Professional with Service Pack 4, Windows XP

我选择了RedHat Linux(应用较广), 取得了Red Hat Enterprise Linux 4, AS, update 4(5CD). 德国版本SUSE也不错.
Red Hat Enterprise Linux[RHEL] 4分为3个版本(http://www.redhat-club.com/product/index.htm)
AS: 是 Red Hat Enterprise Linux 家族内最强的版本,并是主要的作业系统和企业架构方案。
ES: 为初级至中级的服务器系统供应核心操作系统及网络基础设施。
WS: 适合所有桌面部署,也包括了办公室软件,软件制作环境及一些 ISV 客户程式。
当然对于嵌入式开发主机, 这些版本没什么区别.

RedHat Linux FC6(2.6.18内核)中FC表示Fedora Core, 该版本为自由发行版本, 可免费使用, 主要面向桌面系统. 而Red Hat Enterprise Linux是需要购买的, Red Hat Enterprise Linux 4 AS版大约8000元.

Red Hat在出到9.0(Red hat9比较老,内核是2.4)后就宣布不在开发后续版本了(2003年年末),并将其下的Linux系统分为了两部分,一部分是Enterprise(企业)版本,由Red Hat公司进行维护并提供支持,另一部分是FC系列,虽然也是Red Hat公司的产品,但由社区提供服务和支持的, FC提供了最新的软件包,它的版本更新周期非常短,仅六个月。

适用于服务器的版本是Red Hat Enterprise Linux,而由于这是个收费的操作系统。于是,国内外许多企业或空间商选择CentOS。CentOS可以算是RHEL的克隆版(RHEL AS 4.0的重建版本),但它最大的好处是免费!目前有较多服务器采用的CentOS 3.4。


太阳能 2007-01-26 10:14
呵呵,插个队。

老大,我们的想法真是不谋而合啊。我也是刚刚买了本嵌入式linux的书籍,准备等5208告落一段就开始学习。总得感觉嵌入式linux也许会是潮流吧。。。汗,为了生计:P

可是工作总是那样的杂事繁多,不知道是否能坚持下来。。。你的笔记,对我可真是及时雨呀!


PS:Red Hat Enterprise Linux 4, AS, update 4(5CD). 是下载的还是买的?可否有下载地址?  


amine 2007-02-03 21:45
QUOTE:
引用第2楼太阳能于2007-01-26 10:14发表的“”:
PS:Red Hat Enterprise Linux 4, AS, update 4(5CD). 是下载的还是买的?可否有下载地址?
.......

08.21.06.Redhat.Enterprise.Linux.AS.V4.0.UPDATE.4-HOTiSO


amine 2007-02-04 13:48
by amine@263.net on 2007.02.04

博创PXA270平台提供的JTAG是什么电路? 是否兼容Wiggler? 是否通用于ARM7?
    实验平台使用博创UP-TECHPXA270 A型教学科研平台. 平台附带的JTAG头可和JflashMM配合烧录BLOB启动程序.
为了探究BLOB, 想通过JTAG调试底层程序, 就和ARM7,ARM9以及其他通常嵌入式硬件平台的调试方式类似.我测试了多种软件, 包括原Intel JflashMM, 都不能连接硬板, 则怀疑博创的JTAG有特别之处, 或者Xscale[PXA270]本身就要求与普通ARM不同的JTAG头.
到博创论坛求教, 未果, 真乃民族高科技, 对直接用户也如此保密, 叹!. 殊不知, 这些底层细节和技术才是关键, 才是嵌入式教学的重点, 而不是在一个现成的Linux平台上作类似主机的编码. 这样的教学科研平台和其名不甚相符, 再叹!
再到网上搜索求助, 巨量的信息夹杂着各家平台的广告, 对我的疑惑都没有直接的帮助, 看来只能自力更生
  
查看博创硬板原理图, 发现硬板上14针JTAG接口的管脚定义是和通常的Wiggler兼容的:
VCC-1,13, GND-2,4,6,8,10,14, nTRST-3, TDI-5, TMS-7, TCK-9, TDO-11, nRESET-12.
于是将原用于S3C44B0X的一个Wiggler头和博创硬板连接, 再测试了多种主机软件, 仍不能连接硬板, 迷惑更甚.
无奈之下, 只有测量JTAG头实际电路, 以明白其工作原理. 用了一天多时间, 边测量边画出了博创JTAG头和Wiggler的电路原理图. 比较两种原理图, 以及twentyone 的HJTAG和sendtoyou的调试代理的提示, 明白了博创JTAG头的原理.
博创JTAG头采用的是SDT标准. 和Wiggler相比, 基本原理是相同的, 都是用74HC244作信号传递的电平变化, 限流电阻都为100, 上拉电阻都用2.2K. 而和Wiggle主要区别在于PC并口管脚定义, 以及一些小的区别: nTRST的传递方式, 信号是否上拉等.
SDT(左)和Wiggler(右)的信号比较如下:
  PC2   tck     PC4
  PC3   tms     PC3
  PC4   ntrst   PC2
  PC8   tdi     PC5
  PC13 tdo   PC11
  明白这些, 再用博创JTAG头连接S3C44B0X硬板, HJTAG中选择SDT, 可以识别ARM7TMDI核标示. 可以认为, 博创JTAG头可用于ARM7调试, 并未因Xscale和PXA270而特别.
  
  在这个过程中我收集了不少JTAG电路图和相关文档. 后面若有时间可深入学习, 主要针对如下问题和方向:
  JTAG的内部工作原理?
  在CPLD和FPGA中使用的JTAG是否原理类似?
  简单的Wiggler类JTAG的速度问题, 主要受PC并口电平变化的速度限制, 可使用CPLD辅助信号逻辑, 或使用USB接口, 或支持以太网的CPU辅助信号逻辑. 三种方式各有优缺点: CPLD方式可广泛兼容现有的JTAG软件, 但速度提升可能有限; USB和以太网可极大提升速度, 但支持软件是问题, 且实现较复杂, CPU方式复杂度最高. 综合比较下, USB方式应该是较好的选择.
  JTAG和ISP的关系? ISP也使用JTAG类似信号线, 是否ISP是JTAG的子集, 利用其串行时序, 仅用于单片机(如AT89C5X)Flash烧录, 而不支持程序在线调试. 在网上见”可用ISP配合FLASHPGMCR烧写片内片外存储”, 不知FLASHPGMCR是否指Macraigor Systems的软件, 需要测试.
  JTAG和BDM的关系?
  BSDL描述文件和IBIS模型的应用?


amine 2007-02-04 22:17
by amine@263.net on 2007.02.04

博创PXA270平台附带的JTAG头可和什么软件配合使用以完成调试和烧录?
使用Intel下载的JflashMM不能连接JTAG?
博创JflashMM使用的Giveio和Intel的也不相同?
Intel的Jflashmm基于Windows, 而博创提供的Jflash Linux版从何而来?
Jflash显示信息中的Mainstone是什么?
JflashMM是否可指定地址烧录?
JflashMM是否可指定地址下载到RAM中, 并启动运行, 若修改代码添加上述功能是否简单可行?

  博创平台提供JFlashMM配合JTAG头来完成BLOB的烧录. JflashMM有Windows版和Linux版.
  为了找到一个支持博创JTAG头调试的工具, 测试了多种软件, 都未成功. 从JflashMM运行信息得知其出自Intel公司(信息行后的说明是后来慢慢明白的):
D:\Linux\JFlash_MM>jflashmm bc16 –I /*bc16.dat为CPU信息和配置文件, -I选项用于识别CPU和Flash类型*/
JFLASH Version 5.01.007         /*版本号, 5.01.007为最新版, 2004.2发布*/
COPYRIGHT (C) 2000 - 2003 Intel Corporation
PLATFORM. SELECTION:
Processor=         PXA27x     /*CPU类型, bc16.dat中确定*/
Development System=   Mainstone /*硬板类型, bc16.dat中确定, Mainstone为Intel开发板, 有I,II,III*/
Data Version=       1.00.001   /*bc16.dat数据文件版本*/
PXA27x revision C5   /*CPU的小版本标识[Stepping Labels], 4位标识从CPU读取, 在bc16.dat找对应的串名*/
Found flash type: 28F128J3A   /*该型号由Flash_18_1_2.dat确定, 而文件名由硬板Flash芯片反馈信息确定*/
error, can not open binary input file /*上面的命令行未写入要烧录的内容文件*/

  如果未连接硬板而运行JflashMM会出现如下信息, 表示从JTAG获得的CPU ID和数据文件中不一致:
error, failed to read device ID check cables and power
ACT: 1111 1111111111111111 11111111111 1   /*从JTAG读取的实际(Actual)的CPU ID*/
EXP: **** 1001001001100101 00000001001 1 /*数据文件中期望(Expect)的CPU ID*/
  CPU ID的前4位为小版本标识, CPU类型判别时只比较后28位(EXP中的”****”则表示该意), 若ACT和EXP不同, 则出现上面的提示信息.

  为了确定JTAG头的类型, 我从Intel网上下载了JflashMM, 安装完成后在安装目录下有JflashMM和Giveio源代码包. 使用安装的JflashMM配合博创JTAG连接硬板不成功. 由此可见, 博创对JflashMM的源代码作了修改以适应自己的JTAG头.另外, 博创使用的Giveio也和Intel的不同, 好像为国人所作.
  
  Giveio为Windows下的并口驱动程序, 要操作连接并口的JTAG头须经由它来完成. 博创JflashMM所带的Giveio为国人sendtoyou所作, 安装和卸载驱动比原Giveio更为方便. Sendtoyou的Giveio可从网上下载:
  http://www.armjtag.com/jtag.htm
  Giveio是sendtoyou发布的调试代理软件的一部分, 该调试代理支持一些ARM9/ARM7CPU和SDT, ADS调试, 类似twentyone 的HJTAG. Sendtoyou发布网站还提供配合使用的SDT和Wiggler两种JTAG头的电路原理图. 虽我没测试过该调试代理, 但相信可成为ARM调试的另一个选择. 我后面修改的JflashMM也使用sendtoyou的Giveio, 没有深入学习, 还不明白Giveio的工作原理.

  到Intel网站下载JflashMM时, 发现一个专用于Xscale的IDE环境:
  Intel C++ Software Development Tool Suite - v2.0.1 Xscale
  下载了一个评估版, 从其ReleaseNote知道, 它支持两种JTAG头: 
  Intel JTAG Cable和Macraigor OCDemon Raven ARM 20 JTAG interface

  而从JflashMM的ReleaseNote也知它也支持两种JTAG头:
  Insight IJC-1 connector and IJC-2 cable 和Intel JTAG cable

  也就是说, C++ SDTS和JflashMM都支持Intel JTAG cable, 但不知道Intel JTAG cable的构成, 网上也有人询问该JTAG Cable的电路图, 不过无人回答. 所以我希望通过研究JflashMM的代码能确定Intel JTAG cable的工作原理, 并能修改代码以支持SDT和Wiggler JTAG.

原JflashMM是在VC6下完成的, 而我是采用Visual Stdio 2005来编译JflashMM源代码.
睡觉了, 先写到这儿, 待续……


amine 2007-02-08 00:53
LART的JFlash-我查到的最早版本
LART是一个基于SA1100的一个开发平台
LART对Linux在Intel CPU嵌入式系统中的应用有很大的影响, 如BLOB就来自LART
2000.07 面向SA1100, steve修改以支持Linux.
这个版本和Intel的Jflash有一些函数类似, 但不能两个版本的渊源.

Intel的JFlash-主要面向Xscale系列.
xxxx.xx SA1110JFlashKit_V12 , 不确定是否为intel的产品
2002.08 JFlash_DBPXA2xx_V2_09_001_Kit用于DBPXA250和DBPXA210开发平台.
2002.12 JFlash_DBPXA26x_V2_10_002_Kit用于DBPXA261和DBPXA262开发平台.
      其中标志文件为cotullajtag.h, 为Cotulla边界扫描链定义管脚, Cotulla为PXA25X的内核代号
2003.03 JFlash_MM_V5_01_003_Kit, 开始改为MM(Multi Mode)版, 面向多个平台(可能是MM的本意).
其中有一个标志文件xjd.cpp, 为Debug handler.
2004.01 JFlash_MM_V5_01_006_Kit
2004.04 JFlash_MM_V5_01_007, Intel的最终版, 不会再有更新, 因为Intel已将相关产业出售.

亿道[emdoor]
基于Intel的JFlash_MM_V5_01_007, 修改以适应自己的JTAG和支持Linux, 补不足之处
JFlash_Xsbase255, JFlash_Xsbase270.

SECJTAG FLASH(SJF)- Sumsung的类似软件, 有时也称为JFlash, 但和Intel的没有关系,
2003.09 Sjf2440-rev01

从执行文件大小, 个人推测, 博创所用的为亿道的版本, 作了适应JTAG头的调整


amine 2007-02-12 18:37
使用2004.04的Intel JFlash_MM_V5_01_007
原JflashMM是在VC6下完成的, 而我是采用Visual Stdio 2005来编译JflashMM源代码.直接转换原工程使用.

在不动原来的源代码, 编译出现两问题, 需要修改:
  @建议引用安全库函数的警告[deprecation warnings]:
      在jflash.cpp的开始处添加”#define _CRT_SECURE_NO_DEPRECATE”, 可禁止该警告
  @Jflash.cpp的1674行和1725行的lj变量定义错:
      从for语句中移出, 放到for语句前一行定义
  
添加新JTAG头类型(SDT和WIG):
@添加两个新类型
  修改Jflash.h的CABLE_TYPES
  Jflash.cpp的297行处, 添加新类型的参数支持
  修改Jflash.cpp中putp(), 添加两新类型的端口操作实现(见后面)
@修改Global_Variables.h中CableType初值和Jflash.cpp的Cable_Type[4]初值确定缺省使用的类型
  CableType初值: 命令行参数少于6个时起作用
  Cable_Type[4]初值: 命令行参数大于等于6个时起作用
  其他参数的使用也需要注意, 最好用批处理文件写全格式命令.
@修改Jflash.cpp中id_command ()的constructed_string定义,增加串长, 消除堆栈溢出错误.
@修改Jflash.cpp的usage()的使用说明.

并口操作相关:
  要编写并口的操作, 需要知道并口相关寄存器的定义:
  [基地址]处为数据寄存器: D7-D0, 对应PC9-PC2. 各类型的管脚定义如下所列
        Wiggler   SDT   Intel
  tck     PC4     PC2     PC2
  tms   PC3     PC3     PC4
  ntrst   PC6(?) PC4     ?(不在数据端口,或取反)
  tdi     PC5     PC8     PC3
  tdo   PC11   PC13   PC11
  [基地址+1]处为状态寄存器, 管脚,名称和数据位如下所列:
  PC15 nError   D3
  PC13 Select   D4
  PC12 PageOut D5
  PC10 nAck   D6
  PC11 Busy   D7

新类型的端口操作实现
  实现代码很简单, 参考不同JTAG的管脚定义就行.
  if(CableType == SDT_Jtag)
  {
    // NTRST is D2, TMS is D1, TDI is D6, and TCK is D0, TDI is D4(PC13).
    _outp(lpt_address, (1<<2)+tms*(1<<1)+tdi*(1<<6));           // TCK low
    _outp(lpt_address, (1<<2)+tms*(1<<1)+tdi*(1<<6)+(1<<0));// TCK high

    if(rp == READ_PORT)
        _outp(lpt_address, (1<<2)+tms*(1<<1)+tdi*(1<<6));         // TCK low
    if(rp == READ_PORT)
        tdo = ((int)((_inp(lpt_address + 1)>>4)&1));             // get TDO data
  }   
  else if(CableType == Wiggler_Jtag)
  {
    // NTRST is (D0,D4), TMS is D1, TDI is D3, and TCK is D2, TDI is D7(PC11).
    _outp(lpt_address, (1<<0)+(1<<4)+tms*(1<<1)+tdi*(1<<3));           // TCK low
    _outp(lpt_address, (1<<0)+(1<<4)+tms*(1<<1)+tdi*(1<<3)+(1<<2));// TCK high

    if(rp == READ_PORT)
        _outp(lpt_address, (1<<0)+(1<<4)+tms*(1<<1)+tdi*(1<<3));         // TCK low
    if(rp == READ_PORT)
        tdo =! ((int)((_inp(lpt_address + 1)>>7)&1));             // get TDO data
  }
  这儿有几点说明:
  @注意将复位管脚(NTRST)拉高
  @原Intel实现读取tdo有问题, 没有屏蔽位
  @Busy脚需取反, 而Select脚不用
  @Wiggler的复位脚不确定, 将PC2和PC6都拉高

CPU数据文件:
JflashMM会要使用配置数据文件用于JTAG操作和CPU初始化. 不同CPU和硬板使用不同的文件. 文件的模板可以从Intel下载, 自己定制修改.
对应PXA270, 我下载了PXA27x_DataFiles.zip, 使用其中的bulbcx_16.dat(修改小版本7对应的代号). 压缩包中还有bulax.dat, bulbcx.dat. 文件的命名规则为: bul= Bulverde(PXA270内核代号), Ax=A0,A1, BCx=B0,B1,C0,C2(Ax,Bx,Cx为小版本, 我使用的PXA270为C5), 数值后缀表总线宽度, 32位默认省略.
bulax.dat和bulbcx.dat差别很大. bulbcx.dat和bulbcx_16.dat差别较小, 仅总线宽度和并行Flash数不同.

Flash数据文件:
该数据文件用于描述确定对应硬板上的Flash特性, 确定应该采用何种操作. 不同Flash使用不同文件, 文件名称随类型不同而异[有格式], JflashMM会自动探测Flash类型, 确定需要使用的Flash数据文件的名称.
名称格式为: Flash_ + ID数值 + 并行设备数 + 总线宽度 +.dat
Intel Flash安装完成后, 在安装目录下有很多Flash数据文件, 一般适合可用. 其他Flash类型的支持可参考现有的数据文件进行修改(不同类型数据文件差别不大), 具体可参考Intel的 Appliation note - 30980101 - Adding Support for Intel Flash for JFlashMM.pdf.

GIVEIO并口驱动:
可使用JflashMM自带的, 也可使用sendtoyou制作的Giveio驱动.




查看完整版本: [-- [BLOG]学习嵌入式Linux on PXA270 --] [-- top --]

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 3

    好友
  • 0

    获赞
  • 9

    评论
  • 1032

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 14:52 , Processed in 0.022671 second(s), 14 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部