LinuxオペレーティングシステムでのAtmel ARM Cortex-M4マイクロコントローラーのプログラミングとデバッグ。 パート1

雑誌Components and Technologiesの 2016年の第2号の記事の電子版を提示します。 著者はKurnits Andreyです。



この記事では、Atmel SAM4Sマイクロコントローラーアプリケーション開発エコシステムをLinuxオペレーティングシステム環境に展開するプロセスについて説明します。 読者は、SAM4S-EK評価ボードとARM Cortex-M4マイクロコントローラーのAtmelファミリーにも精通します。 SAM-ICEデバッグアダプター(別名J-LINK)およびOpenOCDプログラムの使用に関する推奨事項が記載されています。



はじめに



LinuxオペレーティングシステムをAtmelのARM Cortex-M4マイクロコントローラーのプログラミング環境として選択することは、一般的な方法ではありません。 それどころか、Atmelはマイクロコントローラーの開発のために、Windowsオペレーティングシステム専用に設計されたAtmel Studio 7環境を自由に配布しています。 初心者向けのAtmel Studio 7環境の展開と構成が、作成者が選択したパスよりもはるかに簡単であることは秘密ではありません。

著者は、デバッグのためにGCCクロスコンパイルツールキットおよびOpenOCDパッケージと組み合わせてQt Creator開発環境を使用することを提案しています。 オペレーティングシステムとして、著者はLinux Lubuntu 14.04 LTSを選択しました(仮想マシンで実行されていますが、これは必須ではありません)。 このアプローチにより、通常のツールセットを変更することなく、他のARMマイクロコントローラー(だけでなく)に簡単に切り替えることができます。 たとえば、[1]では、STマイクロエレクトロニクスのSTマイクロコントローラSTM32F4の開発例が、同じツールキットを使用して提示されています。

使用されている用語に関するいくつかの言葉。 ターゲットマイクロコントローラとワークステーションに接続するハードウェアデバイスは、以降デバッグアダプタと呼ばれます。 デバッガーはコンピュータープログラムと呼ばれ、プログラムの段階的な実行、メモリセルの値の表示などに使用されます。



ハードウェアプラットフォーム





図 1.デバッグアダプターが接続されたSAM4S-EKボードの外観。



評価ボードはAtmelマイクロコントローラーSAM4S16Cに基づいており、その主な機能は以下のとおりです。

  1. ARM Cortex-M4コア、120 MHzの最大クロック速度
  2. チップ上のメモリ量:1 MBのフラッシュメモリと128 KBのRAM
  3. 周辺機器の中で区別できるもの:USBコントローラー(デバイスモードでのみ動作)、外部NANDフラッシュメモリコントローラー、SDメモリーカードコントローラー
  4. インターフェイスコントローラーUART、I2C、SPIなど
  5. 100ピンハウジング


SAM4S-EK評価ボードの機能には次のものがあります。

  1. Micron MT29F2G08ABAEA 2 Gb NANDフラッシュチップ
  2. FTM280C34Dカラーディスプレイモジュール、解像度320x240ピクセル、対角2.8インチ、抵抗膜式タッチパネル付き。 ディスプレイには、パラレルインターフェイスを介してマイクロコントローラーに接続されたIlitek ILI9320コントローラーが組み込まれています。
  3. Texas Instruments抵抗膜式タッチパネルコントローラーADS7843E
  4. 2つのRS-232ポート用の2つのDB9コネクタがはんだ付けされており(そのうちの1つはRTS、CTS信号付き)、RS-485インターフェースも表示
  5. Atmel QTouchテクノロジーのタッチコントロールは、回路基板上に直接配置されています(5個のタッチボタンとスライダー)
  6. エレクトレットマイクとそのためのオペアンプTS922
  7. TPA022ヘッドフォンと3.5mmジャックジャックを接続するためのオーディオアンプ。
  8. マイクロコントローラーの内蔵ADCおよびDACユニットに接続される2つの同軸BNCコネクター。
  9. マイクロSDカードホルダー
  10. 2.54 mmピッチのIDCコネクタへの63個の汎用ピン(GPIO)出力


