2010年6月30日水曜日

SH-2A(SH72620) 開発用 GNU GCC 環境整備中

今回は、GNU GCCによる環境整備の途中経過をメモ的に記述します。
7/1追記

 付属SH-2A基板(CQ出版Interface誌)で、SHマイコンデビューを果たしたと思いきや、HEWのライセンス切れ(試供)で、約半数のテストプログラムのビルドが不可となりました。
 ◎ビルド不可となったプログラム 
  ・ビデオディスプレイコントローラを使ったプログラム、特にフォントを組み込んだプログラム
  ・ファイルシステム(FAT)を組み込んだプログラム
 ◎HEWの制限(256KB)内でビルド可能なプログラム。
  ・簡易オシロスコープほか、V850、ARM7、Cortex-M3で組んだプログラムをSH用に修正したプログラム。
 結局、SH72620の特色を十分に活かそうとしたプログラムが制限にかかってしまったと言う感じでしょうか。

 以前、「GCC対応シリアル・ダウンローダ(TinyMON)」でGNU GCCによるビルドを行っているので、ビルド不可となったプログラムをGCCでビルドしてみました。
 なお、GNU GCCの環境は、KPITから入手したものと、Interface誌Webサイトから入手したものを試しました。特に、大きな違いは無いようです。(組み込まれているパッケージの数はKPITの方が多いようです、現時点で、ビルドエラーの発生状況は同じです。)

1.開発環境について(ビルド時のエラー)
  CMT割り込みのハンドリングが比較的理解しやすいと思い、I誌7月号3章「メモリ・カードとFATファイル・システムの実装」のサンプルコードcq_sh7262_gccを雛形に、HEWの制限に引っ掛かったプログラムプロジェクトをGCC対応をおこないました。
 ◎発生したビルドエラー その1
  ・asmfunc.s: Assembler messages:
   asmfunc.s:425: Error: misaligned data
   asmfunc.s:412: Error: offset to unaligned destination
   make: *** [asmfunc.o] Error 1
    asmfunc.sのSet interrupt mask level のコードを削除(もう少し検証)
 ◎発生したビルドエラー その2(その1での修正後)
  ・undefined reference to `end'
    過去に、このエラーで悩んだ記憶があるような。。。
    リンクスクリプトファイル Tsh72620_ram.ld を修正。
  ・undefined reference to `__fpscr_values'
  ・undefined reference to `log10'
  ・undefined reference to `pow'
    GNU GCCの開発環境に、mpfr、gmpパッケージを追加する必要があると思われる。
   ==>mpfr、gmpパッケージのインストール成功後も解決できず。7/1現在

2.開発環境について(mpfr、gmpパッケージの追加)
 I誌7月号6章「SH-2A対応GCCによるクロス開発環境の構築と使い方」のMPFRライブラリ、GMPライブラリのインストールを参考に、同パッケージのインストールを行いました。
 しかし、mpfrパッケージのインストールは失敗しました。
 (昨年はARMで成功していたが今回失敗)
 ●対処  7/1追記
  ・両パッケージのインストール先を /usr/local/sh-tools にする。
    Interface誌提供のGNU GCC環境は /usr/local/sh-tools
  ・gmpパッケージを先にインストールする。
    ①./configure --prefix=/usr/local/sh-tools
    ②make / make check / make install
  ・mpfrパッケージをgmpライブラリ、インクルードファイル指定でインストールする。
    ①/configure --prefix=/usr/local/sh-tools --with-gmp-include=/usr/local/sh-tools/include --with-gmp-lib=/usr/local/sh-tools/lib
    ②make / make check / make install


3.GNU GCCにより作成したプログラムについて。
 前述のプログラムについて、数値演算関数、浮動小数点関連のコードを削除し、とりあえずビルドを通しました。
 そのプログラムの動作は以下の通りでした。
 1)割り込みは不調
   CMTおよびMTU2による割り込み処理を試しましたが、いづれも不調でした。ただし、一部のプログラムについては、割り込みによるLEDの数回の点滅を確認できましたが、割り込みを使いこなすにはほど遠い状況です。
 2)空のforループの回りが遅い。
   Wait用に使用した、空のforループ HEWで1秒であったものがGCCでは4秒弱かかりました。結構気になります。
 3)割り込み処理なし、main()内のwhile(1)ループで処理をこなすプログラムは安定動作。
   (高機能のマイコンを使う意味がなさそう。)

以下に今後の課題をまとめます。
○GNU GCCの開発環境に、mpfr、gmpパッケージを追加
 =>成功 7/1
