好的,我对ARM处理器的编程有些困惑。问题时间弹幕:
如何将已编译的二进制文件放入ARM处理器?
JTAG是正常方法吗(我认为这是我的研究所表明的...)?
这是唯一的方法吗?
如果这是一种有效的方法,那么您究竟将如何使用它呢?
如果不是,那是什么/我该怎么做?
此外,可以使用诸如Arduino之类的东西来创建impromptu JTAG接口(如果确实需要对ARM设备进行编程)。 。 。?
我已经设置了QEMU来测试代码等,但是我不确定如何继续将代码实际进入物理领域。
我主要是在问:JTAG是ARM世界的设备程序员吗?我可以用Arduino(Arduino wiggler Clone o.o)欺骗吗?如果不是JTAG,那是什么,我可以欺骗它吗?
哦,我可能需要更好地解释JTAG的工作原理。
现在获取一些背景信息:
我有一个旧的Palm设备(LifeDrive),我相信它具有XScale PXA270处理器。似乎不再有任何活跃的社区开发正在进行,并且我对此也没有多大用处,所以我有点想玩/玩弄它。基本上,这可能是一个很好的方法,可以处理大量的传感器以及其他各种输入和输出,也可以习惯于ARM组装。
可以随时告诉我我是否采用了错误的方法,但至少可以提供其他选择(尽管我特别打算与LifeDrive混为一谈,如果我只是想玩嵌入式编程,我可以在Arduino上这样做)
现在几乎所有事情都是黑暗中的一枪。我有点无所适从,因此发布了此内容。
最佳答案
有很多问题!以下是一些答案:
如何将已编译的二进制文件放入ARM处理器?
它取决于许多因素。
JTAG是正常方法吗(我认为这是我的研究所表明的...)?
大多数(也许所有)基于ARM的现代设备都包括JTAG接口(也许不包括FPGA上的软核)。通常,它可用于对片上或外部闪存进行编程或直接加载到RAM中。 JTAG接口还是片上调试和跟踪功能的接口。某些设备具有其他调试/编程接口,例如ARM's SWD。
这是唯一的方法吗?
在某些情况下。一些基于ARM的微控制器包括一个片上引导加载程序ROM,它可以支持串行,USB,NAND闪存或其他对片上闪存进行编程的方式。有时,这种功能非常简单,仅用于加载和运行从RAM执行并进行实际闪存编程的辅助引导加载程序。
如果这是一种有效的方法,那么您究竟将如何使用它呢?
通过使用适当的主机软件。 JTAG是一个非常简单的接口,它没有定义任何特定功能,仅定义了一种数据传输方式。通常,编程软件将需要知道与之通信的设备,并且如果闪存不在芯片上,它将需要知道闪存设备及其地址。开发工具链通常会包括对设备编程的支持,特别是对具有片上存储器的设备的支持。如果使用的是GNU工具链,则可以使用OpenOCD对设备进行编程并与GNU调试器接口。
如果不是,那是什么/我该怎么做?
如果您的目标是COTS,则很可能包括一个引导加载程序,该引导加载程序已经允许通过USB,串行或以太网等软件进行更新。
此外,可以使用诸如Arduino之类的东西来创建即兴的JTAG接口(如果确实是对ARM设备进行编程所需的接口)。 。 。?
就像我说的那样,也许JTAG本身很容易实现,但问题是使其与您将使用的任何主机软件兼容(或使其与软件兼容)。最简单的“ wiggler” JTAG适配器是使用PC并行端口I / O来实现的-速度不是特别快,但是可以使用。
我主要是在问:JTAG是ARM世界的设备程序员吗?
它最初被定义为boundary scan test interface,但现在已广泛用于包括片上调试和编程在内的大多数微处理器和微控制器。
我可以用Arduino(Arduino wiggler Clone o.o)欺骗吗?如果不是JTAG,那是什么,我可以欺骗它吗?
这不是“欺骗”的问题,该接口可以通过多种方式实现。您如何实现它首先会影响接口的速度。可以达到16 MHz,但是更简单的并行端口摆动器可能无法承受500 kHz以上的频率。它是一个同步接口,因此可变时钟速率不是问题。
哦,我可能需要更好地解释JTAG的工作原理。
我敢肯定,我不能做得比Wikipedia JTAG中的解释要好。但是对于在目标设备上的实现,您应该查阅该部件的参考手册/数据表。
我有一个旧的Palm设备(LifeDrive),它具有我相信的XScale PXA270处理器。
“相信”可能还不够;您将需要知道。 JTAG引脚是否甚至暴露在板上?在消费类产品上通常会省略实际的JTAG连接器。即使有一个连接器,也很可能是专有的连接器和引出线(JTAG本身没有定义,并且为ARM定义了多个,但最终用户产品中可能未包含开发板上的内容)。
基本上,这可能是一个很好的方法,可以解决大量传感器以及其他各种输入和输出的问题,并且可以习惯于ARM汇编语言。
最好使用带有裸露I / O引脚和接口的现成开发板。在消费类产品上,仅目标应用程序所需的那些引脚可能会暴露,即使连接到BGA设备,也可能无法访问它们。此外,XScale处于ARM设备的复杂端(大约在ARM9和ARM11之间),如果您不熟悉此类设备以及诸如PLL时钟控制,SDRAM控制和定时以及MMU配置之类的东西,则可能想看一些简单的东西。不仅如此,而且由于闪存和RAM都在芯片外,因此您将需要存储器和其他外部设备的地址映射的详细信息,以及必要的SDRAM时序详细信息。作为消费类设备,此类细节可能无法通过逆向工程获得。
既然如此,关于早期关于引导加载程序的评论,Palm为设备提供了a user installable ROM update,因此它必须具有引导加载程序。但是,您仍然需要图像文件格式和数据传输协议的详细信息。这些不太可能被发布,并且可能难以逆向工程。
如果我只是想玩嵌入式编程,我可以在Arduino上进行。)
有很多低成本的ARM开发板可用。例如,尝试Olimex:它们甚至具有低成本的"Wiggler" clone JTAG adapter。
关于embedded - 如何将ARM代码获取到实际设备JTAG?可以用Arduino制作Impromptu JTAG吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4709179/