SAM4S-EKボードとSAM4S16Cマイクロコントローラーの両方の詳細については、Atmel Webサイト[ 12 ]を参照してください。



ツールキット



ハードウェア(SAM4S-EKボード)およびソフトウェア(Linux Lubuntuオペレーティングシステム)プラットフォームが定義されている場合、ターゲットマイクロコントローラーのプログラミングおよびデバッグ用のハードウェアおよびソフトウェアツールのシステムを構築できます(図2)



図 2.マイクロコントローラーをデバッグするプロセスの構造図



JTAGインターフェース経由のマイクロコントローラーはSAM-ICEデバッグアダプターに接続され、SAM-ICEデバッグアダプターはUSBインターフェース経由でワークステーションに接続されます。 デバッグアダプターの電源もUSBインターフェイス経由で供給され、開発者のボードの電源とマイクロコントローラーを別々に実行する必要があります(図2には示されていません)。

ワークプログラムは、一方でSAM-ICEデバッグアダプターと、他方でGCCツールキットに含まれているGDBデバッガーと対話するワークステーションで実行されている必要があります。 オープンソースのOpenOCDプログラム[4-6]は、この役割に最適であり、デバッグに加えて、ファームウェアをマイクロコントローラのフラッシュメモリにロードしたり、インサーキットテストに使用したりできます。

OpenOCDプログラムは、SAM-ICEデバッグアダプター(実際、一般的なJ-LINKのアナログ)とSAM4S-EK評価ボード(それぞれAtmel SAM4マイクロコントローラー)の両方をサポートしています。 さらに、OpenOCDはソースコードとして入手でき、Linuxオペレーティングシステム用にコンパイルできます。

統合開発環境Qt Creator(図2)は、GDBデバッガーを介してデバッグ情報を受け取り、開発者にとって便利な形式(ブレークポイント、変数値、ステップバイステップのプログラム実行など)で提供します。

OpenOCDプログラムはサーバーモードで動作し、他のクライアントプログラム、たとえばtelnetクライアントの接続を許可します(図2)。 これは、生産中のマイクロコントローラのシリアルプログラミングに便利です。



OpenOCDをインストールする



以下のコマンドを実行する必要があるUbuntuリポジトリから-最も時間のかからない方法でOpenOCDをインストールできます。

sudo apt-get install openocd
      
      





ただし、この場合、古いバージョン0.7.0がインストールされます( openocd --versionコマンドを実行すると、インストールされたOpenOCDプログラムのバージョンを確認できます)。

現在のバージョン(記事の執筆時点-0.9.0)を取得するには、ソースコードからOpenOCDをコンパイルする必要があります。 これを行うには、次の手順を実行します。

1.次のコマンドを実行して、サイト[ 2 ]からOpenOCDソースコードをダウンロードします。

 cd ~ wget http://downloads.sourceforge.net/project/openocd/openocd/0.9.0/openocd-0.9.0.tar.bz2.
      
      





その結果、 openocd-0.9.0.tar.bz2アーカイブファイルがホームディレクトリに表示されます。



2.次に、次のコマンドを実行してOpenOCDを解凍します。

 tar xvf openocd-0.9.0.tar.bz2
      
      





その結果、openocd-0.9.0ソースコードを含むディレクトリがホームディレクトリに表示されます。



3.ワークステーションとSAM-ICEアダプタがUSBインターフェースを介して通信するために必要なlibusb-devライブラリがインストールされているかどうかを確認します。 libusb-devライブラリを確認するには、次のコマンドを実行します。

 sudo dpkg --get-selections | grep libusb
      
      





