我一生中第一次使用 openocd 和 jtag(在玩了 30 年电子产品之后),当我使用 dump_image 转储闪存时,我在每个 Kb 中得到一个 4 字节序列(0x80 0x01 0x59 0x18)。下载。
例子
0x000000 0x80 0x01 0x59 0x18 real data
0x000010 real data
...
0x000400 0x80 0x01 0x59 0x18 real data
....
0x000800 0x80 0x01 0x59 0x18 real data
真实数据,是指闪存中确切位置的字节,因此,4字节序列不会移动真实数据,它只是覆盖数据。
我的 openocd 配置(只需复制一些条目):
set _CHIPNAME tc3162l
set _ENDIAN big
set _CPUTAPID 0x1438000d
#chip memory MX29LV160CBTC
jtag newtap $_CHIPNAME cpu -irlen 5 -ircapture 0x1 -irmask 0x1f -expected-id $_CPUTAPID
target create $_TARGETNAME mips_m4k -endian $_ENDIAN -chain-position $_TARGETNAME
flash bank mymemory cfi 0xbfc00000 0x200000 2 2 $_TARGETNAME
从第一个自动探针定义的 Tap,根据发送到串行控制台的原始引导加载程序数据定义 Flash,Flash 探针显示错误....
我不知道问题是否可能是由于:
- 我使用 AT 命令为新的引导加载程序完成的第一次闪存写入可能会损坏闪存数据,我只是刷新了 bank 0。
- 我在配置 openocd 时遇到了一些问题。
- 我为闪存定义使用了错误的地址(我刚刚从原始引导加载程序中获得了该地址)。
- 闪存中的某些标记对操作系统意味着某些东西,例如擦除扇区或类似的东西,但整个图像(2mb)具有相同的模式。
- openocd 应该自己找到闪存????
- 必须初始化 cpu 的一些寄存器才能在 flash 上正常工作吗?
扫描链
TapName Enabled IdCode Expected IrLen IrCap IrMask
-- ------------------- -------- ---------- ---------- ----- ----- ------
0 tc3162l.cpu Y 0x1438000d 0x1438000d 5 0x01 0x1f
闪存清单
{name cfi base 3217031168 size 2097152 bus_width 2 chip_width 2}
闪光探针 0
Flash Manufacturer/Device: 0xb540 0xb540
Could not probe bank: no QRY
Try workaround w/0x555 instead of 0x55 to get QRY.
Could not probe bank: no QRY
我一直在网上搜索类似的问题,没有幸运,阅读了所有的 openocd 手册,一些关于 tc3162l 的论文,闪存芯片的数据表,我学到了很多 jtag,测试了闪存芯片的不同配置。
用zjtag(找到了tap但没有找到内存),urjtag(找到了tap)进行了测试。
对不起我的英语,它不是我的主要语言,对于长篇文章,试着解释一切。我希望有人能给我带来有关问题的提示或阅读内容以了解有关 jtag、openocd、闪存等的更多信息。
背景和介绍
30 多年来,我一直把玩电子作为一种爱好,而且我是 jtag 的新手,前几天我在垃圾箱里发现了一个旧的 Zyxel adsl 调制解调器,所以我玩了一下,首先闪烁了一些部分nand 使用嵌入式命令(ZyOs,AT 命令),一切顺利,我在另一个供应商的网站上找到了一个用于相同芯片组和相同内存空间的 linux 工具链,所以我开始使用它,几天后我是能够编译内核和应用程序并最终制作映像,引导加载程序代码不可编译,bin 已经作为文件在工具链中。我使用调制解调器 AT 命令将内核加载到 RAM 中并执行它,运行正常,直到尝试加载 ramfs 并挂起,无论如何,我必须做很多事情来构建正确的映像并将操作系统运行到调制解调器。
在使用闪存进行读写操作(下载部分闪存并再次上传)之后,使用嵌入式 AT 命令,我有信心尝试新的东西,所以我刷新了引导加载程序(在工具链中找到)并砖调制解调器。我知道引导加载程序是固件中最重要的代码,但是由于调制解调器主代码的起始地址和 linux 内核的起始地址,我需要替换它。
没关系,我在玩和学习,所以我构建了一个 wiggler jtag 克隆,连接到电路板并开始使用我生活中非常新的接口和协议,JTAG。
使用openocd,发现tap,ID是Lexra的,IP开发商,芯片是Trendchip tc3162l,很老了,不过玩玩还可以。
我正在设计一个音频板来使用 TEA6320 为我的扬声器选择音频输入,我从 16f84 开始(有一些未使用)并且内存不足,我的设计有很多功能,比如遥控器,液晶显示器,串行端口控制、时钟、警报,所以我将设计切换到 16f648,我现在获得了 400 字节的空闲空间,具有所有这些功能。当我找到调制解调器时,我想用它来控制我的音频切换器作为中央单元来控制 TEA、串行端口、LCD 显示器,并使用以太网端口实现一个 upnp 服务来控制音频系统。我有在 OpenWRT 中使用 upnp 的经验,在我为调制解调器找到的工具链中,有一个 upnp 服务器。
谢谢,路易斯