Thu 12/30, 2010

FreeRTOS on LPCXpresso [Electronics ]

LPCXpresso1768先日購入した LPCXpresso LPC1768 で FreeRTOS を動かしてみた。FreeRTOS の LPC1768 での動作サンプルとして用意されている Red Suite + デモボード用のコードをベースに LPCXpresso 用に調整する。LCD 表示はとりあえず無視して Ether と USB の動作確認をおこなうことが目的。このデモボードとは Ether PHY チップが異なっているため、最低限この部分の修正が必要になる。これについては kenjia さんが既に対応されていたものを利用させていただいた。

まず、"NXP LPC1768 Cortex M3 Red Suite Demo" の手順にしたがって FreeRTOS をビルドする。

  • FreeRTOS V6.1.0 のアーカイブを展開しておく。
  • LPCXpresso IDE 3.5 を起動し、新しいワークスペースを開く。
  • Import existing projects で Demo\CORTEX_LPC1768_GCC_RedSuite を指定する。
    このとき IDE がハングすることがあるが、強制終了して再度インポート処理をすれば良いようだ。
  • これで "Build" を実行すると main.c の 55行目でエラーとなるから、これをコメントアウトする。「CreateProjectDirectoryStructure.bat」を実行して IDE をリフレッシュせよと書かれているが、これは必要なかった。
    /* #error The batch file Demo\CORTEX_LPC1768_GCC_RedSuite\CreateProjectDirectoryStructure.bat must be executed before the first build.  After executing the batch file hit F5 to refrech the Eclipse project, then delete this line. */
  • FreeRTOSConfig.h 中の IP アドレスなどを自分の環境に合わせて変更する。
    /*-----------------------------------------------------------
     * Ethernet configuration.
     *-----------------------------------------------------------*/
    
    /* MAC address configuration. */
    #define configMAC_ADDR0	0x00
    #define configMAC_ADDR1	0x12
    #define configMAC_ADDR2	0x13
    #define configMAC_ADDR3	0x10
    #define configMAC_ADDR4	0x15
    #define configMAC_ADDR5	0x11
    
    /* IP address configuration. */
    #define configIP_ADDR0		192
    #define configIP_ADDR1		168
    #define configIP_ADDR2		1
    #define configIP_ADDR3		201
    
    /* Netmask configuration. */
    #define configNET_MASK0		255
    #define configNET_MASK1		255
    #define configNET_MASK2		255
    #define configNET_MASK3		0
  • syscalls.c で caddr_t に関するエラーが出るため、これも対処する。#include 行の次に定義を追加した。
    typedef	char *	caddr_t; 

これでとりあえずバイナリはできるようになったが、LPCXpresso 1768 に合わせる作業が残っている。オリジナルのターゲットでは Ether PHY デバイスに DP83848C を使用しているが、LPCXpresso では LAN8720 が使用されているのだ。

  • kenjia さんのダウンロードページ(http://www.page.sannet.ne.jp/kenjia/LPC1768_mbed_Xpresso_4.html)から FreeRTOS_LPC1768_mbed_xpresso_wrk0.zip を取得して展開し、webserver フォルダ以下の emac.c と EthDev_LPC17xx.h をワークスペース内のファイルに置き換える。LPCXpresso Forumによると LPCXpresso 1768 については LAN8720(Ether PHY) の初期化タイミングについて問題があるようだが、kenjia さんのコードではこれも回避されている。
  • emac.c で LPC_xx となっているシンボルについて LPC_ を削除する。
    kenjia さんの環境は LPCXpresso 標準から変更してあるため、このようにシンボルを変更してあるのを戻すことになる。私は差分を見て変更を加えていった。
  • Project / Properties ダイアログのSettings / MCU C Compiler / Symbols に以下の定義を追加してビルドすればOK. これを USE_MBED にすれば mbed でも動く筈だ。
    USE_XPRESSO=1

LPCXpresso1768Ether のコネクタはパルストランス内蔵のものを使う。配線例はhttp://www.page.sannet.ne.jp/kenjia/J_LPC1768_2nd.html などを参考に。私はスイッチサイエンスから購入した MagJack コンパチ品を使用したが、これは GND ピンが出ていないため、フレームから取った。USB は OTG であり、FreeRTOS のサンプルでは CDC として動作するため、B コネクタを付けた。USB からの Vcc は接続していない。どちらも同じスイッチサイエンスから購入したブレッドボード用の変換基板を使って配線した。

Ether のテストは PC の web browser から最初に設定した IP アドレスで http://192.168.1.201/ のようにアクセスすればよい。USB はケーブルを接続し、FreeRTOSDemo_RDB1768 フォルダ内の usbser.inf でデバイスを登録すると COM デバイスとして認識されているから、TeraTerm などで接続するとキー入力がエコーバックされる。あれ、文字化けしている。他に LED を用いての IO ポートのテストまでは出来る。LCD は接続しておらず、コードもそのまま残しているが、他の動作にはとりあえず問題ない。ただ、ping (ICMP_ECHO)の応答がダブって返ることが気になって調べてみた。http://comments.gmane.org/gmane.network.uip.user/1706 などによると、そのような実装であるような記述があったが、コードを見ても良く判らない。

Posted by masato at 10:48 AM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1787
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?