○割り込み処理の安定動作
○処理速度の改善、オプティマイズの検討

2010年6月19日土曜日

SH-2A SDカード(SPIモード)を試す。


CQ出版 Interface誌 2010/7号でFATファイルシステムの実装記事があり、同誌Webサイトでソースコード等が公開されました。記事を斜読しながら、SDカードの読み込みを試しました。


(モノクロLCD表示 左半分は表示不全)








概要
  [SDカード][SPIモード]==(SPI)==[付属SH-2A基板][モノクロLCD表示]

 ソースファイル
  (mmc.c/cc932.c)(ff.c)(main.c)
    mmc.c   SDカード制御(SPIモードコマンド送信、SPI設定)
    cc932.c  Unicode/SJIS変換
    ff.c    FATファイルシステム
    main.c   プログラムメイン
    他

 改造点
  ・SCIF(UART)による出力を液晶表示に(機能検証が出来る程度)
  ・SPIチャネルをCh0からCh1に(SPI1使用)
  ・MMC_CD/MMC_WPのポートアサインを変更 (PC6、PC7)使用


1.SDカード・ドータボードの作成
 ・シリアルフラッシュROM(M25P40)
   ブート用 SPI0接続・・・このため、SDカードはSPI1接続に変更
 ・SDカードコネクタ
   I誌 記事を参考に配線 付属SH-2A基板 CN3のピンアサインは以下の通り。

  [SDカード]   [付属SH-2A基板 CN3]    
   9       (100KΩ)--- 3.3V
   1 CD/DAT3   22 SSL10(CS) PG18(GPOIOのHi/Low出力でCS信号を代替)
   2 CMD     21 MOSI1(DI)         ---(100KΩ)--- 3.3V
   3 Vss      GND
   4 Vcc      3.3V              ---(0.1uF)--- GND
   5 CLK     23 RSPCK1(SCK)
   6 Vss      GND
   7 DAT0     33 MISO1(DO)        ---(100KΩ)--- 3.3V   
   8 DAT1    (100KΩ)--- 3.3V
   CD       28 PC7             ---(100KΩ)--- 3.3V
   WP       27 PC6             ---(100KΩ)--- 3.3V
   ※SDカード 1ピンのプルアップ(100KΩ---3.3V)は無し。
  最初、SDカード 1ピン(CS)信号はSPIのSSL信号を使うものだと思っていました。ソースコードにCS_HIGH/CL_LOWの操作があるのを、SH7262のSPI機能で賄えないかと思い色々調べるのですが不明、結局、ソースコードどおりにGPIOのHi/Low出力で行いました。

2.ソースの改造
 1)mmc.c
   ・使用する、SPIチャネル0をチャネル1に  (RSPI0=>RSPI1)
   ・CS、CD、WP のポートアサインを変更
 2)cc932.c  そのまま使用
 3)ff.c    そのまま使用
 4)main.c
   main()のfor(;;)ループ内のSDカード操作機能を切り出し、ディレクトリのファイルリスト表示、選択ファイルのテキスト表示を行う。
  ・di ディスク初期化(SPI、GPIOの初期設定) ディスクのフォーマットは行わないようです。
     disk_initialize()
  ・fi 論理ドライブ初期化 f_mount()
  ・fl ディレクトリ情報取得 f_opnedir(), f_readdir()
  ・fo ファイルOpen f_open()
  ・fr ファイルRead f_read()
  ・fc ファイルClose f_close()
  
 ※セクションの設定の試行錯誤に合せ #pragma section文の追加・削除を行っています。
 ※dhisk_initialize()の前にf_chdrive(0)を実行(メモ)


3.不具合対応(試行錯誤)
 1)モノクロLCD表示不全
  現象 モノクロLCD(SG12864)の左半分の表示が不能、プログラムの表示領域のデータも不全
  対処 FATファイルシステム(SDカード関連含め)、LCD表示を 個別のセクションに配置
  結果 プログラムの表示領域のデータは正常に設定されるようになるが、依然表示は不全

以前、V850 で SDカードの読み書きに挑戦したのですが、挫折、今回、ある程度の動作が確認できたことで、なんとか、SDカードの利用に目処がついたと思っています。後は、もう少し、公開されたソースを解析し、安定動作を実現したいと思います。

2010年6月12日土曜日

SH-2A ビデオディスプレイコントローラを試す。


(6/13 訂正)