ライブラリがインストールされている場合、出力は次のようになります。

 libusb-0.1-4:i386 install libusb-1.0-0:i386 install libusb-1.0-0-dbg:i386 install libusb-1.0-0-dev:i386 install libusb-1.0-doc install libusbmuxd2 install
      
      





ライブラリがインストールされていない場合は、次のコマンドを実行してインストールできます。

 sudo apt-get install libusb-dev
      
      







4. OpenOCDをビルドするには、次のパッケージも必要です。



上記のように、libusb-devライブラリと同じ方法でそれらの存在を確認できます。



5.これで、SAM-ICEアダプターをサポートするOpenOCDパッケージをビルドできます。このためには、次のコマンドを順番に実行する必要があります。

 cd ~/openocd-0.9.0 ./configure --enable-jlink make sudo make install
      
      





--enable-jlinkスイッチは、J-LINKアダプターのサポートを有効にするよう指示します。 実際のところ、SAM-ICEアダプターは変更されたSegger J-LINK BASEであるため、Atmelマイクロコントローラーでのみ機能します。 ただし、J-LINKを使用するためのプログラミングインターフェイスは、SAM-ICEアダプタと完全に互換性があります。



SAM-ICEアダプターの接続



次に、SAM-ICEアダプターをワークステーションに接続し、USBで接続されたデバイスのリストを次のコマンドで確認します。

lsusb

SAM-ICEアダプターが接続されている場合、コマンド出力には次の行が含まれている必要があります。

 Bus 002 Device 003: ID 1366:0101 SEGGER J-Link ARM
      
      





1366はVID番号(USBデバイスの製造元コード)、0101はPID番号(製品コード)です。 これらの番号は、後でudevデバイスマネージャを設定するために必要になります。

OpenOCDデバッグサーバーがUSB経由でSAM-ICEアダプターとやり取りできるようにするには、次のように、udevデバイスマネージャー用のルールファイルを作成する必要があります。

 sudo nano /etc/udev/rules.d/45-jlink.rules
      
      





Nanoエディターウィンドウで、次のテキストを入力します。

 SUBSYSTEMS=="usb", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0101", \ MODE:="0666", \ SYMLINK+="jlink_%n"
      
      





idVendorおよびidProductフィールドは、以前に取得したVIDおよびPID番号に対応しています。

次に、ワークステーションを再起動します。

[ 3 ]で説明されているようにudevを設定すると、OpenOCDデバッグサーバーの起動はスーパーユーザー権限でのみ可能になり、将来QtCreator環境からのデバッグで問題が発生します。



SAM-ICEアダプターとOpenOCDデバッグサーバー間のコラボレーション



プロジェクトディレクトリ(作成者は〜/ sam /ディレクトリを使用)で、次の内容のopenocd.cfg構成ファイルを作成する必要があります。

 telnet_port 4444 gdb_port 3333 source [find interface/jlink.cfg] source [find board/atmel_sam4s_ek.cfg] gdb_flash_program enable
      
      





openocd.cfgファイルには、OpenOCDサーバーの要件が含まれています。



必要なソフトウェアがインストールされ、デバッガーがワークステーションとターゲットマイクロコントローラーに接続されたので、システムのパフォーマンスを確認できます。 これを行うには、プロジェクトディレクトリ(〜/ sam /)で、次のコマンドを使用してOpenOCDサーバーを起動します。

 openocd
      
      





すべてが正しく行われると、ターミナルに次のように表示されます。

 Open On-Chip Debugger 0.9.0 (2015-12-29-14:45) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'. adapter speed: 500 kHz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 cortex_m reset_config sysresetreq Info : J-Link ARM V8 compiled Nov 25 2013 19:20:08 Info : J-Link caps 0xb9ff7bbf Info : J-Link hw version 80000 Info : J-Link hw type J-Link Info : J-Link max mem block 9296 Info : J-Link configuration Info : USB-Address: 0x0 Info : Kickstart power on JTAG-pin 19: 0xffffffff Info : Vref = 3.313 TCK = 1 TDI = 0 TDO = 0 TMS = 0 SRST = 1 TRST = 1 Info : J-Link JTAG Interface ready Info : clock speed 500 kHz Info : JTAG tap: sam4.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4) Info : sam4.cpu: hardware has 6 breakpoints, 4 watchpoints
      
      





