Flash内蔵LPC4300は2012 1Q

以前、7月ごろ発表されたLPC4300データシートとユーザーズ・マニュアルからFLASH ROMが消えていることを指摘しました。製造上の問題があってディセーブルせざるをえなかったのではないかと予想したのですが、どうやら正しかったようです。
先日、NXPが世界最速204MHzのCORTEX-M4マイコンの生産を開始したとのニュースが流れました。この中でFLASHの有無が語られています。

The first LPC4300 part available is the LPC4350 in a BGA256 package — a Flashless part with 264KB SRAM — available now at major distribution partners. Flash parts will be available in Q1 2012

当初量産モデルにはFLASHが無く、あとから出てくるパーツには付いているような書き方。しかし追加したと言うよりは、多分ボンディング・オプションで一部機能の入り切り変更を行っているんでしょ。

KirishimaのPCBを配布します

Uzumeプロジェクトの開発に使用しているKirishima基板のPCBを頒布します。
Kirishima基板はLPCXpresso 1768/1769とポーランド製のコーデック基板MMCODEC01を搭載し、ユーザーIF用のボリューム、スイッチ、LEDを実装した物です。いわゆるマイコン開発ボードですが、普通の物と異なるのは、I2Sオーディオ・コーデックとの接続を中心に設計されていることです。
現在は、次のバージョンのKirishima2の開発を進めていますが、

  • Kirishima2は2ピース構成になるのでPCBの値段が上がる
  • Kirishima2による基板はKirishimaとプログラミング・モデルが同じであるため、ソフトウェアの互換性が保たれる。

ことから、Kirishimaでもいいという方は多いと思います。

頒布方法

基板はFusionPCBで製造した10cm x 15cmの両面基板です。今回の製造では製造元にて全数チェックしています。
価格は送料(Expack 500)込み1000円です*1
購入希望の方は、私のTwitterアカウント @suikan_blackfin にプライベート・メッセージを使って連絡先メールアドレスとお名前(実名)を教えてください。後日、メールにて振り込み先などの連絡を行います。振り込み先は三井住友銀行です*2。振り込み手数料はご負担ください。
極端に忙しくならない限り、発送は入金確認後、3−4就労日で行います。
なお、基板の在庫は6枚です。

リソース

基板の回路図および部品表はこちらのkirishima.zipです。
完成済みの基板の写真はこちら。

開発に使用できるフレームワークおよびインストール/開発文書は、Uzumeプロジェクトのリリースページからダウンロードできます。

注意

Kirishima基板にはいくつかアホなミスがあります。

  • VRの間隔が乱れている
  • AGNDとGNDの結線が数センチ無駄に長い
  • コンデンサの脚の間隔が統一されていない(部品表参照)

などです。動作には問題ありません。また、MMCODEC01は実験用のボードであり、雑音などがそれなりにあります。全体として「実験品質」であることにご注意ください。

*1:余計な事だが、儲けはない

*2:他の銀行・郵便局は不可

FT232R / UB232R

UB232Rという小さなUSB-シリアル変換モジュールを使っています。
このモジュール、ハンドシェイク用のラインとしてはnCTS/nRTSしか出ていません。nCTSが入力なのでモジュールとしてはDTEとして動作することになります。
ところでこのモジュール、nDCDとnDSR/nDTRが外部に出ていません。これらの信号は内部で処理されず、単にICのピンが開放状態になっています。
UB232Rが使用しているFT232Rという製品は、デフォルトでこれらのピンがプルアップです。ですから、nDCD, nDSRはインアクティブであり、通信不能となります。
ハードウェア、ハンドシェイクできるんですかね。

STM32F4 Discoveryへの移植を断念

既にお気づきだと思いますが、ここ数日STM32F4 DiscoveryへのTOPPERS/ASPの移植を検討していました。が、断念しました。
技術的には可能であろうと思われますが、あまりにもつぎ込む労力と出力が釣り合わないことが断念の理由です。

  • 移植可能であるという理由
    • ツールチェーンはねむいさんが検討されているとおり、Codesourceryが使える
    • OpenOCDはCORTEX-M4Fには正式対応していないが、FPUレジスタデバッグ以外ならCORTEX-M3用をだましだまし使える。
    • CORTEX-M4Fは、例外時に全FPUレジスタをスタックにつみ、その後通常レジスタをスタックに積む。結果的にスタックトップから見ると、最初に現れるのはCORTEX-M3レジスタ群である。
    • その結果、TOPPERS/ASPCORTEX-M3依存部のうち、例外出入り口部には変更が不要に思える。
    • dispatch()内では、マルチレジスタ移動命令を追加してFPUレジスタを退避、復帰させればいい。

こんな感じで、CORTEX-Mx依存部に関してはそれほど手間をかけずに移植できそうです。
一方、STM32F4 Disoveryに搭載されているSTM32F407には、16550互換UARTが搭載されていません。そのため、カーネルのターゲット非依存部1.3.2で使われていたCQ-STARM依存部を利用することになりますが、このUSARTドライバは他の部分とよく切り離されているわけではありません。
結局、1.3.2という現在のターゲット非依存部と非互換なコードを持ってきて接ぎ木しなければなりません*1
現行のTOPPERS/ASP for LPCはそれなりに手をかけていて、ターゲット依存部はコア、チップ、ターゲットの三層構造、シリアルはPDICとして分離したモジュール性の高い実装になっています。そこに、古いコードを継ぐとなると、その後のリファクタリングがかなり大げさになります。
今のところSTM32F407を使う予定はなく、となると、ドキュメントをあわせて大きく手のかかるSTM32F4 Discoveryへの移植は、元が取れない、と判断するに至りました。
結局、NXPから何か出てくるのを待つだけです。ET2011で聞いた話では、LPC4300にはFLASHが「ある」とのことですので、期待しましょう。

*1:やり方はわかっているが

メモ

  • CORTEX-M4FのFPUは、明示的にイネーブルにしない限り無効状態にある
  • CORTEX-M4FはFPUが有効である場合、例外時にCORTEX-M3レジスタに加え、すべてのFPUレジスタをスタックに積む
  • TOPPERS/ASP for CORTEX-M3の例外出入り口処理には、CORTEX-M4F対応のための変更は不要に見える。
  • TOPPERS/ASP for CORTEX-M3のdispatch()のコンテキスト保存/復帰には変更が必要である。

http://www.oidon.net/linux/arm-eabi-floating-point