FrontPage

2014/09/28からのアクセス回数 1544

Interface 2014/05に紹介されたFM3にU-Bootを移植された記事を実際に試された 「待ったり日記」さんがいるのを励みに私も挑戦してみることにしました。

メモリ増設ボード

「待ったり日記」さんに倣って、 .NET MicroFramework対応SRAM2M&WX-PHY拡張ボード を使用しました。

必要な部品は、 このボードの説明 にあります。

メモリのハンダ付けには、フラックスとはんだ吸い取り線を使いました。

WX-SRAM-PHY-FM3-002.png

U-Bootのコンパイル

環境変数の設定

本当は、Interfaceのダウンロードファイルで動作を確認してから、コンパイル作業に入りたかったのですが、 公開されているファイルがSファイル形式でMacのOpenOCDで書き込めないので、直接U-Bootのコンパイル に挑戦してみました。

$ export PATH=$HOME/local/arm/CodeSourcery/arm/bin:$PATH
$ export CROSS_COMPILE=arm-none-eabi-
$ export ARCH=arm

ソースのダウンロード

以下のサイトからソースをgitで取得します。

$ git clone https://github.com/fm3fan/u-boot.git
$ cd u-boot

MacOSXとUbuntu用に修正

オリジナルのままでは、Unixではコンパイルできないので、以下のファイルを修正しました。

  • boad/cq/cq_frk_fm3_lfcq1からconfig.mk, u-boot.ldsをcq_frk_fm3_wxmp3plcdにコピーする。
  • cpu/arm_cortexm3/fm3/envm.cの以下の部分を修正envm_init, envm_writeの関数宣言をcpu.hに合わせる。
    void
    //__attribute__ ((section(".ramcode")))
    //__attribute__ ((long_call))
    envm_init(void)
    {
    }
    
    u32
    //__attribute__ ((section(".ramcode")))
    //__attribute__ ((long_call))
    //envm_write(uint32_t offset, void * buf, uint32_t size)
    envm_write(unsigned int offset, void * buf, unsigned int size)
    {
        uint32_t ret = 0;
        if (!fm3_flash_erase(offset, size))
            return ret;
        if (fm3_flash_write(offset, buf, size))
            ret = size;
        return ret;
    }
    
    
  • トップのMakefileのcq_frk_fm3_wxmp3plcd_configを以下の様に修正する。
    cq_frk_fm3_wxmp3plcd_config : unconfig
    @echo "LDSCRIPT:=$(SRCTREE)/board/cq/cq_frk_fm3_wxmp3plcd/u-boot.lds"\
    > $(obj)board/cq/cq_frk_fm3_wxmp3plcd/config.tmp
    @$(MKCONFIG) $(@:_config=) arm arm_cortexm3 cq_frk_fm3_wxmp3plcd cq fm3
    
    

コンパイル

u-bootのコンパイルは以下の手順で進めます。

  • 設定環境のクリア(make distclean)
  • コンフィグファイルの作成(make ボード名_config)
  • ビルド(make)

端末で以下の様に入力してします。

$ make distclean
$ make cq_frk_fm3_wxmp3plcd_config
$ make

書き込み

私のMacOSXやUnbutuではFM3のUSB Directを使った書込ができないので、 以下の様にOpenOCDを使って書き込みます。 *1

$ openocd -f openocd.cfg -c "flash_program u-boot.bin"

以下の様なメッセージが出力されてフラッシュにプログラムが書き込まれます。
Open On-Chip Debugger 0.7.0 (2013-08-20-09:43)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
adapter speed: 500 kHz
Info : only one transport option; autoselect 'jtag'
Warn : Interface already configured, ignoring
adapter_nsrst_delay: 100
jtag_ntrst_delay: 100
trst_only separate trst_push_pull
adapter speed: 500 kHz
cortex_m3 reset_config sysresetreq
Info : clock speed 500 kHz
Info : JTAG tap: mb9bfxx6.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4)
Info : mb9bfxx6.cpu: hardware has 6 breakpoints, 4 watchpoints
target state: halted
target halted due to debug-request, current mode: Thread 
xPSR: 0x81000000 pc: 0x0000d380 msp: 0x2000ff50
flash 'fm3' found at 0x00000000
auto erase enabled
Info : Fujitsu MB9Bxxx: Sector Erase ... (0 to 2)
Info : Fujitsu MB9B500: FLASH Write ...
wrote 131072 bytes from file u-boot.bin in 15.320683s (8.355 KiB/s)
flash program complete. reset and run