この場合、コマンドラインプロンプトは表示されません。これは、サーバーが正常に起動され、SAM-ICEデバッグアダプターを介してターゲットマイクロコントローラーとの接続が確立されたことを示します。

これで、2番目のターミナルを開いてコマンドを実行する必要があるtelnetプロトコルを使用してデバッグサーバーに接続できます。

 telnet localhost 4444
      
      





4444は、openocd.cfg構成ファイルで以前に指定されたポート番号です。 その結果、デバッグサーバーへの接続が確立され、コマンドを入力するためのプロンプトが表示されます。

 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger >
      
      





サーバーとの接続が確立されると、たとえば、マイクロコントローラーのコアレジスターの内容を表示するなど、OpenOCDコマンド(完全なリストは[ 7 ]にあります)を実行できます。 これを行うには、haltコマンドを使用してマイクロコントローラーでプログラムを停止する必要があります。

 > halt target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x81000000 pc: 0x004003e6 msp: 0x20003488
      
      





次に、regコマンドでレジスタの内容を直接表示します。

 > reg ===== arm v7m registers (0) r0 (/32): 0x00000013 (1) r1 (/32): 0x00000800 (2) r2 (/32): 0x004023D8 (3) r3 (/32): 0x00000000 (4) r4 (/32): 0x81CBF6AB (5) r5 (/32): 0x788E2033 (6) r6 (/32): 0x5C2195CC (7) r7 (/32): 0x20003488 … … …
      
      





shutdownコマンドを使用してOpenOCDサーバーをシャットダウンすると、telnet接続が自動的に閉じられます。

 > shutdown shutdown command invoked Connection closed by foreign host. andy@andy-vm:~$
      
      







バンドル「SAM-ICEアダプタ-OpenOCDプログラム」は、量産に使用して既製のファームウェアをマイクロコントローラのフラッシュメモリにロードできます。 たとえば、Atmel SAM4S16Cマイクロコントローラーのすべてのフラッシュメモリをクリアするには、次のコマンドを実行する必要があります。

 openocd -f interface/jlink.cfg -f board/atmel_sam4s_ek.cfg -c init -c halt -c "flash erase_address 0x00400000 0x100000" -c reset -c shutdown
      
      





0x00400000はアドレス空間のフラッシュメモリの先頭のアドレス、0x100000は16進数システムのフラッシュメモリのサイズ、マイクロコントローラSAM4S16Cの場合は1 MB = 2 ^ 20バイト= 0x100000(16)バイトです。 フラッシュメモリの先頭のアドレスとそのサイズは、このマイクロコントローラのドキュメントから取得されます[ 12 ]。

消去に成功した場合、OpenOCDプログラムの出力には次の行が含まれている必要があります。

 erased address 0x00400000 (length 1048576) in 4.685278s (218.557 KiB/s)
      
      





ファームウェアをフラッシュメモリに直接書き込むには、次のコマンドを実行します。

 openocd -f interface/jlink.cfg -f board/atmel_sam4s_ek.cfg -c init -c halt -c "flash write_image erase sam.hex" -c reset -c shutdown
      
      





sam.hexは、Intel HEX形式のファームウェアを含むファイルの名前です。 OpenOCDは、バイナリやELFなどの他のファームウェアファイル形式も受け入れます。

ファームウェアがフラッシュメモリに正常にロードされた場合、出力には次の行が含まれているはずです。

 Info : sam4 does not auto-erase while programming (Erasing relevant sectors) Info : sam4 First: 0x00000000 Last: 0x00000000 Info : Erasing sector: 0x00000000 wrote 8192 bytes from file sam.hex in 2.979438s (2.685 KiB/s)
      
      





