2020年1月17日金曜日

PIC32MX USBMSC USBメモリのアクセスが出来ない

なかなか進まない、USBメモリドライバの開発です。
PIC32MXでUSBメモリにアクセスするの、ようやく何とか出来るようになってきました。

20200111
前回までで、下記写真の右側のUSBメモリに、SCSIコマンドでアクセス出来るようになりましたが、左側のアマゾンで買った格安の青いUSBメモリと黒いUSBメモリが上手く動きません。 その為今一度、全てのUSBのDESCRIPTORを調べてみました。




20200115
DESCRIPTORを調べて対応して、下記写真の右側については、SCSIコマンドも上手く通りリードライトが出来るようになりました。
前回より一歩進んで黒いUSBメモリにもアクセス出来るようになりました。

黒いメモリが読めなかった原因が、IN/OUTのエンドポイント番号が他のUSBメモリと異なっていた為で、前回まで決め打ちでIN=EP1、OUT=EP2としていたのを、ENDPOINT DESCRIPTORを読込んで対応するようにしました。

その他、通信の各エンドポイントのDATA0/1の切り換えとか、BDTテーブルのピンポンバッファの指定が上手くなかったようでそのあたりも見直しました。

残るは、左側のアマゾンで買った格安のUSBメモリです。 これについてはSCSIコマンドのINQUIRYコマンドまでしか通らず、SCSIコマンドでのREAD・WRITEコマンドが出来ません。




20200116
アマゾンで買った格安USBメモリ(左の青いやつ)がどうしてもエラーとなるので、パソコンにWiresharkというソフトをインストールして、パソコンとUSBメモリとの通信をキャプチャする事にしました。 パソコンと 問題のUSBメモリとの間でどんなやり取りをしているのかを参考にしようというわけです。※パソコンからは問題のUSBメモリが普通に使える。

1点見つけたのは、"Test Unit Ready"のSCSIコマンドが上手く行かなかった原因が、CBWCB長(SCSIコマンド長)の指定が間違っていたことでした。そこを直し"Test Unit Ready"コマンドが通るようになりました。

このWiresharkというソフトは優れものでパソコンのいろんな通信の内容をパケットキャプチャできるのですが、残念ながら実際のUSBとパソコンの間の通信をキャプチャしている訳ではないので、PID、DATA0/1 などのいくつかの情報は取れないようです。 気になっていた、通信上のDATA0/1の遷移はわかりませんでした。


                       https://www.wireshark.org/


20200121
左側のアマゾンで購入した青い格安USBメモリは、どうしてもアクセス出来ないのでついに諦めました。。。パソコンからは読み書きできるのですけど、何が悪いんだろうなぁ。

2020年1月7日火曜日

PIC32MX USBMSC ドライバ試作

PIC32MX USBMSC ドライバがようやく何とか動き始めたので、一旦Githubにアップロードしました。

https://github.com/PlanetxGear/PIC32MX_USBMSC_Driver_sample

PIC24F用に作成したUSBMSCドライバをPIC32MX用に移植したのですが、これがどうやっても動かない。。。USBメモリのAttach/Detachは検出するものの、USBメモリに最初にAddressを書き込みに行ったところでウンともスンとも言わなくなる状態です。 結局、USBのコントロールレジスタにBDTテーブルのメモリアドレスを設定する箇所が間違っていて、ここを「仮想アドレスから物理アドレスに変換して」設定しないといけなかったのです。 ここを見つけるのに一月かかってしまいました。 うっすらと以前に同じ経験をしたような記憶も、、、忘れていましたが。。。 なんにせよDMAなどを使うときは要注意、、いやいやDMAをもっと活用して「仮想アドレスから物理アドレスに変換する」ことを頭に入れておかないといけないですね。


20200105

ついでにこの問題点について、どうやって気づいたかも記載しておきます。

つまずいた点は、PIC側からUSBに向けて USB Addressを設定する SETUPコマンドを送信しても、それが ACKなのかNAKなのかのリターンが帰ってこない現象です。(※実際はBDTのアドレス設定が間違っていたので、そこにACK,NAKが書き込めていない。)