CQ出版 Interface誌 付属SH-2A基板で、TFT-LCD の表示に挑戦しました。TFT-LCD は、OPTREX T-55343GD035...を使用しました。一部、前日、弊ブログで掲載した内容と重複している点もありますが、ご容赦願います。

1.準備
 1)コネクタ探し
  OPTREX 指定の以下の3種のFPC/FFCコネクタを秋葉原で探しました、ラジオデパートなどの数軒のコネクタ専門店を探すのですがいずれも、メーカーに発注になり、2000個単位でしか扱わないとの事、秋葉原ではどこも5個や10個程度は扱わないと言われました。そういわれながらも諦めきれず、秋葉原を放浪しました、すると、秋月電子通商近くの「鈴商」というパーツ屋で、メーカー不明ながらも0.5mmピッチ40極のFPCコネクタを1個50円で購入出来ました。また、17号線沿いの「スーパージャンク?」で0.5mmピッチ6極のFPCコネクタを1個16円で購入しました。
 ・表示側回路部FPC用コネクタ 0.5mmピッチ40極 (Kyocera Elco 6240)
   ==>前述の 0.5mmピッチ40極 コネクタを使用
 ・照明側回路部FPC用コネクタ 0.5mmピッチ3極 (Kyocera Elco 6298)
   ==>前述の 0.5mmピッチ6極 コネクタを使用 余り3極分のスペースを埋める。
 ・タッチパネルFPC用コネクタ 0.65mmピッチ4極(Kyocera Elco 6227)
   ==>自作コネクタ まだ試さず。
 2)FPC変換基板作成
  1)で入手した、FPC用コネクタ40極をサンハヤト SMTコネクタ変換基板CK-4にハンダ付けしました。配置を考え、11~50ピンを使用
 3)0.5mmピッチ6極FPC用コネクタの改造
  LCDバックライト白色LEDの電源として、1,3極を使用、リード線をハンダ付け、4~6極はプラスチックフィルム(0.2mm厚)を挿入固定
 4)拡張基板作成。
  付属SH-2A基板のCN3に接続し、シリアルフラッシュROM(M25P40)搭載、CN3のLCD_XXX..端子を、FPC用コネクタ40極に引き出す基板を作成。OPTREX T-55343GD035 にはSPIによる制御機能があるので、SPI0が使用できるように、M25P40と、T-55343GD035 の接続を切り替える回路を試しに搭載。(今だSPIは試していません。)

 5)カラーバー表示プログラムを試す。
  Interface誌のLCD表示サンプル(2010.6 6章)およびルネサスからダウンロードした、TFT-LCDパネル表示のサンプルコード(an_rjj06b1002_sh_lcd)を参考にして作成したプログラムを試す。
  T-55343GD035 は暗いまま、変化なし。
  (実は、かすかながら、左端、1cmに幅5mmの縦帯が見えた。後でこの縦帯が表示領域だったことを知りました。)
 6)LCDバックライト白色LEDの電源回路の作成
  今まで、使用のモノクログラフィックLCDを使った感覚で、OPTREX T-55343GD035 は3.3Vで全てまかなえると思っていたのですが、(OPTREXの仕様書 7.Electrical Specifications(電気特性)だけを見て判断し、T-55343GD035の購入を決めました。)
 OPTREXの仕様書の後ろの方、7.7.Lighting Specifications(照明仕様)に19.2Vの表記あり、さらに後日入手した T-55343GD035 アプリケーションノートよると、リニアテクノロジーのLEDコントローラLT3591が必要と知り、これを購入、ここからは以前、投稿した「ハンダ付けの。。。。」の内容どおりの試行錯誤をおこないました。
 とにもかくにも、T-55343GD035のバックライトの点灯に成功しました。ちなみに前述の5)を試すと、白地に縦の黒帯表示となりました。

2.TFT-LCDの表示
 1)SH-2AのLCD(T-55343GD035)コントロールの確認
  この時点で、LCDの表示は白地に黒帯(左端から1cmの位置に5mm幅)、T-55343GD035がかってに表示しているのか、SH-2Aが何らかの制御を行った結果なのか不明。
  そこで、SH-2Aのビデオディスプレイコントローラ3(VDC3)の表示領域外の色指定を試しました。
  グラフィックス画像外の色設定レジスタ(GROPBASERGB1)に赤、青、緑と順次設定し、これを試すと
