- 论坛徽章:
- 14
|
昨天发了一帖,LINUX下面JTAG口无法发现芯片也就无法烧写
后来经过大侠提示下了个H-JTAG,然后选成了SDT模式的,能够发现芯片了,ID也是对的
但是H-FLASHER我下的最新型号也不支持板子上的NOR FLASH——应该是老版本的INTEL 28F640J3系列,把H-FLASHER里面芯片找了个遍,没有发现对应的,有的大小对应,但是把DATASHEET拿出来一看,发现管脚都根本对不上号,这样我想就更别说烧写了。
真是郁闷啊,请问有什么好的解决方法啊
另外里面提到了一个初始化脚本文件的问题——是不是就是说DATASHEET里面JTAG环节需要写的控制字和地址?
要不实在想不出还需要写什么东东了。又学了一点东西,呵呵,虽然木解决到问题。
==================================================================
谢谢赛特大大,太热心了~有问必答还帮我搜索资料~
结合赛特大大给的WINDOWS下面的SJF2410和华恒提供的LINUX下面的SJF2410,基本上改来改去花了一天时间(发了半天多的呆)~乍一看两个东东里面的区别确实不太好找~
首先需要改的是JTAG.H,这个里面对TMS、TDI、TCK三个脚的设置必须和你的JTAG板设置一致(附录我传个找的JTAG的详细解释,还可以,宁滥勿缺,呵呵)
然后就是重点strata32.c文件的修改,因为面对的是28F640,所以需要这个文件
1:与28F128不同的是,FLASH首地址为0X00000000而不是0X08000000,这个是一眼就看出来的也最好改
2:重点修改——函数原形在mem_rdwr.c里面
#if FAST_ROM_PROGRAM
#define _WR(addr,data) MRW_Wr32QQ(addr,data,0,0xf)
#else
#define _WR(addr,data) MRW_Wr32Q(addr,data,0,0xf)
#endif
#define _RD(addr) MRW_Rd32Q(addr,0,0xf)
#define _RESET() MRW_Wr32Q(targetAddress,0x00ff00ff,0,0xf)
这几个函数是不对的,因为FLASH是16位的,所以不用这几个函数,而用MRW_Rd16Q()、MRW_Wr16Q()这两个东西,就是32改成16~
3:控制字的修改,参看DATASHEET,控制字为8位,而WIN下面原来是32位的,这个可以改一下~
4:程序里面添加一些PRINTF可以帮助调试,但是程序的流程一定要参考DATASHEET里面FLOWCHART,很容易看懂~写操作(完成某种操作),读STATUS REGISTER,判断,结束~
5:刚开始碰到个奇怪的问题,就是DEVICE NUM的问题,老是不对,就想了笨方法——把DEVICE NUM打出来改成那个数好了(奇怪了,昨天是0XFFFC,今天最后居然变成0XFFFF了)~
6:LOCK 位的问题,个人觉得如果UBOOT能启动一部分能取消保护的话,就没必要在烧写程序里面加ClearBlockLock()函数,但是如果确实挂挂了,就应该把这个东西加进去,因为你自己也不清楚到底LOCK没有~个人觉得可以反复的加或不加来试一下,这样应该可以解决LOCK的问题~
7:还没解决的效验问题——高4位不对,很奇怪,呵呵~更奇怪的是居然烧进去跑起来了~(同学还要拿来做毕设的板子,不敢再烧了),留待以后解决吧~不想VERIFY 就SKIP吧,还有个BLANKCHECK,可以做一下,把32位0XFFFFFFFF改成0XFFFF就好了,说明ERASE的很干净了~
=====================================================================
本来是想学学UBOOT移植的,结果搞挂了把JTAG看了一下流程,还是满有收获的~
根据赛特大大的建议,也静下心好好看看UBOOT的流程了,呵呵~
附件里面两个文件,都是关于JTAG并口方面和软件状态方面的东西~
[ 本帖最后由 lxyscls 于 2008-7-28 13:17 编辑 ] |
评分
-
查看全部评分
|