今回は前回と逆周りで街をぐるっとまわりました。
ミリカヒルズの新しい道を走りました。
前に、イオンが出来るって言うてたなぁ。
2012年7月7日土曜日
2012年7月1日日曜日
SH-2A USB SDカード R/W
GWの成果、その2です。
RX62Nで実現してたUSB SDカード R/WをSH-2Aにも適用しました。エンディアンの違いの吸収など少し手こずりましたが、ワリとあっさりできました。
とりあえずドライブ認識、ファイルのリード/ライトなどはできてますが、いくつか残課題が残ってますので、列挙。
-----------------------------------------------------------------------
2012/07/01
更新を怠ってましたが、USB R/Wの速度改善してました。
まず、USB R/Wは当然ですがUSBを使用します。
デバッガのI/FとしてUSBが使えないので、シリアル(UART/RS232C/SCIF)を使用したデバッガI/Fを使用しています。
また、SH-2Aは高速内蔵RAMを使わないと遅くなるのですが、SCIF版のデバッガでは高速内蔵RAMを使用すると暴走します。。
その解析をしてました。ある程度解決したので、ようやく速度改善できました。
CristalDiskMarkを使って計測したかったのですが、あまりにUSB R/Wが遅いため、完走までにめちゃめちゃ時間がかかる。。(10分くらい。。) ので、HDBENCHで実施とします。
USBのDMAはRead側のみ対応してます。Write側の対応はこれから。。。面倒。。
一応、CrystalDiskMarkの結果も貼り付け
RX62Nで実現してたUSB SDカード R/WをSH-2Aにも適用しました。エンディアンの違いの吸収など少し手こずりましたが、ワリとあっさりできました。
とりあえずドライブ認識、ファイルのリード/ライトなどはできてますが、いくつか残課題が残ってますので、列挙。
- SH-2AはHighSpeedに対応してますが、現状はFullSpeedに設定(RX62NはFullSpeedのみ対応)
- ドライブ認識はするのですが、Windows上でいつものバルーンが出ません。。理由不明。
- 1回目は普通に動作するけど、デバッガ止めて、ビルドし直して、再スタートさせたとき、再認識しない。RX62Nでは再認識したような気が。。D+プルアップの解除のやり方が悪いかな。。
- RX62Nでも実現してなかった機能だけど、SDカードの挿抜検出ができない。
- 同じくRX62Nでも実現してなかったUSB FIFOのデータ転送のDMA化。
- RX62Nで修正しきれなかった不具合の対策で、バルク転送中のコントロール転送の取り逃し不具合。SH-2Aではまだ発生してないけど修正してもない。
- CrystalDiskMarkの計測と、速度改善。
-----------------------------------------------------------------------
2012/07/01
更新を怠ってましたが、USB R/Wの速度改善してました。
まず、USB R/Wは当然ですがUSBを使用します。
デバッガのI/FとしてUSBが使えないので、シリアル(UART/RS232C/SCIF)を使用したデバッガI/Fを使用しています。
また、SH-2Aは高速内蔵RAMを使わないと遅くなるのですが、SCIF版のデバッガでは高速内蔵RAMを使用すると暴走します。。
その解析をしてました。ある程度解決したので、ようやく速度改善できました。
CristalDiskMarkを使って計測したかったのですが、あまりにUSB R/Wが遅いため、完走までにめちゃめちゃ時間がかかる。。(10分くらい。。) ので、HDBENCHで実施とします。
- 改善前 : R:155KB/s、W:111KB/s、C:126KB/s
- USB HighSpeed対応 : R:312KB/s、W:249KB/s、C:231KB/s
- USB FIFOサイズ64byte→512byte : R:542KB/s、W:382KB/s、C:313KB/s
- ReadのみUSB側のDMA対応 : R:753KB/s、W:400KB/s、C:391KB/s
- USB BUSWAIT最適化 : R:953KB/s、W:452KB/s、C:442KB/s
- SDとUSB間の内部バッファ5KB→64KB : R:1089KB/s、W:669KB/s、C:534KB/s
- 計測用のシリアルログ無効化 : R:1290KB/s、W:1167KB/s、C:797KB/s
USBのDMAはRead側のみ対応してます。Write側の対応はこれから。。。面倒。。
一応、CrystalDiskMarkの結果も貼り付け
2012年6月30日土曜日
2012年6月23日土曜日
2012年6月16日土曜日
ジョギング 2回目(2012/06/16)
ジョギング2回目です。
今回からヴァームを投入です!
あと、オムロンの活動量計も購入です!
オムロン (OMRON) 活動量計 Jog style ファインイエロー HJA-300-Y
1380円です。
今回は万博の外周まで行き、、、
歩き、走り、歩き、で一周まわりました。
超シンドイ。。
今回からヴァームを投入です!
あと、オムロンの活動量計も購入です!
オムロン (OMRON) 活動量計 Jog style ファインイエロー HJA-300-Y
1380円です。
今回は万博の外周まで行き、、、
歩き、走り、歩き、で一周まわりました。
超シンドイ。。
2012年6月9日土曜日
2012年5月5日土曜日
SH-2A MP3再生
GWの成果です。
Interfaceの記事とソースコードを参考に、FatFsベースに構築したファイルシステムと、オープンソースのMP3デコーダのlibmadを使って、SH-2AでMP3再生ができました。
MP3は1152サンプル(ステレオだと×2サンプル)を1フレームと扱ってますが、1フレーム毎にSDカードからFAT経由でデータを読み出し、大容量RAMに展開(DMA転送)。libmadに1フレーム単位でデータを入力し、libmadからの1サンプル(ステレオで×2)毎の出力をSH-2AのPWMのデューティに設定し、PWM出力(ステレオ2ch)をステレオミニジャックを通して、イヤホンでMP3の音楽を聞けました!
PWMのデューティ設定って結構アバウト(44.1KHzは1サンプルで22.7usだけど、8bit分解能だと10.7us)だし、ボヤッとした音かと思いましたが、めっちゃ普通に音出てます!普段通勤時に聞いてるMP3プレーヤとそんなに変わりはありませんでした!
久々にマイコン動かしてて達成感がありました。
写真の上ちょっと右に写ってる半固定抵抗が左右のボリュームです。その下に見えるのが、秋月で購入したステレオミニジャックです。
-----------------------------------------------------------------------
2012/05/5
イヤホンではイマイチ動いてる感じがしないので、スピーカーを繋いでみました。秋月で150円、250円で売ってるスピーカーなので小さいのかと思ったら、エライでかい。。常時接続は重いし、持ち運び不便なので、もう使うことないかも。。。
というわけで、記念に動画をアップです。
Interfaceの記事とソースコードを参考に、FatFsベースに構築したファイルシステムと、オープンソースのMP3デコーダのlibmadを使って、SH-2AでMP3再生ができました。
MP3は1152サンプル(ステレオだと×2サンプル)を1フレームと扱ってますが、1フレーム毎にSDカードからFAT経由でデータを読み出し、大容量RAMに展開(DMA転送)。libmadに1フレーム単位でデータを入力し、libmadからの1サンプル(ステレオで×2)毎の出力をSH-2AのPWMのデューティに設定し、PWM出力(ステレオ2ch)をステレオミニジャックを通して、イヤホンでMP3の音楽を聞けました!
PWMのデューティ設定って結構アバウト(44.1KHzは1サンプルで22.7usだけど、8bit分解能だと10.7us)だし、ボヤッとした音かと思いましたが、めっちゃ普通に音出てます!普段通勤時に聞いてるMP3プレーヤとそんなに変わりはありませんでした!
久々にマイコン動かしてて達成感がありました。
写真の上ちょっと右に写ってる半固定抵抗が左右のボリュームです。その下に見えるのが、秋月で購入したステレオミニジャックです。
-----------------------------------------------------------------------
2012/05/5
イヤホンではイマイチ動いてる感じがしないので、スピーカーを繋いでみました。秋月で150円、250円で売ってるスピーカーなので小さいのかと思ったら、エライでかい。。常時接続は重いし、持ち運び不便なので、もう使うことないかも。。。
2012年5月4日金曜日
SH-2A 基板
RX62N基板に続き、SH-2Aの基板作成を進めています。
今回はRX62N基板の時に失敗したなと思ったところを改善したつもりでしたが、 新たな失敗も多いです。
そこで、次回の基板作成時に向けて、改善点をメモっていきます。
今回はRX62N基板の時に失敗したなと思ったところを改善したつもりでしたが、 新たな失敗も多いです。
そこで、次回の基板作成時に向けて、改善点をメモっていきます。
- ユニバーサル基板の4隅にスペーサーを付けてますが、どっかのサイトで、スペーサーを逆に(半田面ではなく部品面)付けて半田作業するとやりやすい、って書いてあって、なるほど!と思ったんですが、今回はギリギリに配置していて、スペーサーとマイコン基板と干渉してスペーサーを逆に取り付けは不可でした。。4隅のスペーサーは逆向きにも付けれるように考慮すること!!
- 今回はギリギリに配置しているのですが、回路図も書かずにどんどん半田付けしていると、部品を配置する空間が無くなったケースが多かったです。。ちゃんと回路図書いてから半田付けすること!!(今回の回路図を遅ればせながら書き始めました)
- SDカードスロットの半田付けは今回で3回目。。いい加減、飽きてきました。再利用できるモジュールはフラットケーブルなどで接続して使いまわせるようにする!!
- SH-2Aマイコン基板のコネクタCN1、CN2、CN3を全て半田付けして基板に接続するとナカナカ抜けない。。新しい部品つけるときにブレッドボードで簡単にテストしてから半田付けしたいのですが、ナカナカ抜けないので、半田付けしてみてテストという場当たり的なやり方に。。RX62N基板の時はそこを考慮して連結フレームを使用していたのですが、今回は普通のソケットを使用。やっぱり連結フレームにしておけばよかった。。しかし、2x20を2列並んでるところは連結フレームにすると真ん中2列の配線はどうすればいいのか。。
- 今回はMP3再生を実現するので、3.5mmミニジャックDIP化キットを使用しているのですが、再利用するための丸ピンソケットを準備してなかったため、2ピンが浮いたままに、、おまけに予備の普通のソケットを使ったため、ユルユル。。安定しない。。3.5mmミニジャックDIP化キット用に丸ピンソケットを準備すること!!
- MP3再生のボリュームを調整するのに半固定抵抗を使用したのですが、ボリュームを調整するのにマイナスドライバを使用するのが面倒。。ちゃんと手で回せるボリュームを使用すること!!
2012年5月1日火曜日
SH-2A SDカード制御
久々の投稿です。
RX62NでMP3再生を試みたのですが、オープンソースのソフトデコーダではRAM64KBはキツイ。。
ROM化など、少し頑張ってみたものの、デバッグできないのもキツイ。。
というわけで、SH-2Aに乗り換えです!(同じくInterface付録 ※2010年6月号)
更新が滞ってた主要因は新しいマイコンの立上げです。
ようやくSDカードアクセスが動くようになりました。
マイコンのクロックはRX62Nの96MHzから144MHzに上がってるのに速度落ちました。。
SPIモード、SDクロック24MHzでRead1.6MB/sです。
SH-2Aはキャッシュが付いてるけど、オフになってるとかかな。。
-----------------------------------------------------------------------
2012/05/1
SH-2Aは高速内蔵RAM64KB(CPUアクセス144MHz1サイクル、DMA 48MHz2サイクル)と、大容量RAM(CPUアクセス、DMAアクセスともに48MHz1サイクル)があります。
キャッシュは144MHz1サイクルなので、うまく使うとパフォーマンスを上げることができます。
スタック、グローバル変数、SDカードR/Wプログラムコードを高速内蔵RAMに配置し、SDカードアクセス(SPI)と大容量RAM(非キャッシュ)間をDMAで転送すると、Read約2.2MB/sまで上がりました。
RX62NでMP3再生を試みたのですが、オープンソースのソフトデコーダではRAM64KBはキツイ。。
ROM化など、少し頑張ってみたものの、デバッグできないのもキツイ。。
というわけで、SH-2Aに乗り換えです!(同じくInterface付録 ※2010年6月号)
更新が滞ってた主要因は新しいマイコンの立上げです。
ようやくSDカードアクセスが動くようになりました。
マイコンのクロックはRX62Nの96MHzから144MHzに上がってるのに速度落ちました。。
SPIモード、SDクロック24MHzでRead1.6MB/sです。
SH-2Aはキャッシュが付いてるけど、オフになってるとかかな。。
-----------------------------------------------------------------------
2012/05/1
SH-2Aは高速内蔵RAM64KB(CPUアクセス144MHz1サイクル、DMA 48MHz2サイクル)と、大容量RAM(CPUアクセス、DMAアクセスともに48MHz1サイクル)があります。
キャッシュは144MHz1サイクルなので、うまく使うとパフォーマンスを上げることができます。
スタック、グローバル変数、SDカードR/Wプログラムコードを高速内蔵RAMに配置し、SDカードアクセス(SPI)と大容量RAM(非キャッシュ)間をDMAで転送すると、Read約2.2MB/sまで上がりました。
2012年3月22日木曜日
RX62N 100均ケース
毎回、100均のケースにしまうのも面倒で、かといって、出しっぱなしは小さな子供がいる家庭では無理だし、すぐホコリだらけに。。
(電子ではないけど)工作しました。 ※ただ切っただけ
ケースに入れたままデバッグ可能!!
人間というのは楽をするために進化した動物であることを実感しました。
(電子ではないけど)工作しました。 ※ただ切っただけ
ケースに入れたままデバッグ可能!!
人間というのは楽をするために進化した動物であることを実感しました。
2012年3月13日火曜日
RX62N USB SDカード R/W
2012/02/12
SDカードのアクセスができるようになったので、USBでR/Wを作ることにします。
RX62NでUSBのデバドラ作ってました。USBはポピュラーだけど、初めてだとなかなか難しい。。
USBのデバイス側(ファンクション、ターゲット)で、ようやくPCで認識され始めました。
まだ、MassStorageClassのコマンドが飛び始めたところ。
サポートが必要なSCSIコマンドは、、
あとは、この6つのSCSIコマンドを、SDコマンドに変換してやればいいかな。
もし非対応のSCSIコマンドがとんできたら、そのコマンドのCSWでbCSWStatus=0x01(command failed)を返し、
直後のRequest SenseでILLEGAL_REQUEST(0x05) - ASC_INVALLID_COMMAND_OPERATION_CODE(0x20)のsense dataを返せばいいらしい。
HEWのリモートデバッガとして通常USBを使っていたのですが、今回RX62NのUSBポートを自分で使うために、シリアル(SCI)を使ったリモートデバッガに切り替えました。コマンドやログ出し用にシリアルを使っていたので、計2つのシリアルを使うことに。
USB-シリアル変換(FT232RL)を2つ使って、さらに通常のUSBポートで計3つのUSBを使用してます。
USBハブがいっぱいになりました。。
-----------------------------------------------------------------------
2012/02/18
進捗悪い。。
ひとまず、デバッグ用のツールをメモ。
USBDeview.exe:
Windows Driver Kit 7.1.0(USB device viewer)
現状分かったことについてメモ
-----------------------------------------------------------------------
2012/03/03
相変わらず、進捗悪いです。
なんとかWindowsに認識してもらえるようになりましたが、まだ正しく認識されません。。
-----------------------------------------------------------------------
2012/03/11
ようやく、WindowsXPに正しく認識されるようになりました!
このバルーンに「RX62N R/W」と出てますが、これはDescriptorのiProductに設定している文字列です。
いやぁ、SDカード制御に比べて、めちゃ長かったです。。
容量も正しく認識してる、と思います。
ちょっと容量の大きなファイル(PDF)をSDカードに書き込んで、
表示させてみました。正しくファイルが読めてます。
やはり、WindowsXPは最大128セクタ(64KB)を単位に読みにきます。
一部のログを公開。
あと、ハードウェアのプロパティを見てみると、「Micro RX62N SD R/W」と表示されてます。
これは、SCSIコマンドのInquiryで設定した文字列が使われるようです。
さて、連続Readは問題なくできたぽいので、次は連続ライト、フォーマットに挑戦です。
-----------------------------------------------------------------------
2012/05/1
しばらく更新を怠ってましたが、↑の後、ちょこっとバグ直したらあっさりライト、フォーマットも動きました。CristalDiskMarkも動かしてみましたが、一応動くのは動いたのですが、あまりに遅く。。。
速度改善でDMAを使ってみたりしましたが、RX62NはRAMが少なく、SH-2Aに乗り換えました。
USB R/Wは完成ということで。
SDカードのアクセスができるようになったので、USBでR/Wを作ることにします。
RX62NでUSBのデバドラ作ってました。USBはポピュラーだけど、初めてだとなかなか難しい。。
USBのデバイス側(ファンクション、ターゲット)で、ようやくPCで認識され始めました。
まだ、MassStorageClassのコマンドが飛び始めたところ。
サポートが必要なSCSIコマンドは、、
- Inquiry
- Request Sense
- Test Unit Ready
- Read(10)
- Read Capacity
- Write(10)
あとは、この6つのSCSIコマンドを、SDコマンドに変換してやればいいかな。
もし非対応のSCSIコマンドがとんできたら、そのコマンドのCSWでbCSWStatus=0x01(command failed)を返し、
直後のRequest SenseでILLEGAL_REQUEST(0x05) - ASC_INVALLID_COMMAND_OPERATION_CODE(0x20)のsense dataを返せばいいらしい。
HEWのリモートデバッガとして通常USBを使っていたのですが、今回RX62NのUSBポートを自分で使うために、シリアル(SCI)を使ったリモートデバッガに切り替えました。コマンドやログ出し用にシリアルを使っていたので、計2つのシリアルを使うことに。
USB-シリアル変換(FT232RL)を2つ使って、さらに通常のUSBポートで計3つのUSBを使用してます。
USBハブがいっぱいになりました。。
-----------------------------------------------------------------------
2012/02/18
進捗悪い。。
ひとまず、デバッグ用のツールをメモ。
USBDeview.exe:
- Windowsに保存されてるUSBデバイスを全て表示してくれる
- 各デバイスの詳細な情報(VenderID、ProductID、クラスID、サブクラスIDなど
- 過去に接続されたUSBデバイスもWindowsは記憶していて、同じシリアルナンバーだとうまく認識してくれないが、その履歴を削除できる
Windows Driver Kit 7.1.0(USB device viewer)
- Windowsのデバイスドライバ開発ツール
- その中のToolsにUSB device viewer(UVCview.exe)で、Windowsがどう認識してるかを表示するツール
- Full Development Environmentの中のToolsにチェックを入れてインストール
現状、LowSpeedと認識してるらしい。。。ことが分かりました。← 間違いでした。認識できないデバイスの場合、最後はWindowsがあきらめて、LowSpeed(デフォルト?)として記憶しているだけでした。認識中に更新かけるとFullSpeedと認識してました。
現状分かったことについてメモ
- iSerialNumberが必要
- LUNは0で返せばよい(Windowsは複数LUN未サポート)
- Windows標準のドライバ(インボックス・ドライバ)で認識させるには、bInterfaceClass:0x08(Mass Storage Class)、bInterfaceSubClass:0x06(SCSI)、bInterfaceProtocol:0x50(BOT)とすればよい
- USBデバイスを接続してからWindows標準ドライバ(C:\Windows\system32\usbstor.sys)がインストールされる過程が、C:\Windows\setupapi.logに記録される
-----------------------------------------------------------------------
2012/03/03
相変わらず、進捗悪いです。
なんとかWindowsに認識してもらえるようになりましたが、まだ正しく認識されません。。
-----------------------------------------------------------------------
2012/03/11
ようやく、WindowsXPに正しく認識されるようになりました!
このバルーンに「RX62N R/W」と出てますが、これはDescriptorのiProductに設定している文字列です。
いやぁ、SDカード制御に比べて、めちゃ長かったです。。
容量も正しく認識してる、と思います。
ちょっと容量の大きなファイル(PDF)をSDカードに書き込んで、
表示させてみました。正しくファイルが読めてます。
やはり、WindowsXPは最大128セクタ(64KB)を単位に読みにきます。
一部のログを公開。
あと、ハードウェアのプロパティを見てみると、「Micro RX62N SD R/W」と表示されてます。
これは、SCSIコマンドのInquiryで設定した文字列が使われるようです。
さて、連続Readは問題なくできたぽいので、次は連続ライト、フォーマットに挑戦です。
-----------------------------------------------------------------------
2012/05/1
しばらく更新を怠ってましたが、↑の後、ちょこっとバグ直したらあっさりライト、フォーマットも動きました。CristalDiskMarkも動かしてみましたが、一応動くのは動いたのですが、あまりに遅く。。。
速度改善でDMAを使ってみたりしましたが、RX62NはRAMが少なく、SH-2Aに乗り換えました。
USB R/Wは完成ということで。
2012年1月10日火曜日
RX62N SDカード制御
購入したもの。
参考にさせてもらおうと思ってるサイト
http://mycom1.cocolog-nifty.com/blog/2008/11/sd-6fe4.html
http://arms22.blog91.fc2.com/blog-entry-294.html
-----------------------------------------------------------------------
やっと、はんだ付けしました。SDカードコネクタが2.54mm間隔じゃないので、ちょっと難しかった。。今回はライトプロテクト端子と、カード検出端子の接続はあきらめました。
ピンヘッダ、買っといてよかったです。12pinのうち、9pin使いました。
まずは、SPIモードで初期化を通すとこが目標!!
-----------------------------------------------------------------------
めちゃ苦労して、やっとキました。
つまづいた原因は、、「SPIの罠」ってサイトで気づきました。。ググッてください。
ついでに動画も。ちょいデカイ。
さて、あとは、ゴリゴリ書くだけやなぁ。
-----------------------------------------------------------------------
追記:
初期化が通り、tranステート(data-transfer mode)に遷移しました!
Read/Writeは近い。
-----------------------------------------------------------------------
長い間、躓いてました。。
キタようにも見えますが、MBRのデータにしてはシンプルすぎるような。。しかし、末尾の55AAはちゃんとあるので、一応キてるような感じです。
何に躓いてたかというと、なんか不安定な感じで、動いたり動かなかったり。最初はデータラインをプルアップするために、ブレッドボードを介してたんだけど、それが悪いのかと思い、結局、ハンダ付けしました。
不安定さは無くなったものの、データ自体の確認が必要かな。
-----------------------------------------------------------------------
2011/12/12
FATを載せて、デバッグしてました。
ついにきました!
ようやくファイルを認識しました。
次は、SDカード制御最終目標のLCDに転送レート表示です。年内に間に合うか!?
-----------------------------------------------------------------------
2012/1/1
明けましておめでとうございます。
年越しは、鐘の音を聞きつつ、有意義にも半田付けとデバッグでした。
さて、FATに手間取っていながらも、年越しにSDカード検出とライトプロテクト検出ができました。
最初に、カード抜いた状態でポート確認(コマンドd) ⇒ カード無しを検出
次に、カードを挿入した状態でポート確認 ⇒ カード有りを検出
さらに、カードのライトプロテクトスイッチをONにしてカードを挿入 ⇒ カード有り&ライトプロテクト有りを検出
専用基板(このトピックの上のほうの画像)では、カード検出とライトプロテクト検出を諦めましたが、今回のオリジナル基板のSDカードスロットは大成功でした。
-----------------------------------------------------------------------
2012/1/4
ようやく、ファイルオープン、ファイルリードが出来るようになりました。
そこで目標の転送レート表示を7SEGでやってみました。
動画だと見えにくいですが、
だんだん転送レートが上がらなくなってるのはソフトのどっかがボトルネックになってると思われます。よって、たとえ24MHzが動いたとしても1MB/sまでは遠いでしょう。
なんせ、まだシングルリード(CMD17)でやってます。。
今後の速度改善ですが、
ファイルライトは実装完了、デバッグ中です。
-----------------------------------------------------------------------
2012/1/4
マルチリードに対応しました。
結果は4MHzで152.2KB/sでした。思ったよか上がったなぁ。
あ、昨日は512byte単位で時間と転送レートがUARTで表示されてたけど、
今日は16KB単位でUART転送が入ったので、結果的にUARTの表示が大きく減ってるのも寄与してるかな。
なら、まぁまぁ妥当かなと。
黄土色の残りバイト数のログを消したところ、4MHzで244.1KB/sでした。。
UARTって遅いんやなぁ。。
32bit転送に対応。4MHzで336.5KB/s。意外と早くならなかったかな。
あとは非同期化くらいしか。。。
よく考えてみると、8bit転送なので、理論値でも500KB/sか。非同期化で400KB/s超えたら十分なとこですね。
-----------------------------------------------------------------------
2012/1/8
ファイルライトに対応しました。
RX62にはCRC演算回路が付いてるので、それも使うようにしました。
CRC演算で少し遅くなったけど、24MHzまで動くようになりました。
結果:
-----------------------------------------------------------------------
2012/1/8 追記
簡単な非同期化をやってみました。(送信部と受信部を分割)
Readの24MHzが822.9KB/sまで改善しました。
理論値は3MB/sなので、ちょっと遅いですねぇ。。。
シリアルの表示を全て止めると、1.36MB/sでした!
Writeの24MHzも1.19MB/s!
-----------------------------------------------------------------------
2012/1/10
この更新でSDカード制御についての投稿は〆たいと思います。
Readで2MB/s突破です!!
パフォーマンスは1000byte換算なのでギリ突破です。
Writeも1.7、1.8MB/s程度出てますので、上々です。
次は別のことをやってみようと思います。
- ヒロセSDカードコネクタ DM1B-DSF-PEJ(82) (190円) 秋月電子通商
参考にさせてもらおうと思ってるサイト
http://mycom1.cocolog-nifty.com/blog/2008/11/sd-6fe4.html
http://arms22.blog91.fc2.com/blog-entry-294.html
-----------------------------------------------------------------------
やっと、はんだ付けしました。SDカードコネクタが2.54mm間隔じゃないので、ちょっと難しかった。。今回はライトプロテクト端子と、カード検出端子の接続はあきらめました。
ピンヘッダ、買っといてよかったです。12pinのうち、9pin使いました。
- ピンヘッダ 12pinシングル (84円) 秋月電子通商
まずは、SPIモードで初期化を通すとこが目標!!
-----------------------------------------------------------------------
めちゃ苦労して、やっとキました。
つまづいた原因は、、「SPIの罠」ってサイトで気づきました。。ググッてください。
ついでに動画も。ちょいデカイ。
さて、あとは、ゴリゴリ書くだけやなぁ。
-----------------------------------------------------------------------
追記:
初期化が通り、tranステート(data-transfer mode)に遷移しました!
Read/Writeは近い。
-----------------------------------------------------------------------
長い間、躓いてました。。
キタようにも見えますが、MBRのデータにしてはシンプルすぎるような。。しかし、末尾の55AAはちゃんとあるので、一応キてるような感じです。
何に躓いてたかというと、なんか不安定な感じで、動いたり動かなかったり。最初はデータラインをプルアップするために、ブレッドボードを介してたんだけど、それが悪いのかと思い、結局、ハンダ付けしました。
不安定さは無くなったものの、データ自体の確認が必要かな。
-----------------------------------------------------------------------
2011/12/12
FATを載せて、デバッグしてました。
ついにきました!
ようやくファイルを認識しました。
次は、SDカード制御最終目標のLCDに転送レート表示です。年内に間に合うか!?
-----------------------------------------------------------------------
2012/1/1
明けましておめでとうございます。
年越しは、鐘の音を聞きつつ、有意義にも半田付けとデバッグでした。
さて、FATに手間取っていながらも、年越しにSDカード検出とライトプロテクト検出ができました。
最初に、カード抜いた状態でポート確認(コマンドd) ⇒ カード無しを検出
次に、カードを挿入した状態でポート確認 ⇒ カード有りを検出
さらに、カードのライトプロテクトスイッチをONにしてカードを挿入 ⇒ カード有り&ライトプロテクト有りを検出
専用基板(このトピックの上のほうの画像)では、カード検出とライトプロテクト検出を諦めましたが、今回のオリジナル基板のSDカードスロットは大成功でした。
-----------------------------------------------------------------------
2012/1/4
ようやく、ファイルオープン、ファイルリードが出来るようになりました。
そこで目標の転送レート表示を7SEGでやってみました。
動画だと見えにくいですが、
- 最初の水色のログ:SDカードをマウントしたときのFATパラメータのログ
- 次のファイルリード:初期化時のSDクロック制限である400KHz以下(実際には375KHzs)でMP3ファイルリード(28.7KB/s) ※512byte * 100(50KB)リードしてます
- 黄土色の1行のログはSPIのクロック(SDクロック)を上げたログ(375KHz → 1MHz)
- あとは3と2の繰り返し
- 375KHz:28.7KB/s
- 1MHz:58.9KB/s
- 2MHz:83.3KB/s
- 3MHz:93.3KB/s
- 4MHz:99.8KB/s(ちょこちょこ100KB/s超え)
- 6MHz:エラー。。。(バグと思われ)
- 12MHz:測定未
- 24MHz:測定未(RXのSPIとしてはこのクロックが最高)
だんだん転送レートが上がらなくなってるのはソフトのどっかがボトルネックになってると思われます。よって、たとえ24MHzが動いたとしても1MB/sまでは遠いでしょう。
なんせ、まだシングルリード(CMD17)でやってます。。
今後の速度改善ですが、
- マルチリード(CMD18)対応 ※2割増し程度と予測
- SPIの転送単位を8bitから32bit転送へ ※3倍増しと予測
- SPI転送完了を待っちゃってるところを非同期化 ※2割増しと予測
- 測定中のUARTをストップ(7SEGのみ表示) ※1割増しと予測
ファイルライトは実装完了、デバッグ中です。
-----------------------------------------------------------------------
2012/1/4
マルチリードに対応しました。
結果は4MHzで152.2KB/sでした。思ったよか上がったなぁ。
あ、昨日は512byte単位で時間と転送レートがUARTで表示されてたけど、
今日は16KB単位でUART転送が入ったので、結果的にUARTの表示が大きく減ってるのも寄与してるかな。
なら、まぁまぁ妥当かなと。
黄土色の残りバイト数のログを消したところ、4MHzで244.1KB/sでした。。
UARTって遅いんやなぁ。。
32bit転送に対応。4MHzで336.5KB/s。意外と早くならなかったかな。
あとは非同期化くらいしか。。。
よく考えてみると、8bit転送なので、理論値でも500KB/sか。非同期化で400KB/s超えたら十分なとこですね。
-----------------------------------------------------------------------
2012/1/8
ファイルライトに対応しました。
RX62にはCRC演算回路が付いてるので、それも使うようにしました。
CRC演算で少し遅くなったけど、24MHzまで動くようになりました。
結果:
- Read
- 4MHz:321.8KB/s
- 6MHz:407.3KB/s
- 8MHz:475.5KB/s
- 12MHz:566.3KB/s
- 24MHz:689.8KB/s
- Write
- 4MHz:318.4KB/s
- 6MHz:405.4KB/s
- 8MHz:472.1KB/s
- 12MHz:565.9KB/s
- 24MHz:684.9KB/s
-----------------------------------------------------------------------
2012/1/8 追記
簡単な非同期化をやってみました。(送信部と受信部を分割)
Readの24MHzが822.9KB/sまで改善しました。
理論値は3MB/sなので、ちょっと遅いですねぇ。。。
シリアルの表示を全て止めると、1.36MB/sでした!
Writeの24MHzも1.19MB/s!
-----------------------------------------------------------------------
2012/1/10
この更新でSDカード制御についての投稿は〆たいと思います。
Readで2MB/s突破です!!
パフォーマンスは1000byte換算なのでギリ突破です。
Writeも1.7、1.8MB/s程度出てますので、上々です。
次は別のことをやってみようと思います。
2011年12月30日金曜日
ZigBee 立上げ
ZigBeeについて調査。
うーん、まだまだ調査が必要だが、シリアル(UART)を無線に置き換えるだけなら、お金をかければ簡単にできる模様。
-----------------------------------------------------------------------
後日、ラッキーなことに、おもちゃ買ってもらったので、追加部品の検討。
-----------------------------------------------------------------------
2011/12/30
秋月の変換基板を購入
とりあえず、PCと繋ぐ用のモジュール作成完了。
Digi社HPから設定アプリケーションのダウンロード。
Support -> Diagnostics, Utilities and MIBs
XCTU 32-bit ver. 5.2.7.5 installer
インストールして、PC-USBシリアル変換-XBeeと接続して、アプリ起動。
XBeeは工場出荷時に9600bpsに設定されているらしい。
通信テスト
OK。
アドレス設定(それぞれ相手のアドレスを設定) ボーレート:115200bps
設定完了。
うまくいかないので、いろいろやってたら、9600bpsに落ちてた。
微妙にteraterm同士で通信はできました。
-----------------------------------------------------------------------
2012/1/2
USBシリアル変換のジャンパ設定を追記
- ZigBee Allianceから認証取得したDigi International社のモジュールが有名
- XBee ZB(低出力型)とXBee-PRO ZB(高出力型)がある
- XBee ZB(低出力型):屋内40m、屋外120m (1700円) スイッチサイエンス
- XBee-PRO ZB(高出力型):屋内120m、屋外1km(日本国内10mAの場合) (2800円) スイッチサイエンス
- 更に、アンテナ種別として3つ(使い分け不明だが、チップアンテナ2つで良さそう)
- チップアンテナ:PCBアンテナにランニングチェンジ?
- ワイヤーアンテナ:
- U.FLコネクタ(外付けアンテナ):いいアンテナらしい
- 親側(コーディネータ)をPCにUSB接続して、子側からのデータをシリアルでPCにtera termで受信する例がWebでよく掲載されている。しかし、これとXBee ZBを2個買うと、1700*2+2495=5895円!!高い。。USBシリアル変換でもいけそうなので、代用
- XBeeエクスプローラUSBドングル (2495円) スイッチサイエンス
- XBeeの動作モードは2つ
- 透過モード:UARTと同じで経路を無線にできるモード、非常に簡単らしい。
- APIモード:透過モードより複雑なことが出来るらしい。
うーん、まだまだ調査が必要だが、シリアル(UART)を無線に置き換えるだけなら、お金をかければ簡単にできる模様。
-----------------------------------------------------------------------
後日、ラッキーなことに、おもちゃ買ってもらったので、追加部品の検討。
-----------------------------------------------------------------------
2011/12/30
秋月の変換基板を購入
- XBeeProRFモジュール(PCBアンテナタイプ) (おもちゃ) x2
- USBケーブル(Aオス-ミニBオス) (おもちゃ) x2
- XBee用2.54mmピッチ変換基板 (300円) 秋月電子通商 x2
- ピンソケット(メス) 1x10(10P) (40円) 秋月電子通商 x4
- 丸ピンICソケット(24P)[600mil] (70円) 秋月電子通商 x2
- USBケーブル(Aオス-ミニBオス)[1.5m](A-miniB) (110円) 秋月電子通商
とりあえず、PCと繋ぐ用のモジュール作成完了。
Digi社HPから設定アプリケーションのダウンロード。
Support -> Diagnostics, Utilities and MIBs
XCTU 32-bit ver. 5.2.7.5 installer
インストールして、PC-USBシリアル変換-XBeeと接続して、アプリ起動。
XBeeは工場出荷時に9600bpsに設定されているらしい。
通信テスト
OK。
アドレス設定(それぞれ相手のアドレスを設定) ボーレート:115200bps
設定完了。
うまくいかないので、いろいろやってたら、9600bpsに落ちてた。
微妙にteraterm同士で通信はできました。
-----------------------------------------------------------------------
2012/1/2
USBシリアル変換のジャンパ設定を追記
- J1:2-3間をショート(1-2間ショートでTXD、RXDを3.3V、2-3間ショートで5V)
- J2:ショート(ショートでUSBから電源供給、オープンで外部から電源供給)
2011年12月18日日曜日
RX62N 基板
ユニバーサル基板で作成中です。まだまだ途中だけど、疲れた。。。
-----------------------------------------------------------------------
-----------------------------------------------------------------------
途中経過です。
やっと、一次完成版!次はXBeeも付ける!
2011年12月16日金曜日
RX62N 疑問点
RX62Nマイコン基板でいろいろやってみてますけど、いくつか分かってないところがあるので、ひとまず列挙。追加の疑問と、解決したらその内容も追記していきます。
[割込み取り逃しの件]
[その他]
[割込み取り逃しの件]
- やりたいこと:DMAを使ったシリアル出力(RS232C) → WindowsXP TeraTerm
- 環境:Interface付属のRX62N基板、HEW使用、SCI2版
- 手順:リセット解除 → スタートアップ → main() → setpsw_i() → DMAC2初期化 → UART0初期化 → 文字列出力用に"SCI0 initialize done"をRAMに設定 → DMA起動設定 → SCI0.SCR.BYTE = 0xF0; → しばらくしてブレーク(1)
- DMAC2初期化詳細
- 途中省略
- ICU.DMRSR2 = 216; // DMA起動要因をTXI0に設定
- IEN( DMAC, DMAC2I ) = 1; // 割込み許可
- IPR( DMAC, DMAC2I ) = 5; // 割込み優先レベル設定
- UART0初期化詳細
- 途中省略
- IEN( SCI0, TXI0 ) = 1; // 割込み許可
- IPR( SCI0, TXI0 ) = 1; // 割込み優先レベル設定
- DMA起動設定詳細
- DMAC2.DMTMD.BIT.DCTG = 1; // 転送要求選択(周辺モジュール)
- DMAC2.DMTMD.BIT.SZ = 0; // 8bit転送
- DMAC2.DMTMD.BIT.MD = 0; // 転送モード設定(ノーマル転送)
- 途中省略
- DMAC2.DMCSL.BIT.DISEL = 0; // 起動要因の割込みを発生させない
- DMAC2.DMINT.BIT.DTIE = 1; // 転送終了割込み許可
- DMAC2.DMCNT.BIT.DTE = 1; // DMAC起動許可
- 割込み関数定義済み、割込み関数でブレーク(2)
- しかし、割込み発生せず、 (1)のブレークでストップ
- レジスタを見てみると、IR = 1、IEN = 1、PSW.I = 1 の状態
[その他]
- CN2の38ピン、CN3の40ピンに5Vがきてるが、JP1が最初から繋がってないのはなぜか?
- USB接続でHEWがよく固まる。。なぜか?
- 1つ便利なやり方発見。リセットスイッチを押す時間が短いとうまくいかないが、長い時間押して離すと、USBの抜き差しと同じ効果あり。固まる現象がおさまるわけではないが、いちいち抜き差ししなくてよくなった。
- 知人が素晴らしいアイディアを創出。スイッチで外部割込みを行い、デバッガを止める方法。シリアルでも可能だが、シリアルはコマンド受信で使用しているので、常に受け付けるようにしていないため、スイッチの外部割込みを採用。
- ブレークの一覧表示はどうやってするの?
- RX62Nに限らないが、配線するリードで絶縁できるもの(本ブログでは青いリードを使用)って、一般的に何が使われるの?秋月にもスズメッキ線は売られてるが、それ以外は見当たらない。今使ってる青いリードは少し太くて扱いにくい。
- これもRX62Nとは関係ないけど、シリアルでデータを表示する際、ASCIIも表示させてるが、制御コードの場合は表示が崩れる。そのため、ASCIIコード表を見て、0x1F以下、0x7Fは'.'に変換するようにしているが、CR(0x0D)、いわゆる'\n'はCR(0x0D)+LF(0x0A)に変換しており、データで0x0Dがきた場合と区別がつかない。まぁデータの場合とそれ以外とをフラグでも立てて分岐してやればいいのだけど、もっとスマートな方法はないものか。
2011年12月3日土曜日
ARM Cortex-M3 調査
R社マイコンでしばらく遊んでるけど、そろそろARMにも手を出したい。いくつか調査したのでメモ。
うーむ、どれにするか。
- ARM最新コアCortex(コルテックス or コアテックス)はM系(ローエンド)、A系(ハイエンド)が有名
- M系の中でもM0とM3が有名
- Cortex-M3のマイコンボードとしては、STマイクロ、NXPが有名
- STマイクロはSTBee(STM32)、NXPはLPCシリーズ(LPC1768)、mbedが有名
- STM32の書籍
- STM32マイコン徹底入門 (2310円) ※下のディスカバリはマイコン基板の動作説明が中心っぽいのに比べて詳しくマイコン自身の説明が多そう
- 世界の定番ARMマイコン 超入門キット STM32ディスカバリ (2520円) ※マイコン基板付きの完全版あり(4200円) ※さらにCQ出版特設サイトあり STM32ディスカバリの部屋
- LPC(1768等)の書籍
- ARMマイコン パーフェクト学習基板 (3780円) ※付属基板はLPC1343
- 2枚入り!組み合わせ自在!超小型ARMマイコン基板 (3000円) ※付属基板はLPC1114(Coretex-M0)
- mbedの書籍
- ARMマイコン No.1 (2310円)
うーむ、どれにするか。
2011年11月20日日曜日
RX62N LCD制御
LCD制御を試す。
FPGAでは既に実施済みだけど、マイコンでもやってみる。
写真だと紫が見えるけど、実際はキレイなブルーです。
秋月のHPの画像も参考に貼り付け。
LCDについて情報整理と考察を行います。
FPGAでは既に実施済みだけど、マイコンでもやってみる。
- 3.3V動作LCDキャラクタディスプレイモジュール (800円) 秋月電子通商
写真だと紫が見えるけど、実際はキレイなブルーです。
秋月のHPの画像も参考に貼り付け。
LCDについて情報整理と考察を行います。
- LCDコントローラは昔の日立HD44780に互換で作られている場合が多い
- FPGA(Spartan3A)もHD44780互換と明記されていた
- 4bitモードを使用した場合に未使用端子(DB4~DB7)の処理は?
- 内部的にプルアップされてるらしい(抵抗ではなくFETらしい)
- 今回使用したLCDはSC1602BBWB-XA-LB-Gという型番
- 2列で2x7の14ピンが出ているが、ブレッドボード接続に不向き、1列が使いやすい
2011年11月6日日曜日
RX62N 7セグLED制御
ポート制御を使って、7セグLEDを制御してみる。
ブルーの7セグLEDを購入していたが、データシートを見ると順電圧がTYPで3.5V。。3.3Vでは光らないのでは。。
USBから供給される5V電圧もあるけど、Interface付録RX62Nマイコン基板のパターンを半田ショートしないといけない(らしい)。半田ショートしてしまうと元に戻せない?ので、なぜ最初から供給されてないかの理由が分かってないため、気が進まない。
ひとまず、3.3Vで光るかどうか実験。抵抗無しは危険そう(LEDは0Ω)なので、とりあえず小さい抵抗を付けて実験。
普通に光りましたな。
続いて、まじめに全部抵抗つけて確認。
またもや普通に光りましたな。しかし、配線が汚い。。
もうちょっと見栄えを考えた配置を考えなければ。
ブルーの7セグLEDを購入していたが、データシートを見ると順電圧がTYPで3.5V。。3.3Vでは光らないのでは。。
- 高輝度ブルー7セグメントLED表示器(カソードコモン)C-551UB (200円) 秋月電子通商
USBから供給される5V電圧もあるけど、Interface付録RX62Nマイコン基板のパターンを半田ショートしないといけない(らしい)。半田ショートしてしまうと元に戻せない?ので、なぜ最初から供給されてないかの理由が分かってないため、気が進まない。
ひとまず、3.3Vで光るかどうか実験。抵抗無しは危険そう(LEDは0Ω)なので、とりあえず小さい抵抗を付けて実験。
普通に光りましたな。
続いて、まじめに全部抵抗つけて確認。
またもや普通に光りましたな。しかし、配線が汚い。。
もうちょっと見栄えを考えた配置を考えなければ。
2011年11月5日土曜日
RX62N ポート制御
簡単なポート制御をやってみる。
RX62Nのマニュアル(ハードウェア編)を見ると、ポートは周辺回路との兼用端子になっている場合がほとんどであり、ポートとして使用するには何らかの機能設定レジスタに設定してやればよい、と思って探すが、よく分からない。。ま、ブロック図を見ると、他は入力端子なので、出力設定しておけば、どっちに設定されてても問題なさそう。
回路図とWebページを頼りに使いやすそうなところとして、ポート4を選択。理由はA/Dコンバータ入力と割込み入力との兼用端子であり、周辺回路として使うことはなさそうと考えたため。
設定レジスタとしては、以下の4つ
簡単にできました。
RX62Nのマニュアル(ハードウェア編)を見ると、ポートは周辺回路との兼用端子になっている場合がほとんどであり、ポートとして使用するには何らかの機能設定レジスタに設定してやればよい、と思って探すが、よく分からない。。ま、ブロック図を見ると、他は入力端子なので、出力設定しておけば、どっちに設定されてても問題なさそう。
回路図とWebページを頼りに使いやすそうなところとして、ポート4を選択。理由はA/Dコンバータ入力と割込み入力との兼用端子であり、周辺回路として使うことはなさそうと考えたため。
設定レジスタとしては、以下の4つ
- データディレクションレジスタ(DDR)
- 初期値:00h(全て入力)
- 入力:1、出力:0
- データレジスタ(DR)
- 初期値:00h
- 出力データ格納
- ポートレジスタ(PORT)
- 初期値:不定
- ポートの端子状態を反映
- 入力バッファコントロールレジスタ(ICR)
- 初期値:00h(全て無効)
- ポートを入力設定にする場合に有効にしなければならないらしい
簡単にできました。
2011年11月1日火曜日
ブレッドボード
今日は少し早く帰れたので、購入したブレッドボードを使ってみた。
3.3V - Vf = 200Ω * I
Vfは低くても1.6Vとして、1.7V / 200Ω = 8.5mA

LEDと抵抗200Ωは大昔にシリコンハウス?で購入したもの。
ブレッドボード便利すぎ。
続いて、手持ちの75Ω入れた場合を考えると、1.7V / 75Ω = 22.7mA
む、ちょっと危険。ま、やってみよ。
普通にいけました。データシートないので、これ以上はわからんか。。
- EIC-102J(600円) 16cm x 5.5cm 秋月電子通商 ※ジャンプワイヤケース:16.5cm x 6cm
- ブレッドボード・ジャンパーワイヤ(オス-メス) 15cm(青) (300円) 秋月電子通商
3.3V - Vf = 200Ω * I
Vfは低くても1.6Vとして、1.7V / 200Ω = 8.5mA

LEDと抵抗200Ωは大昔にシリコンハウス?で購入したもの。
ブレッドボード便利すぎ。
続いて、手持ちの75Ω入れた場合を考えると、1.7V / 75Ω = 22.7mA
む、ちょっと危険。ま、やってみよ。
普通にいけました。データシートないので、これ以上はわからんか。。
登録:
投稿 (Atom)





