質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

119閲覧

M5StackBasic2.7にUSB Host Sheild(M5STACK-M020)を接続するとUHSの初期化処理でエラーになる

yossudo

総合スコア1

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2024/03/19 11:42

実現したいこと

初期化処理が正常に実行されること。

発生している問題・分からないこと

Usb.Init()で-1が返却されエラーが発生する。

エラーメッセージ

error

1OSCOKIRQ failed to assert

該当のソースコード

c/c++

1void setup() 2{ 3 Serial.begin( 115200 ); 4#if !defined(__MIPSEL__) 5 while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection 6#endif 7 Serial.println("Start"); 8 9 if (Usb.Init() == -1) 10 Serial.println("OSCOKIRQ failed to assert"); 11 12 delay( 200 ); 13}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果
  • printfデバッグを行い、usbhost.hのuint16_t MAX3421e< SPI_SS, INTR >::reset()内のwhile文が65536回回っていることを確認。MAX3421eをリセット操作してもクロックが出ないようだ。

補足

  • UHSライブラリはarduino ideが指定するgithubの最新とgithubのM5stackリポジトリのもの、両方を試したがどちらもエラーが発生した
  • 数年前に試したときは正常に初期化できた。UHSライブラリは当時のものが残っていたので、それでも試してみたがエラーが発生した。M5Stack(M5Core)のBSPは更新されているので、全く同じ環境は作れず悩んでいる

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yossudo

2024/03/26 06:06

追加情報です。 ----- その後、Usb.Init()の内容を解析したところ、usbhost.hのreset()にてUSBIRQレジスタのbmOSCOKIRQビットが立たずに抜けてくることが分かりました。 直前でUSBCTLレジスタにbmCHIPRESを立てリセットし、0x00でリセット解除してるので、本来であればその後PLLが発信し安定したらUSBIRQレジスタのbmOSCOKIRQビットが立つはずなのが立たないようです。 試しに発信安定待ち時間も増やしてみましたが、永遠にbmOSCOKIRQが立つことはありませんでした。 どのような理由でbmOSCOKIRQが立たないのでしょうか? ----- /* reset MAX3421E. Returns number of cycles it took for PLL to stabilize after reset or zero if PLL haven't stabilized in 65535 cycles */ template< typename SPI_SS, typename INTR > uint16_t MAX3421e< SPI_SS, INTR >::reset() { uint16_t i = 0; regWr(rUSBCTL, bmCHIPRES); regWr(rUSBCTL, 0x00); while(++i) { if((regRd(rUSBIRQ) & bmOSCOKIRQ)) { break; } } return ( i); }
guest

回答1

0

自己解決

その後の調査の結果、初期化エラーは物理的な接触不良が原因であることが判明しました。購入時にM5Stackの底面を固定するネジが付属していなかったので気にしていませんでしたが、USB Host Shield(M5STACK-M020)を挟んで独自のネジで固定したところ、Usb.init()が成功するようになりました。
ご覧いただいた方々、大変失礼しました。ありがとうございました。

投稿2024/03/27 05:07

yossudo

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問