動作確認

動作確認は、u-bootのコンソールメッセージをシリアル通信で受信することで行います。

シリアル通信の設定

シリアルとの接続を以下の様に結線します。

MPL2303SAFM3
1: GNDCN2: 40 (GND)
2: TXDCN2: 15 (RXD1)
4: RXDCN2: 16 (TXD1)

コンソールのボーレートは、include/configs/cq_frk_fm3_wxmp3plcd.hを参照して、115200とあった。 *2

Serial_FM3.png

picocomを使ってシリアル通信

シリアル通信には、Arduinoで使ったpicocomを使いました。 *3

ファイルの転送に sz, rzコマンドと念のためkermitをインストールします。

$ sudo port install lrzsz
$ sudo port install kermit

FM3 U-Bootとつないでみる

シリアル通信の準備ができたので、FM3とつないでみます。 *4

$ picocom --send-cmd "sb -vv" --receive-cmd "rb -vv" -b 115200 /dev/tty.usbserial

picocom v1.7
の後で設定が表示されます。


ここで、FM3をリセットすると、以下の様なメッセージが出力されます。
U-Boot 2010.03-00019-gd1ef410-dirty ( 9 22 2014 - 11:28:39)

CPU  : Fujitsu FM3 series (Cortex-M3)
Board: CQ_FRK_FM3 + WXMP3 Rev Rev 0.1, Kentaro Sekimoto
DRAM:   2 MB
Flash:  1 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serialNet:   fm3_ethFM3> 

helpと入力すると、使用できるu-bootのコマンドが表示されます。

増設メモリの動作確認

WX-SRAM-PHY-FM3-002に増設したメモリが正常に動作するかu-bootのコマンドを使って 確認します。

以下のコマンドで拡張メモリ*5への書き込みをテストしてみます。 無事、60000000に12345678がセットされていることが確認できました。

FM3> md 0x60000000 
60000000: f4a3ff00 ec3f2a4d cf77e31b ccfd0225    ....M*?...w.%...
60000010: 3fdfe97d ff7f38af 87cf5fdf 83c923a6    }..?.8..._...#..
60000020: dd3dfe49 5d717dc3 77bb196b d8d75ff3    I.=..}q]k..w._..
60000030: 7ba4bbc7 2ffe2875 fafded9f f0ebdef7    ...{u(./........
60000040: 931f5db1 bd49c329 76a6bf2f 7f77f507    .]..).I./..v..w.
60000050: fbfdb86e 57d77a96    n....z.W
FM3> mw 0x60000000 0x12345678
FM3> md 0x60000000 
60000000: 12345678 ec3f2a4d cf77e31b ccfd0225    xV4.M*?...w.%...
60000010: 3fdfe97d ff7f38af 87cf5fdf 83c923a6    }..?.8..._...#..
60000020: dd3dfe49 5d717dc3 77bb196b d8d75ff3    I.=..}q]k..w._..
60000030: 7ba4bbc7 2ffe2875 fafded9f f0ebdef7    ...{u(./........
60000040: 931f5db1 bd49c329 76a6bf2f 7f77f507    .]..).I./..v..w.
60000050: fbfdb86e 57d77a96    n....z.W

picocomの通信を終了するには、Ctrl-A, Ctrl-Xを入力します。

失敗

この後、U-BootのHello Worldを試してみたのですが、どうしても上手く動きませんでした。 そこで、uCLinuxの動作確認を優先して先に進むことにしました。 *6

コメント

選択肢 投票
おもしろかった 1  
そうでもない 1  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。


(Input image string)


*1 openocd.cfgについては、arm/FM3-uCLinuxを試す?を参照してください。また、MacOSXの場合、AppleUSBCDC.extをunloadする必要があります。詳しくはarm/FM3をはじめるを参照して下さい。
*2 使用しているシリアルは、RXD1の方だった!
*3 機能がシンプルなのが気に入りました
*4 MacOSXでは/dev/tty.usbserial, Ubuntuでは/dev/ttyUSB0でした。
*5 0x60000000から0x601fffffまでの2MB分
*6 機会があればHello Worldに再挑戦します。

添付ファイル: fileSerial_FM3.png 298件 [詳細] fileWX-SRAM-PHY-FM3-002.png 320件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-12-02 (火) 10:30:53 (994d)
SmartDoc