ARM DEVELOP

CROSS COMPILERS

ARM交叉编译工具有多个版本,注意区分。

  • abi(application binary interface): 二进制程序接口
  • eabi(embedded): 嵌入式二进制程序接口
  • arm-none-eabi: 无操作系统,不支持系统调用的函数,如fork等。其使用专用于嵌入式开发的C程序库。
  • arm-none-linux-eabi: 用于linux,使用glibc。

GCC编译器

  • arm-none-eabi-gcc: 编译裸机程序或系统,适用于ARM7/Cortex-M/Cortex-R,可调用newlib库。
  • arm-none-linux-gnueabi-gcc: 编译ARM架构的Linux程序,有uboot/linux kernel/linux应用,适用于ARM9/ARM11/Cortex-A。
  • arm-linux-gnueabi-gcc: 适用于armel架构(与armhf有浮点运算间的差异)。
  • arm-linux-gnueabihf-gcc: 适用于armhf架构。
  • arm-eabi-gcc: android编译器。
  • armcc: 功能同arm-none-eabi-gcc,Keil MDK内置,收费。

DEBUG AND FLASH

DEBUG

STM32支持ISPJTAG/SWD两种调试方式。

In-System Programmability,即在线系统编程。使用时需要先设置 BOOT0BOOT1 两脚,然后通过串口 1进行程序烧写,烧写的软件为Flash_Loader_Demonstrator。此方法的好处是,可以无需外加编程口,但是只可以烧写程序,无法进行在线仿真。

JTAG,全称为Joint Test Action Group,联合测试工作组。是一种国际标准测试协议 (IEEE 1149.1兼容), 主要用于芯片内部测试,早在ARM7上面就已经使用了JTAG作为调试和下载口。

而SWD模式比JTAG 在高速模式下面更加可靠。 在大数据量的情况下面JTAG下载程序会失败, 但是SWD 发生的几率会小很多。基本使用JTAG仿真模式的情况下是可以直接使用SWD模式的。

与 ISP 相比,SWD接口可以与大多数IDE完美兼容,比如IAR,并且可以通过IAR和调试器,进行程序的在线调试,这种调试方法可以直接追踪到当前代码处的各变量状态,寄存器状态等等。

FLASH

  • J-Link是SEGGER公司为支持仿真ARM内核芯片推出的仿真调试工具,支持JTAG和SWD两种模式进行调试。

  • ULINK是由Keil推出的ARM芯片仿真调试工具,是Keil下默认的调试工具,缺点是不支持IAR。ULINK官方提供电路图等资料(半开源资料),可以自行制作仿真调试电路工具。

  • ST-LINK是由意法半导体开发的仿真调试工具。 (ST-LINKV2)适用于STM32与STM8。与STM32连接时支持JTAG与SWD模式,与STM8连接时支持SWIM模式。

ARM IDE

参考材料

  1. 意法半导体
  2. 提问+J-LINK、U-LINK和ST-LINK有什么区别?
  3. JTAG与JLink有啥不同?看完这个你就知道了