LCDの表示は赤、青、緑と順次変化するのが確かめられました。
 ==>SH-2AのVDC3機能が稼動しているのを、初めて確認。

 2)表示調整
  この時点で、SH-2A側の設定は、マニュアルどおりの設定で、後は T-55343GD035 側の設定が必要と思われました。しかし、T-55343GD035 の初期設定は、SPI通信で行う必要があり、この設定法が今一つわかりません、CLKの周波数、各コマンド、各パラメータ等はドキュメントで確認できるのですが実際にどのようにすればよいのかわかりません、たとえば、コマンドとパラメータは繋げて送ればよいのか、一定の間隔を空けて送ればよいのか、はたまた、セパレータ等が必要なのか不明です。
   ・・・T-55343GD035のSPIによる設定はここで一旦諦める。
 そうこうしているうちに、DE の水平方向開始設定(DE_START_H)を適当にいじると、1)の表示の縦の黒帯が広がりました。さらにその黒帯の下半分に本来表示されるべきカラーバー画像の下部グレーのグラディエーション表示らしきものが見えるのに気付きました。そこで、カラーバー画像を横縞に変更すると(上掲の画像)、設定した全ての色表示が確認出来ました。
 後は、マニュアル無視のVDC3の設定を試すだけです。色々試すうちにDE の水平方向開始設定(DE_START_H)を320にすることで9割がたの表示になることがわかりました。(カラーバーの表示、上掲画像参照)
  *後は、SPIによる T-55343GD035 の設定で、SH-2A VDC3の設定を本来の値に戻すことが今後の課題となります。    (6/13訂正)

3.TFT-LCDの表示で遊ぶ。
 ここまでTFT-LCD(T-55343GD035)の表示が出来たら、何か、画像を表示したくなりました。
 1)RGB565形式の画像データファイル作成プログラム。
  以前、LUMINARY MICRO社 LM3S8962 の OLED(グラフィクディスプレイ128 x 96)の表示データを作成するために作成したアプリケーション(MakeRIT_Image)を修正し、画像ファイル(ビットマップ等)から、RGB565形式のデータを生成するアプリケーションを作成しました。
 最初はテキストファイル出力で、ヘッダーファイルで定義する画像データの配列の初期化データとして使用しました。プログラムサイズは256KBを超え、近い将来使えなくなるので、バイナリファイルを出力し、HEWのSH-2Aへのダウンロードファイルとして扱うようにしました。
 試しに、OPRTEX社のホームページをハードコピーしたビットマップファイルを320×240のRGB565形式の画像ファイルにして、T-55343GD035に表示しました。(上掲画像参照)

4.文字表示
 ここまでTFT-LCD(T-55343GD035)の表示が出来たら、何か、文字を表示したくなりました。
 1)自作フォント Font6×8
  いままでモノクロLCDで使用している自作フォントを使いました。ここで、SH-2AのVDC3の機能の便利さが実感されました。いままで、RAM上に個別にVideoRAMを組み、LCD内のVRAMと同期をとっていたのですが。今回の場合、直接LCD内のVRAMを操作する感覚で、表示が扱えます。
 2)STMicroのフォント
  以前、STMicroelectronics の STM32F のマイクロコントローラを試した際に使用したフォント 16×24 を組み込みました。
 フォントデータとしては、 "(SP)"以降でしたので、アスキーコードより、0x20(SP)を引く等工夫が必要でした。フォントデータだけ拝借、ライセンス的に多少の問題があるとは思いつつ、、
 3)IPA_FONTについて、
  ARMコンテスト優勝作品 「MP3プレーヤー。。。」2010.6掲載 を参考にIPAフォントを試したいと思いました。まずは、必要なサイズのフォントイメージを作成する必要があるようですが、今一つ不明、結構ハードルが高めかなと思います。ぼちぼちと試したいと思います。

※今回のTFT-LCD表示で気付いた点
 ・表示を試すカラーバーは、縦縞、横縞を準備するべき。
 ・表示を試すカラーバーは、左端、上端、下端、右端には、白、黒は避けるべき。
 ・まずは、表示外の色設定を行うこと。

※HEWのライセンス切れまであと、10日余り。256KBの壁がどの様なものか、GNU GCCに切り替えるべきか、、、、悩ましいことです。




2010年6月7日月曜日

付属SH-2A基板 2Chオシロスコープ


 CQ出版 Interface誌 付属SH-2A基板に 昨年NXP LPC2388基板 で作成した、簡易オシロスコープを移植しました。
 今回は、内蔵ADCを使いました。インターバルタイマ(MTU2使用)で最高で10uSの間隔でサンプリングします。(100KSPS)
 ハードウエア構成は、拡張基板を従来より、コンパクトにしました。