USB peripheral のレジスタ設定手順と、USBへの供給クロック設定を何度も見直しましたが原因わからず、、結果USBへの供給クロック設定についての以下の2点について疑問が残りました。
1.USB PLL のロックステータスフラグ(ULOCK@OSCCON)がどうやっても”1”が立たない。
2.DEVCONF2のUSBENBLの設定が、DATASHEETの記述と、MCCの設定表記と食い違いがあるように思える。
※ちなみに1.2.について現状はまだ判然としていません。20200108

これらについて、実際にPIC32MXでどのように設定されるのかネットを色々さがしたのですが見つからず、Harmony v3 で作ったプロジェクトと比較してみる事にしました。しかしながら Harmony v3は使った事が無かったので、プロジェクトを作るのにも一苦労して出来上がったプロジェクトも またロクに動かすことができませんでした。 
USBモジュールやクロック設定した空のプロジェクトは出来てコンパイルも通す所までできますが、USB関連のFunctionが多くどれをどの順番でMain処理に並べて行けばよいのかがよくわからなかったのです。

そんな訳で続いて挑戦したのが、気分を変えてPIC32MMのテスト基板の組み上げと、MPLAB Xでのプロジェクト作成です。 PIC32MMのプロジェクトは、MCCからUSB(CDC、HID)の設定ができるので、 つまりこれを参考にしようというわけです。
MCCの設定は慣れたものなのでサクっと作り上げて、動かしてみたところDMA関係のレジスタに設定されたアドレス値が想定と異なっていたのでようやく気が付きました。 
後でマニュアルを確認しましたが Note にちゃんと「物理アドレスを設定せよ」と書いてありました。



最近は、取り組むプロジェクトが長丁場になる傾向があるのでブレッドボードはやめて、ユニバーサル基板にハンダ付けして組み上げるのですが、適当に作るのでいかんせん雑になります。作業も遅いので今回作ったPIC32MMの簡単なテスト基板でも4~5時間はかかってしまいました。

左から、PIC24FJ64GB002 / PIC32MX250F128B / PIC32MM0256GPM028






2020年1月2日木曜日

MPLAB HARMONY v3 インストール・セットアップ手順

20200102
HARMONY 3 のインストールの仕方で迷いましたので、備忘録として今回のインストールした手順を記載しておきます。

下記がHarmonyの使い方などが記載されているwikiページです。
https://github.com/Microchip-MPLAB-Harmony/mhc/wiki

HARMONY 3 はMPLAB X IDEのプラグインですので、MPLAB X IDEがインストールされている必要があります。 それとPIC32のコンパイラ XC32もインストールしておいてください。
・MPLAB X IDEのインストール
・XC32コンパイラのインストール


MPLAB X を開いて、Tools>plugins をクリックします。

Available Plugins のタブから、MPLAB Harmony Configurator 3にチェックを入れて、Install ボタンをクリックします。

表示された、License Agreement のポップアップで、I accept...にチェックを入れ、Installボタンをクリックします。

Plugin のインストールが終わったら、"Restart Now"にチェックを入れ、Finishボタンをクリックして、MPLAB X IDE を再起動します。


MPLAB X IDE を立ち上げて、Tools>Enbedded>MPLAB Harmony 3 Content Manager をクリックします。

開いたポップアップで、Framework を格納するPathを入力し、Nextをクリックします。
例>D:Microchip\HM3   ※あらかじめフォルダを作成しておくと良いでしょう。

Harmony Content Managerが開きますので、Remote Packages 欄の下の Select All にチェックを入れた後、右の View & Accept All Licences をクリックします。

Accept All Licenses にチェックを入れ、Close ボタンを押して画面を閉じます。

Download Selected を押して選択した Packages をダウンロードします。



Application Browserの方は、Sample Project です。お好みでダウンロードしてもよいでしょう。 ダウンロードが終わったら、右上の×ボタンを押して画面を閉じます。


以上です。

KT0913 FMラジオの作成(8) 出来上がったPCB基板にミスあり。

  FusionPCB から基板がとどきました。20240121. 1月11日に発注したので10日で出来上がって届きました。 早速組み立てましたがが、イヤホンジャックのフットプリントが裏返っており、痛恨のミス。。。 しかしながら、他にも問題が無いか一通り組み立ててチェックしました...