14

好的,我对 ARM 处理器的编程有点困惑。提问时间:

  • 如何将编译后的二进制文件放入 ARM 处理器?
  • JTAG 是正常的方法吗(我认为这是我的研究表明的......)?
  • 这是唯一的方法吗?
  • 如果它是一种有效的方法,那么您究竟如何以这种方式使用它?
  • 如果不是,那是什么/我该怎么做?

此外,可以使用诸如 Arduino 之类的东西来创建临时JTAG 接口(如果这确实是编程 ARM 设备所需要的)。. .?

我已经设置了QEMU来测试代码等,但我不确定如何继续将我的代码实际放入物理领域。

我基本上是在问:JTAG 是 ARM 世界的设备编程器吗?我可以用 Arduino(Arduino wiggler Clone oo)恶搞一个吗?如果 JTAG 不是,那是什么,我可以欺骗它吗?

哦...我可能需要更好地解释 JTAG 的工作原理。

现在了解一些背景信息:
我有一个旧的 Palm 设备 ( LifeDrive ),我相信它有 XScale PXA270处理器。似乎不再有任何积极的社区开发正在进行,而且我不再使用它了,所以我只是想玩/弄乱它。基本上,这可能是一种很好的方式来玩转本质上是大量传感器的东西,以及其他杂项输入和输出,并且还可以习惯 ARM 组装。

如果我采取了错误的方法,请随时告诉我,但至少提供替代方案(尽管我非常准备专门搞乱 LifeDrive,如果我只是想玩嵌入式编程,我会在我的 Arduino 上这样做.)

几乎现在一切都是在黑暗中拍摄的。我有点厌倦了无处可去,因此我发布了这个。

4

3 回答 3

18

这是很多问题!这里有几个答案:

如何将编译后的二进制文件放入 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 设备的复杂端(大约介于ARM9ARM11之间)),如果您不熟悉此类设备和诸如 PLL 时钟控制、SDRAM 控制和时序以及 MMU 配置之类的东西,您可能想看一些更简单的东西。不仅如此,由于闪存和 RAM 都将在芯片外,因此您将需要内存和其他外部设备的地址映射的详细信息,以及必要的 SDRAM 时序详细信息。作为消费类设备,这些细节可能无法通过逆向工程获得。

话虽如此,关于之前关于引导加载程序的评论,Palm 为设备提供了一个用户可安装的 ROM 更新,因此它必须有一个引导加载程序。但是,您仍然需要图像文件格式和数据传输协议的详细信息。这些不太可能被发布,并且可能难以进行逆向工程。

如果我只是想玩嵌入式编程,我会在我的 Arduino 上这样做。)

有很多低成本的 ARM 开发板可用。例如尝试Olimex:他们甚至有一个低成本的“Wiggler”克隆 JTAG 适配器

于 2011-01-18T00:56:14.600 回答
1

JTAG 是进入电路板以在 RAM 或闪存之外执行的最简单方法。它是一个调试工具,允许您读取和写入 CPU 的所有内部寄存器并控制所有 I/O 引脚。大多数现代 CPU 都支持 JTAG。

它可以像并行端口位爆炸器(wriggler)或昂贵的专用构建硬件一样简单。我会买一个小型 USB 设备来开始这样的设备家伙将它与PXA270一起使用。

对于所有与OpenOCD相关的内容,请访问此处。这将有助于调试和编程,它们列出了各种简单的 JTAG 硬件。

关于您拥有的处理器的注释。它似乎没有得到广泛的支持。也许您应该看一下具有更广泛支持的处理器的廉价开发板。

于 2011-01-18T08:13:14.337 回答
0

我无法具体帮助您,但我确实与 ARM 合作。它使用 ARM 编译器和链接器,并使用专门为设备设计的调试器进行测试,然后将代码闪存到设备本机运行的媒体上。

因此,您将需要一种将信息闪存到您的 Palm 可以运行的媒体上的方法,或者需要一个软件模拟器来进行测试。我希望我对 Palm 有更多的了解,但我更多的是在游戏开发方面 :) 听起来 JTAG 可能是某种 x86 仿真器,所以我可能会从那里开始。

于 2011-01-17T01:12:01.963 回答