Raspberry pi pico - 福島の球使い
2021/07/22 (Thu) 15:41:00
Raspberry pi picoとI2Sで,ネット検索するといろいろひっかかるよう
です.
Picoに載っているARMのチップRP2040はかなりやすいですね.
https://www.switch-science.com/catalog/7173/
多ピンのマイコンが必要な場合は,PICよりRP2040のほうがいいかも..
Re: Raspberry pi pico - ヒロ
2021/07/22 (Thu) 20:00:53
チップで調達するよりPICOをコントローラとして買った方が無難かな~。FLASH含め、色々と乗っていますから。
PICに比べると能力はかなり上ですので、用途によっては便利でしょうね。
Re: Raspberry pi pico - 福島の球使い
2021/07/22 (Thu) 20:37:05
Flashはオンチップのようです.
Re: Raspberry pi pico - ヒロ
2021/07/22 (Thu) 21:25:30
そうなんですね。
データシートのサマリーをみてもROM容量が書いてないので、てっきり外付けFLASHからのプログラム読み込みのブートローダ程度しか乗っていないのかと思っていました。
Re: Raspberry pi pico - 福島の球使い
2021/07/23 (Fri) 12:01:06
すみません.
https://datasheets.raspberrypi.org/pico/pico-datasheet.pdf
には,On boardの2MByte Flashと書いてあります. このファイルの
24ページに回路図があります.ボートには,RP2040の他は,電源IC,
フラッシュ,クロック,LEDとGPIOくらいのようで.
Re: Raspberry pi pico - ヒロ
2021/07/25 (Sun) 10:49:49
開発環境を揃えるのが1つのハードルみたいで、
PC-WINベースだとかなり面倒の様子。
RasPiをベースにするのが簡単のようです。
ただ、PICOのスイッチを押しながらUSBを差し込む(電源投入)すると、あたかもUSBメモリのように扱えて、そこにUF2という形式(実行ファイル?)を書き込むと実行するようです。ということで、プログラム自体の書き換えはPC-WINでも簡単にできるのが便利そうです。
Re: Raspberry pi pico - 自作野郎
2021/08/06 (Fri) 16:47:44
8月5日のtea time 読みました。
https://raspberrypi.github.io/pico-sdk-doxygen/group__repeating__timer.html
によれば、タイマー割り込みのキャンセルは、cancel_repeating_timer()だそうです。
Re: Raspberry pi pico - ヒロ
2021/08/06 (Fri) 18:30:42
情報ありがとうございます。
PICでは赤外線リモコンの信号がきたら、そちらの処理にかかりっきりになるので、タイマー割り込みを停止する必要があります。そのため、どうやってPICOのタイマー割り込みを止めようか探していました。
ただPICOの処理速度が速いので赤外線リモコンの信号で割り込みをかけて、PICOの内部時計情報とともに保存しておいて、あとでまとめて分析する方法もあるな~と思ったりです。でも、そんな処理は反対にPICには移植できないのでどうしようかな~というところです。
Re: Raspberry pi pico - 自作野郎
2021/08/10 (Tue) 12:59:35
またまたお邪魔します。
8月8日のtea time読みました。
FLASH ROMの領域って、ホストで開発したファームウェアを書き込む領域なので、ファームウェアが壊してしまうとまずくありませんか?
広大なFLASH ROM領域を、ファームウェアの領域と一時記憶の領域に分ければいいのでしょうが、Cortex Mに書かれているブートローダーを書き換えなければいけないような気がします。
Re: Raspberry pi pico - ヒロ
2021/08/10 (Tue) 14:50:40
まあ、マニュアルにもunsafeとありますからね。
2MBのFLASHメモリがありますが大きなプログラムでも半分は使わないでしょうから、メモリの後半なら適当にアクセスしても問題ないと思っています。
Re: Raspberry pi pico - 自作野郎
2021/08/11 (Wed) 16:58:56
メモリの後半が安全かどうかは自信がありません。
ファームウェアは肥大化しますが、FAT-FSを組み込んで保存データをファイルとして書き込んでしまうという手もあります。
Re: Raspberry pi pico - ヒロ
2021/08/11 (Wed) 18:50:48
>FAT-FSを組み込んで保存データをファイルとして書き込んでしまうという手もあります。
PICOのFLASHメモリーの一部をディスクシステムとして代用するのですね。んん~だんだんハードルが上がってきます(笑。
Re: Raspberry pi pico - 自作野郎
2021/08/16 (Mon) 16:27:13
説明不足で誤解を生んでしまったようです。すみません。
ファームウェアを書き込む領域はどうせFAT領域だろうから、FAT-FSを組み込めばファームウェア自身とファームウェアのデータが共存できますね、という意味でした。
面倒だけど、確実では?
Re: Raspberry pi pico - taku
2021/08/18 (Wed) 19:07:58
こんにちは。
いつも楽しくROMさせてもらっています。
読んでいて2点ほど気になった事があったので、念のため書いておきますね。
もう解決済みでしたら、読み飛ばしていただければ(笑)
【外部クロックの計数】
Picoで外部クロックがカウントできるペリフェラルは、PIOのステートマシンとPWMしかないようです。
https://datasheets.raspberrypi.org/rp2040/rp2040-datasheet.pdf
こちらのデータシートの4.5.1.にPWMのブロックダイアグラムがあり、これを見ると確かに外部入力可能な構成に見えます。
ヒロさんの目的にかなうかどうかまでは調べていませんが。。。
【フラッシュのセルフプログラミング】
https://datasheets.raspberrypi.org/pico/raspberry-pi-pico-c-sdk.pdf
こちらはSDKのマニュアルですが『4.1.9. hardware_flash』に色々な事が書いてありますね。要点をまとめますと。。。
1) 2つのコアが動作している場合にはunsafe。この場合、フラッシュプログラミング中にXIP(eXecute-In-Place)アクセスが発生しないようにする事。
2) 割り込みハンドラまたは割り込みベクターテーブルがフラッシュ上にある場合にはunsafe。この場合、呼び出し前に割り込み禁止にする必要がある。
なぜこうした制約が付くのかを考えていたのですが、RP2040のデータシートの『2.6.3. Flash』にXIPがどのように働くかが説明されていますね。
簡単に言うと、QSPIフラッシュがあたかもメモリバスに繋がっているかのごとくアクセス出来る機構で、フラッシュの任意のアドレスへのアクセスがキャッシュを通じて透過的にQSPIの通信に変換される、という事ですね。
ここからは私の推測ですが、こうした制御は通常ワイアードロジックになっているのではないでしょうか。
フラッシュのプログラミングやイレーズに掛かる時間は、CPUの実行サイクルに比べると遙かに長い不定の時間と言えるので、XIPが動作しようとした際にフラッシュが不定時間ビジーだと、ビジー中はCPUの実行が止まるのだろうし、ビジー解除された後に安定動作するか保証出来ないといった事では無いかと思うのですが。
Re: Raspberry pi pico - ヒロ
2021/08/18 (Wed) 22:08:42
情報ありがとうございます。
・外部クロック計数についてはGPIOピンのパルス幅を調べることで対応できそうです。PICOが125MHzと高速で動いているのと、LRCKが高々192kHzなので大丈夫そうです。ただ176.4kHzと区別するのはぎりぎりです。
・フラッシュについては、とりあえず使いたい書き込みサブルーチンがリンクできないので半分放置状態です。DIV5142上にEEPROMが搭載できるのでそちらをアクセスすることにしました。
でも、プログラム領域がフラッシュに入っているということはキャッシュをはずれるようなJMPやCALL命令が入ったら、ハードロジックだとしても、しばらくプログラム実行が遅延するようなことが生じるということなのでしょうね。シビアな制御にはかなり気をつかいそうな感じです。
Re: Raspberry pi pico - 自作野郎
2021/08/20 (Fri) 20:40:33
takuさんの情報を読んで、今更ながらRP2040のデータシートを読んでみました。確かに、フラッシュROMがメモリマップされています。
すると、「どうせファームウェアはFATだろう」という私の意見は間違いで、開発ホストから見てFATに書いていても、フラッシュROMにプレーンに展開されそうです。
それなら話は別です。ファームウェアのポインタ変数をフラッシュのアドレスに設定してポインタに書き込めばよいのではないでしょうか。
フラッシュROMに書き込む時に、『セクタサイズでブロックまるごとを書き換えなければならない』といったルールがあるかどうかは不明です。
Re: Raspberry pi pico - ヒロ
2021/08/20 (Fri) 22:20:26
>ファームウェアのポインタ変数をフラッシュのアドレスに設定してポインタに書き込めばよいのではないでしょうか。
FLASHとキャッシュの関係性から、もしポインタ書き込みでキャッシュに書き込めたとしても、FLASHまでさかのぼるのは無理と思います。FLASHに書き込むには flash_range_programというサブルーチンをつかってブロック単位での書き込みになるようです。