• 公開日:2019年04月09日
  • | 更新日:2022年11月30日

MSP432 にU-Boot コマンドを実装1

はじめに

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とは、以下のように接続します。

表: USB-シリアル変換ケーブルとの接続
信号 Launchpad USBシリアルの接続先
U6Rx J5 PP0 TXD
U6Tx J5 PP1 RXD
GND J7 GND GND

 

USB-シリアル変換ケーブルによっては、MSP-EXP432E401Y LaunchPadに直接接続できない場合があります。
この場合、以下のような変換ケーブルを用意する必要があります。

図 : USB-シリアル変換ケーブルとの接続

コマンド実行

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 の場合下記の通り接続する必要があります。

表: SPIの接続
信号 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コマンドで受信したデータを表示します。

  1. スレーブ(SSI3)で32ビットのデータをモード0で受信するようにし、更に送信データ(0xABCDEF12)をセットします
  2. マスター(SSI2)から32ビットのデータ(0x12345678)をモード0で送信します
  3. スレーブで受信したデータ(最大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メモリを認識します

=> 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 のコマンド・インターフェースのプロジェクトを公開し、その環境構築方法をご紹介します。