- 公開日:2019年04月09日
- | 更新日:2022年11月30日
MSP432 にU-Boot コマンドを実装1
- ライター:Tsuchiya
- インターフェース
はじめに
U-Boot は、LinuxなどのOSを起動するためのブートローダになりますが、簡単なI/O操作をコマンドで実行することができるため、デバッグで使用することもあります。
今回、ARMマイコン MSP432E4 に U-Boot の コマンドライン・インターフェース の一部を実装してみました!
プログラムを作成しなくてもMSP432E4の簡単なI/O操作でしたら、コマンド実行で動作を確認できます。
ターゲットボード はTI社 MSP432E401Y が実装されている MSP-EXP432E401Y LaunchPadを使用しています。
ソフトウエアは、MSP-EXP432E401Y LaunchPad にデフォルトでインストールされている Out of Box Experience を利用しました。
このデモアプリケーションは、PC からのコマンドラインで試すことができますため、このデモをベースにU-Boot の コマンドライン・インターフェース の実装することでMSP-EXP432E401Y LaunchPad のピンに出ている各種の簡単なI/O操作をコマンドで試すことができるようにしました。
準備
必要な機材としては、MSP-EXP432E401Y LaunchPad と USB-シリアル変換ケーブル があれば動作します。
ネットワークやUSBメモリの操作する場合は、LANケーブルやUSBケーブルが必要になります。
PCを接続するためには、MSP-EXP432E401Y LaunchPad の UART6 と USB-シリアル変換ケーブル で接続します。
USB-シリアル変換ケーブル と UART6とは、以下のように接続します。
信号 | Launchpad | USBシリアルの接続先 |
---|---|---|
U6Rx | J5 PP0 | TXD |
U6Tx | J5 PP1 | RXD |
GND | J7 GND | GND |
USB-シリアル変換ケーブルによっては、MSP-EXP432E401Y LaunchPadに直接接続できない場合があります。
この場合、以下のような変換ケーブルを用意する必要があります。
コマンド実行
MSP-EXP432E401Y LaunchPadに特有なコマンドについて説明します。
PCではターミナルソフト(ここではTeraterm) を実行して、MSP-EXP432E401Y LaunchPad のポートに接続します。
ボーレートは115200、8ビット、パリティなし、1ストップビットです。
起動時
正常にプログラムが動作すると以下のメッセージが現れます。
MSP-EXP432E401Y LaunchPad monitor =>
help
helpコマンドを実行すると以下のメッセージが現れます。
以下のコマンドのうち、「sntp」「sspislave」「temp」「tftpget」は新たに追加したコマンドです。
=> help ? - alias for 'help' adc - ADC sub-system bdinfo - print Board Info structure cmp - memory compare cp - memory copy dns - lookup the IP of a hostname echo - echo args to console eeprom - EEPROM sub-system erase - erase FLASH memory false - do nothing, unsuccessfully fatload - load binary file from a dos filesystem fatls - list files in a directory (default /) fatsize - determine a file's size flinfo - print FLASH memory information gettime - get timer val elapsed gpio - query and control gpio pins help - print command description/usage i2c - I2C sub-system itest - return true/false on integer compare led - [0|1|all] [on|off|toggle|blink] [blink-freq in ms] loadb - load binary file over serial line (kermit mode) loads - load S-Record file over serial line loadx - load binary file over serial line (xmodem mode) loady - load binary file over serial line (ymodem mode) md - memory display mm - memory modify (auto-incrementing address) mtest - simple RAM read/write test mw - memory write (fill) nm - memory modify (constant address) ping - send ICMP ECHO_REQUEST to network host printenv- print environment variables protect - enable or disable FLASH write protection reset - Perform RESET of the CPU setenv - set environment variables showvar - print local hushshell variables sleep - delay execution for some time sntp - get time via network sspi - SPI utility command sspislave- SPI slave utility command temp - temparature of CPU test - minimal test like /bin/sh tftpget - retrieve file from TFTP server time - run commands and summarize execution time true - do nothing, successfully usb - USB sub-system version - print monitor version
ボード情報
以下のコマンドで、flashの開始アドレスとサイズ、SRAMの開始アドレスとサイズ、
内蔵EEPROMのサイズ、EthernetのMACアドレス、DHCPで取得したIPアドレス、コンソールのボーレートが表示されます。
DHCPでネットワークを設定すると、bdinfoコマンドで設定したIPアドレスを確認できます。
設定されていない場合は、「0.0.0.0」と表示されます。
=> bdinfo flashstart = 0x00000000 flashsize = 0x00100000 sramstart = 0x20000000 sramsize = 0x00040000 eepromsize = 0x00001800 ethaddr = xxxxxxxxxxxx IP addr = 0.0.0.0 baudrate = 115200 bps
※ MACアドレスは、MSP-EXP432E401Y LaunchPad の裏側をご確認ください
今回のプログラムの使用率としては、
flash領域は、約22%( 約229KB /1024KB )使用しています。
sram 領域は、約89%( 約229KB /256KB )使用しています。
reset
ボードをリセットします。WatchDogによるリセットです。
以下のコマンドでリセットします。
=> reset resetting... MSP-EXP432E401Y LaunchPad monitor
LED
以下のコマンドでLEDを制御します。
led_name でどのLEDか指定します(0:D1, 1:D2)。
D3,D4はネットワークのLEDのため操作できません。
また、blinkはサポートされていません。
=> help led led - [0|1|all] [on|off|toggle|blink] [blink-freq in ms] Usage: led [led_name] [on|off|toggle|blink] sets or clears led(s) =>
D1 を点灯させます。
=> led 0 on
D1 を消灯させます。
=> led 0 off
DIPSW
以下のコマンドでGPIOの状態を確認します。
=> help gpio gpio - query and control gpio pins Usage: gpio <input|set|clear|toggle> - input/set/clear/toggle the specified pin
USR_SW1 を押していない状態ですと、USR_SW1(PJ0) が ‘1’ になっていることがわかります。
=> gpio input PJ0 gpio: pin PJ0 (gpio 72) value is 1
USR_SW1 を押した状態ですと、USR_SW1(PJ0) が ‘0’ になっていることがわかります。
=> gpio input PJ0 gpio: pin PJ0 (gpio 72) value is 0
ADC
MSP-EXP432E401Y LaunchPad の Analog In のピン(AINx) で ADC が使用できます。
adc0,adc1のいずれかを使い、channelはxを指定します。
ch20-22は仮想的なチャネルです。ch20は内蔵の温度センサ、ch21はA0とA1での差動です。
以下のコマンドで ADC を使用できます。
=> help adc adc - ADC sub-system Usage: adc list - list ADC devices adc info []- Get ADC device info adc single - Get Single data of ADC device channel
以下のコマンドで内部の温度を確認できます。
=> adc single adc0 20 1.684159V (1684.159mV) 21.2C 2090
以下のコマンドでも同様に温度を確認できます。
=> temp 21.2C
AIN0へGNDを接続した場合ですと、0Vと確認できます。
=> adc single adc0 0 0.000402V (0.402mV) 0
AIN0へ3.3Vを接続した場合ですと、3.3Vと確認できます。
=> adc single adc0 0 3.300000V (3300.000mV) 4095
Memory Test
以下のコマンドでsramのメモリテストを行うことができます。
デフォルトの検査範囲は、SRAM上の、0x2003f400から0x2003fbffまでです。
メモリテストの中断はCtrl-Cです。
=> mtest Testing 2003f400 ... 2003fc00: Pattern FFFFFFFF Writing... Reading...Iteration: 370
SPI (loop back)
SPIコマンドには、マスターとなる sspi コマンドが御座いますが、スレーブなる sspislave コマンドを用意しました。
sspi コマンドになります。
=> help sspi sspi - SPI utility command Usage: sspi [:][.] - Send and receive bits - Identifies the SPI bus - Identifies the chip select - Identifies the SPI mode to use - Number of bits to send (base 10) - Hexadecimal string that gets sent
sspislave コマンドにつきまして、新たに新たに、spiのslave動作をするコマンドを追加しました。
sspiコマンドと同様ですが、コマンドを実行してもslaveとしての送受信の設定後、すぐに返ってきます。
相手のmaster側からspi通信があると、バックグランドで送受信し、内部バッファサイズ(128バイト)まで受信できます。
通信後、引数なしのsspislaveだけを実行すると、受信したデータを表示します。
接続での注意点は次のとおりです。
MSP432E4のMOSIピンは、slaveの場合で出力となりますため、slave側はMISOになります。
逆にMISOピンは、slaveの場合で入力側となりますため、slave側はMOSIになります。
=> help sspislave sspislave - SPI slave utility command Usage: sspislave [:][.] - Send and receive bits - Identifies the SPI bus - Identifies the chip select - Identifies the SPI mode to use - Number of bits to send (base 10) - Hexadecimal string that gets sent or (no arg) - Display last received data
spiコマンドを使用して、ループバック・テストを試してみます。
MSP-EXP432E401Y LaunchPad のヘッダーに出ているSSI2(bus=2)とSSI3(bus=3)のみサポートしています。
SSI2のCSはPD2です。AIN13と競合していますのでご注意ください。
また、SSI3のCSはPQ1(SPI CS Other)になります。
つまり、SSI2は Master で、SSI3が Slave の場合下記の通り接続する必要があります。
信号 | SSI2 (Master) | SSI3 (Slave) |
---|---|---|
CS | J5 PD2 | J6 PQ1 |
CLK | J1 PD3 | J5 PQ0 |
MOSI | J2 PD1 | J6 PQ3 |
MISO | J2 PD0 | J6 PQ2 |
sspislaveコマンドを実行後、sspiコマンドを実行し、sspislaveコマンドで受信したデータを表示します。
- スレーブ(SSI3)で32ビットのデータをモード0で受信するようにし、更に送信データ(0xABCDEF12)をセットします
- マスター(SSI2)から32ビットのデータ(0x12345678)をモード0で送信します
- スレーブで受信したデータ(最大128バイト分)表示します
=> sspislave 3:0.0 32 abcdef12 => sspi 2:0.0 32 12345678 ABCDEF12 => sspislave 1234567800000000000000000000000000000000000000000000000000000000
最大128バイト分表示されます。
USB
usbバス(ホスト)を操作します。
現在は、mass storage(USBメモリなど)しかサポートされていません。
また、FATフォーマットされたUSBメモリを扱い、USBメモリへの書き込みはできません。
通信速度は、12Mb/s となります。
RTOS の USB Library と SDK の usb_msc_hostサンプルソースを使用しています。
=> help usb usb - USB sub-system Usage: usb start - start (scan) USB controller usb reset - reset (rescan) USB controller usb stop [f] - stop USB [f]=force stop usb tree - show USB device tree usb info [dev] - show available USB devices usb test [dev] [port] [mode] - set USB 2.0 test mode (specify port 0 to indicate the device's upstream port) Available modes: J, K, S[E0_NAK], P[acket], F[orce_Enable] usb storage - show details of USB storage devices usb dev [dev] - show or set current USB storage device usb part [dev] - print partition table of one or all USB storage devices usb read addr blk# cnt - read `cnt' blocks starting at block `blk#' to memory address `addr' usb write addr blk# cnt - write `cnt' blocks starting at block `blk#' from memory address `addr'
以下のような USB・microUSB変換アダプタを使用して、MSP-EXP432E401Y LaunchPad と USBメモリを接続します。
USBメモリと接続後に、以下のコマンドでUSBメモリを認識します
=> usb stop stopping USB.. => usb info USB is stopped. Please issue 'usb start' first. => usb start starting USB... Mass storage device connected. scanning usb for storage devices... 1 Storage Device(s) found => usb info 1: Mass Storage, USB Revision 2.0 - Class: (from Interface) Mass Storage - PacketSize: 64 Configurations: 1 - Vendor: 0x1307 Product 0x0165 Version 1.0 Configuration: 0 - Interfaces: 1 Bus Powered 0mA => usb stop stopping USB..
他にも fatlsコマンドを使用して、USBメモリのファイル名をリストすることもできます。
ネットワーク
Ethernet有線接続するためのLANケーブル及びIPv4 DHCPサーバがあるネットワーク環境が必要となります。
ネットワークは、DHCPにてIPの取得、ゲートウェイの設定、DNSの設定を行ないます。
DHCPでネットワークを設定すると、bdinfoコマンドで設定したIPアドレスを確認できます。
MSP-EXP432E401Y LaunchPad へ LANケーブルを接続後、しばらく待ちますと、IPアドレスが設定されます。 => bdinfo flashstart = 0x00000000 flashsize = 0x00100000 sramstart = 0x20000000 sramsize = 0x00040000 eepromsize = 0x00001800 ethaddr = xxxxxxxxxxxx IP addr = 192.168.1.20 baudrate = 115200 bps
※ IPアドレスはネットワーク環境によって変わります。
IPアドレスが確認できますと、pingコマンドでネットワークを確認することができます。
=> ping 192.168.1.254 Pinging 192.168.1.254 with 92 data bytes Reply from 192.168.1.254, 92 bytes, Seq=1, TTL = 64 host 192.168.1.254 is alive
DNSサーバーにIPアドレスを問い合わせることができます。
=> dns ntp.nict.jp Hostname = ntp.nict.jp AddrCnt = 4 IPAddr = 133.243.238.243 IPAddr = 133.243.238.163 IPAddr = 133.243.238.244 IPAddr = 133.243.238.164
NTPサーバにSNTPプロトコルで時刻を問い合わせることができます。
=> sntp ntp.nict.jp Date: 2019-03-14 Time: 8:08:33 UTC
その他のコマンドについて
上記にご紹介したコマンド以外にも、I2C や msp432e4内蔵のEEPROMへアクセス、
msp432e4内蔵のflashへ消去やプロテクト(書込み禁止)を行うコマンドもあります。
まとめ
MSP432 に U-Boot のコマンド・インターフェースを実装しました。
これにより、コマンドを送るだけで簡単なIOの操作や USBメモリ、ネットワークの動作を確認することができます。
次回は、参考までにU-Boot のコマンド・インターフェースのプロジェクトを公開し、その環境構築方法をご紹介します。