我正在尝试读取摩托罗拉微控制器 MPC5606B 的闪存。我看到了他的引脚,看到它使用 jtag 进行调试,因此我尝试使用它的 JTAG 接口来读取其闪存内容。
我使用工具 (UPA) 和 PC 读取 MPC 的闪存内容,但是,我想自己完成,使用我自己的嵌入式硬件而不使用 PC 工具。我在互联网上阅读了 JTAG 标准( JTAG_IEEE-Std-1149.1-2001 ),以及一些视频和解释。我阅读了 TAP 控制器状态图并阅读了一些说明。
为了更好的理解JTAG的读取,我用PC的工具读取了MCP的flash和示波器,看看通信是如何进行的,但是通信的持续时间接近10s。于是,我把整个flash都填满了零,读了内存,这样,我就可以用示波器识别内存的读数了。然而,虽然我可以使用示波器识别内存读数,但我还不能确定执行读数的确切命令顺序。阅读时间太大了,快10s了。
所以,在深入之前,我想知道是否有某种保护来访问闪存。我试图了解通信的开始,我可以在 TAP 控制器的状态机中识别进度,但我无法理解这一步的含义以及为什么要这样做。所以,我想知道:
1) 我可以确定通信是否有某种保护吗?我真的需要在进一步了解任务之前知道它,因为我需要知道任务的复杂程度才能更深入
2) 虽然我阅读了 JTAG 标准和 TAP 控制器状态机,但我无法说出我需要什么命令序列来读取闪存内容。
Abaixo está a leitura do flash do MPC5606B realizada pela ferramenta com o auxílio do PC。图像由一系列图像组成。第一个是通讯完整的图像,第二个是通讯的开始,有一个箭头指示它被撤回的地方。
这是我迄今为止的解释
图1:
1.1 - (TMS = 1) 测试逻辑复位
1.2 - (CLK 宽脉冲)我不知道为什么。
1.3 - (8 个 CLK 脉冲,TMS = 1)
由于 TMS 没有出现 1 我知道它没有退出 Test-logic-Reset
1.4 - (TMS = 0, 1 脉冲时钟) 进入 Run-Test-Idle
图 2:
2.1 -(TMS = 1, 2 个时钟脉冲)进入“Select IR-Scan”状态
2.2 - (TMS = 0, 2 个时钟脉冲) 进入“Shif-IR”状态
2.3 - (TMS = 0, 4 个时钟脉冲) 保持在“Shift-IR”
TDI:1000 TDO:1000 2.4 -(TMS = 1,1 个时钟脉冲)转到“Exit1-IR”
2.5 -(TMS = 1,1 个时钟脉冲)进入状态“Update-IR”
2.6 - (TMS = 0, 1 个时钟脉冲) 进入“运行-测试-空闲”
图 3:
3.1 -(TMS = 1,1 个时钟脉冲)进入“选择 DR-Scan”状态
3.2 - (TMS = 0, 2 个时钟脉冲) 进入“Shif-DR”状态
3.3 - (TMS = 0, 31 个时钟脉冲) 进入“Shif-DR”状态
32 个时钟周期相当于 4 个字节:
TDI:0x00 0x00 0x00 0x00 TDO:0xB8 0x0C 0x27 0x54 (10111000 00001100 00100111 01010100)
3.4 -(TMS = 1,1 个时钟脉冲)转到“Exit1-DR”
3.5 -(TMS = 1,1 个时钟脉冲)进入“Update-DR”状态
3.6 - (TMS = 0, 1 个时钟脉冲) 进入“运行-测试-空闲”