1.内蔵ADCについて、
 1)サンプリング周期の上限決定
   ルネサスSH7262ハードウエアマニュアルの「24.A/D変換器」 レジスタ:ADCSRのクロックセレクト:CKSの設定で変換時間 212~548tcycの記載が目に付き、ダメモトで10uSのサンプリング周期を試しました。多少の波形の乱れはあるものの一応サンプリングが成功しているようなので、この値を最高値としました。
 (tcycは Iφ:144MHzをさすのか、Pφ:24MHzをさすのかいまいち不明ながら、10uSのサンプリングが成功する可能性があると思い試しました。)

 2)ADCモードについて
  マルチモードと、スキャンモードを試しました。どちらもまだ深くマニュアルを読まず、とりあえずの設定でためしたら、それなりの動作をしたので、、、見直しの必要を感じています。

2.ハードウエア
 1)拡張基板
  昨年のARMマイコンコンテスト、「コイセ君」(小伊勢、井上 両氏 作成)の実機を拝見し、そのコンパクトさに魅力を感じ、今回それを見習い、95x72mmのユニバーサル基板に纏めました。
  上端にタクトスイッチを置くために、アクリル板で補強した事が工夫のポイントです。
 2)サブ(ドータ)基板
  現在、サブ基板上には、シリアルフラッシュROM(M25P40)を搭載し、アプリケーション毎に、サブ基板を使い分けることにしました、ファミコンのゲームカートリッジを交換するイメージです。
 現在 AN0、AN1の端子のみのもの(上記) と、 RS232Cドライバを搭載し、PCとのシリアル通信を行うものを組みました。
 将来、オシロスコープの電圧レンジ対応でリレー、オペアンプ、etcを搭載したものを作成したいと思っています。

2010年6月5日土曜日

ハンダ付けの限界に挑戦してみました。



今回は、SH-2A基板でカラーLCDの表示に挑戦したことから始まります。
使用した、カラーLCDは OPTREX T-55343GD035JU-LW-AEN で、少々手こずっています。

まず、Interface誌(2010/6)の液晶表示制御を参考に、プログラムを作成して実行しました。しかし、LCDは真っ暗のまま、砂嵐、ノイズぐらいは表示されると思っていたのですが、

OPTREX のドキュメントを調べ直すうちに、バックライトLEDの順電圧:19.2Vに気付きました、ここで初めて、LEDのコントローラ回路が必要であることがわかりました。

さらに、同LCDのアプリケーションノートが入手でき、そこには、LEDコントローラの動作例(回路例)が記載されています。LEDコントローラには LEDリニアテクノロジーのLT3591 が使われています。

 LT3591を購入し、実際に手にすると、3mm×2mmのパッケージ、各端子が0.5mmmピッチその小ささがかなりのハードルになったことを改めて実感しました。

 ハンダ付けに、四苦八苦した経緯を以下に述べます。

◎異常発熱。
 1個目のLT3591 出力の電圧(A-K間)は6.0V、普段使う3端子レギュレータ並みの発熱。LCDは依然真っ暗、6.0Vの出力では、、、
◎白煙が上がる。
 2個目のLT3591 CTRL端子をGND にすると、白煙が上がった、さらに、22uHのインダクタからも白煙が、、、
◎42.5Vの安定出力
 3個目のLT3591 CTRL端子を3.3Vに接続、出力の電圧(A-K間)は42.5Vで安定出力(無負荷)
 4個目のも同様に、42.5Vの安定出力

  ・・・42.5Vは危ないと思いながら、出力電圧が安定していたので、勇気を奮ってLCDに接続

◎LCDのバックライトLED点灯
 3、4個目のLT3591のコントロール回路をLCD(AK端子)に接続、ようやくバックライトLEDが点灯、この時の出力電圧は17.7Vで、発熱なし。
 

※ハンダ付け手順
 ①サンハヤトのエクステンション基板(0.5mmピッチ)を5mm(4線)切り分け、ハンダメッキする。
 ②LT3591の1~4端子に①の基板切片をつけ、裏面の接着状況を確かめて、5~8端子を着ける。
  *裏面の接着が、LT3591の裏面の中央のGNDに及ぶと、異常発熱、等の不具合に繋がる。
 ③SOP8ピン=>DIP変換基板を加工
   変換基板のハンダポイントを適宜に削り取る。(1~2mm程度残す程度)
 ④変換基板に、②を両面テープで固定する。 エナメル線のハンダ付けで、変換基板と②を繋げる。