つまり、この場合、ファームウェアが配置されるフラッシュメモリのセクタのみがクリアされます。



Qt Creatorでキットを作成する



「デバッグアダプター-デバッグサーバー」リンクが構成され、準備ができたので、統合開発環境(この場合はQt Creator)のセットアップを開始できます。

ARMマイクロコントローラーのアセンブリ用のGCCツールキットがワークステーションに既にインストールされており、Qt Creator環境自体がインストールおよび構成されていることを前提としています。インストールと構成の詳細については[1]で説明します。

まず、デバッグサーバーを追加する必要があります。そのためには、Qt Creatorの設定を呼び出し(メインメニュー項目「ツール->オプション...」)、「BareMetal」タブ(「Naked Device」)を選択し、「Add」をクリックして「OpenOCD 「。 サーバーの起動パラメーターを指定できるウィンドウが表示されます(図3)。 「BareMetal」モジュールがオンになると、OpenOCDサポートがQt Creator環境に追加されることに注意してください。これを行う方法は[1]で説明されています。



図 3. OpenOCDデバッグサーバーをQt Creatorに追加します。



デバッグサーバー名は「OpenOCD + SAM-ICE」に設定できます(図3)。「Startup mode」は「Startup in TCP / IP mode」に設定する必要があります。OpenOCDサーバーはワークステーションで実行されるため、「Host」フィールドはopenocd.cfg構成ファイルで以前に指定されたコンピューター名「localhost」とポート3333が含まれています。

「実行可能ファイル」フィールドに、openocd実行可能ファイルの名前(または必要に応じてそのフルパス)を入力します。 「構成ファイル」フィールドには、先ほど作成したOpenOCD構成ファイルへのパスが含まれている必要があります。この場合は〜sam / openocd.cfgです。 「初期化コマンド」フィールドと「リセットコマンド」フィールドには、デフォルトでサーバー管理コマンドが含まれており、それらの内容を変更する必要はありません。

次に、アセンブリとデバッグを実行するAtmel SAM4Sマイクロコントローラーファミリの新しいデバイスを追加できます。 これを行うには、Qt Creatorの設定で[デバイス]タブを選択し、[追加...]をクリックします。

次に、「Atmel SAM」などのデバイス名を入力し、構成済みのデバッグサーバー「OpenOCD + SAM-ICE」を選択します。

デバイスが追加されると、最終的に図に示すようにアセンブリキットを構成できます。 4。



図 4. Atmel SAM4SマイクロコントローラーキットをQt Creatorに追加します。



GCCコンパイラーとGDBデバッガーは、[1]で説明されているように、ARMマイクロコントローラー用のGCCツールキットから指定されます。



記事の続きは、ボリュームを膨らませないように、別の出版物の形になります。



文学



  1. Kurnitz A. Linuxオペレーティングシステム環境でのSTM32マイクロコントローラーの開発//コンポーネントとテクノロジー。 2015. No. 10。
  2. www.sourceforge.net/projects/openocd
  3. www.we.easyelectronics.ru/CADSoft/ubuntueclipse-code-sourcery-openocd-j-link-arm-ilibystryy-start-dlya-somne​​vayuschihsya.html
  4. www.microsin.net/programming/arm/openocdmanual-part1.html
  5. www.microsin.net/programming/ARM/openocdmanual-part2.html
  6. www.microsin.net/programming/ARM/openocdmanual-part3.html
  7. www.openocd.org/doc/html/General-Commands.html
  8. www.asf.atmel.com/docs/latest/download.html
  9. www.atmel.com/tools/ATMELSTUDIO.aspx
  10. www.sourceware.org/newlib/libc.html#Syscalls
  11. www.e-kit.ru
  12. www.atmel.com/images/atmel-11100-32-bit%20cortex-m4-microcontroller-sam4s_datasheet.pdf



All Articles