这是很多问题!这里有几个答案:
如何将编译后的二进制文件放入 ARM 处理器?
它取决于许多因素。
JTAG 是正常的方法吗(我认为这是我的研究表明的......)?
大多数(也许是所有)基于 ARM 的现代设备都包括一个 JTAG 接口,用于连接到片上调试(FPGA 上的软核可能除外)。这通常可用于对片上或外部闪存进行编程或直接加载到 RAM 中。JTAG 接口也是片上调试和跟踪功能的接口。一些设备具有额外的调试/编程接口,例如ARM 的SWD。
这是唯一的方法吗?
在某些情况下。一些基于 ARM 的微控制器包括一个片上引导加载程序 ROM,它可能支持串行、USB 或其他对片上闪存进行编程的方式。有时这样的工具非常简单,仅用于加载和运行从 RAM 执行并进行实际闪存编程的辅助引导加载程序。
如果它是一种有效的方法,那么您究竟如何以这种方式使用它?
通过使用适当的主机软件。JTAG 是一个非常简单的接口,它没有定义任何特定的功能,只是一种数据传输方式。通常,编程软件需要知道它正在与什么设备通信,如果闪存不是片上的,它需要知道闪存设备及其地址。通常,开发工具链将包括对设备编程的支持,特别是对于具有片上存储器的设备。如果您使用的是 GNU 工具链,则可以使用OpenOCD对设备进行编程并连接 GNU 调试器。
如果不是,那是什么/我该怎么做?
如果您的目标是COTS,它很可能包含一个引导加载程序,该引导加载程序已经允许通过 USB、串行或以太网进行软件更新。
此外,可以使用诸如 Arduino 之类的东西来创建临时 JTAG 接口(如果这确实是编程 ARM 设备所需要的)。. .?
可能,正如我所说,JTAG 本身实现起来非常简单,问题在于使其与您将使用的任何主机软件兼容(或使软件与之兼容)。最简单的“摆动”JTAG 适配器是使用 PC 并行端口 I/O 实现的 - 不是特别快,但很实用。
我基本上是在问:JTAG 是 ARM 世界的设备编程器吗?
它最初被定义为边界扫描测试接口,但现在广泛用于大多数微处理器和微控制器,包括片上调试和编程。
我可以用 Arduino(Arduino wiggler Clone oo)恶搞一个吗?如果 JTAG 不是,那是什么,我可以欺骗它吗?
这不是“欺骗”的问题,接口可以通过多种方式实现。你如何实现它主要影响界面的速度。可以达到 16 MHz,但更简单的并行端口摆动器可能支持不超过 500 kHz。它是一个同步接口,因此可变时钟速率不是问题。
哦...我可能需要更好地解释 JTAG 的工作原理。
我确信我不能比维基百科的JTAG中的解释做得更好。但是对于您的目标设备上的实施,您应该查阅该部件的参考手册/数据表。
我有一个旧的 Palm 设备 ( LifeDrive ),我相信它有XScale PXA270处理器。
“相信”可能还不够;你需要知道。JTAG 引脚是否甚至暴露在板上?消费产品通常会省略实际的 JTAG 连接器。即使有,也可能是专有的连接器和引脚(JTAG 本身两者都没有定义,并且为 ARM 定义了几个,但您可能在开发板上找到的内容可能不会包含在最终消费产品中。
基本上,这可能是一个很好的方式来玩转本质上是大量传感器和其他杂项输入和输出的东西,并且还可以习惯 ARM 汇编语言。
购买带有暴露 I/O 引脚和接口的现成开发板可能会更好。在消费产品上,只有目标应用所需的那些引脚可能会暴露出来,即使这样,如果它们连接到BGA设备,它们也可能无法访问。此外,XScale 处于 ARM 设备的复杂端(大约介于ARM9和ARM11之间)),如果您不熟悉此类设备和诸如 PLL 时钟控制、SDRAM 控制和时序以及 MMU 配置之类的东西,您可能想看一些更简单的东西。不仅如此,由于闪存和 RAM 都将在芯片外,因此您将需要内存和其他外部设备的地址映射的详细信息,以及必要的 SDRAM 时序详细信息。作为消费类设备,这些细节可能无法通过逆向工程获得。
话虽如此,关于之前关于引导加载程序的评论,Palm 为设备提供了一个用户可安装的 ROM 更新,因此它必须有一个引导加载程序。但是,您仍然需要图像文件格式和数据传输协议的详细信息。这些不太可能被发布,并且可能难以进行逆向工程。
如果我只是想玩嵌入式编程,我会在我的 Arduino 上这样做。)
有很多低成本的 ARM 开发板可用。例如尝试Olimex:他们甚至有一个低成本的“Wiggler”克隆 JTAG 适配器。