Multi Source Translation Content

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Multi Source Translation Content

Discussions

Sort by:
FRDM-MCXN947でMicroPythonをアニメーションかす (日本语ブログ) MicroPython, FRDM-MCXN947, ZephyrMicroPython, FRDM-MCXN947, ZephyrMicroPython, FRDM-MCXN947, ZephyrMicroPython、FRDM-MCXN947、Zephyr MicroPythonの主要ファミリーの研究開発、 Zephyr の Zephyr 、FRDM-MCXN947 の FRDM-MCXN947 設定。 Zephyr ポートと言っているのは、MicroPython をZephyr RTOSの上ですす移植版です。 MicroPython は通常、microPython で使用されます。その代わりに、Zephyr が対応しているボードなら動くこの士组みを使います (詳細はセクション1.3 )。 ビルド自体は、これまでもできました。ただしボード固有の設定が無かったため、がるのは最低制限のMicroPythonで、スクリプトを保存するファイルシステムも無し、I²CもSPIも使えませんでした。今回は、まず最初の一歩を踏み出します。 これでNXPのマイコンでMicroPythonを選択リムが広がりました。これまでは事実上、上のクロスオーバーMCUであるi.MX RTシリーズに限定されていましたが、そこにMCX Nシリーズという、より小さなスケールで手を出しやすい选選択リムがプラスされましたことになります。 このボードに有線のイーサネットがロードしている点も見ません。 MicroPython が安いボードの多くは、Wi-Fi や Bluetooth でネットワークにつなぎます。目的は電波と同じ、有線も有線、場面も同じです。この记事の後半では、ボードをWebサーバにしてブラウザからLEDを操作するところまでアニメーションかします。 一方では制限が一方にあります。 Zephyr ポートは、チップ専用のポートに比べて関数がツイストされます。同様に同じNXPのマイコンでも、i.MX RTけの ports/mimxrt には network.LAN() があってIPアドレスを実行時にSETできますが、Zephyrポートには network モジュール自体がありません。できるのは socket だけで、IP アドレスはビルド時にのみ決定められません。この记事では、それは制限と、実记にぶつかった問題の回避戦略も有って书いています(セクション 8.2を整理しました). それ以来、MicroPython が始まり、LED を光らせ、スイッチを読み、I²C や SPI のデバイスを動かし、最後にイーサネットを作るところまでを一通り説明します。 「MicroPythonをタッチするのは初めて」という方を考えて、途中で手が滑らかになり、道が省略されました。 この记事の心構え それは長い話だ、長い話だ、でもそれは必須だ。 Zephyrのオープン環境環境→ 2.1節から すでにビルドと书き込みが出来ている方→第3章から まず、どのように操作すればよいでしょうか? →セクション8.6 (LEDの操作方法の例) 第章ごとに必要なものは時のとおりです。 第1章~第5章:FRDM-MCXN947本体とUSBケーブル [課題時間:60分] 第6章 (I²C) : ジャンパライン 2冊 [課題時間: 20分] 第7章 (SPI) : ジャンパライン 1 [課題時間: 20 分] 第8章(イーサネット) :LANコントローラ1 [課題時間:20分] 0. カタログ 目次 MicroPythonって何なのか? 1.1 なんとなく使われているのか 1.2 MicroPythonのいいところ、悪いところ 1.3 MCXメンテナンス:「ZephyrPort」フォーム 1.4 今回の対応でできるようになったこと 1.5 ゼファーの弱点: ゼファーによって指定される MicroPython Zephyrポートのビルド 2.1 Zephyrオープン環境 2.2 MicroPython のソースを入手する 2.3 ビルドする 2.4 ボードに书き込む MicroPythonってみる — 基本エディター 3.1 トニーする 3.2 USB USB 3.3 確認を受け入れる 3.4 「REPL」とは 3.5 スクリプトを书いて見る:Lチカ 3.6 このボードで使えるピンをアニメーションべる 3.7 Lチカの色を変えてみる 編集者: ピン名を公夫する 4.1 わかりやすいスクリプトの中にPINS Dictionaryを书く 4.2 config.pyに切り出す 4.3 ステージに保存したユーザー: して共有する 4.4 config.pyった3色Lチカ 編集者:スイッチを読む 5.1 スイッチの状態を読む 5.2 杀されたことを切り込みで知る ユーザーエディター: I²Cってみる 6.1 このボードのI²Cの件 6.2 ジャンパを2本つなぐ 6.3 バスをスキャンする 6.4 温度制御 編集者:SPIってみる 7.1 ループバックでトライアル 7.2 CS自動制御システム 編集者:イーサネットってみる 8.1 有線LAN接続 8.2 このポートのネットワークAPI 8.3 PC直接接続テスト 8.4 自己分割IPアドレス 8.5 ボードをWebサーバにする 8.6 LEDディスプレイの操作方法 8.7 電源装置が電源装置に接続されています。 8.8 ハマりやすいポイント まとめ 参考文献 補足事項:LED動作システムの説明 11.1 ここまでのコンテンツが1まとめている 11.2コードの3つのしはんけ 11.3 例外が必要な理由 11.4 Connection: close について 11.5 その他気をつける点 11.6 未来の未来 1. MicroPython ってなんなの? MicroPythonは、マイコンの上で直接動作するPython 3のインタープリタです。 Damien in 2013 George の Kickstarter 資金集めが開始されました。はオープンソース(MIT ライセンス)のプロジェクトとして开発が続いています。 「Python 3 処理システム」なんても、PC でアニメーションく CPython をそのまま保持できたのではありません。数百KBのROMと数十KBのRAMがあり、さまざまな方法で使用できる言語です。そのため文法はPython 3とほぼ同じですが、標準ライブラリは必要なものだけが目的になっています。 その代わりに、マイコンならではのモジュールが意されています。 GPIO、I²C、SPI、UART、PWM、ADC machine およびその他の機能。このブログでも machine モジュールを使っていきます。 なお、この章は背景説明です。 すぐに手を動かしたい方は第2章へ入ってください。 1.1 なんとなく使われているのか MicroPythonはタスクを実行するために使用され、時間はシーンを実行するために使用されます。 教育用途: BBC micro:bitがMicroPythonを採用したことで、一気に知られるようになりました。 Raspberry Pi Pico も MicroPython を公式にサポっています。 プロトタイピング:センサーをとりあえず動かしてデータを見てみたい、というステージでは。 治具・測定器: ラインの検CHECK治具や、実験用の簡易測定器のメーカー、『少量でいいので早めに取り組みたい』ものに向いています。 ホビー:電子工作はさまざまな分野に分かれています。 いずれも 「sincecessous by早い作り」ここがMicroPythonのワンストップ自慢の部門といえます。 1.2 MicroPythonのいいところ、悪いところ このセクションの内容は、特定のマイコンやポートに制限はなく、MicroPython の一般的なプロパティです。うかどうかをできるように判断して、並べておきます。 いいところ コードが简限定できる:Python 3の文法がそのまま使えます。文字列処理は演算と同じ、C処理は行数と書き込みは同じです。 質問の答えは次のとおりです。ボードに与続して、1行のコマンドを大切にしながらアクションを正かめられます。 「このピンをHIGHにしたらLEDは点くのか、排除できるのか」といった確認が、そのフィールドで1行ヒットするだけで済みます。ハードウェアの挙動を手動検出りで真かめるとき、これは非常に強力です。 (対この情码ENVIREPLとHUびます。セクション3.4で詳しく説明します) ビルドが要らない:スクリプトを书いて実行するだけです。コンパイル・リンク・书き込みのサイクルが不要なので、試行錯誤が早くなります。 Learn コストが低い: Python を知っていれば、マイコンの知識だけ足を少し开められます。 悪いところ 実行速度は、インタプリタなので、Cで书いたコードにすると、べるとの数十倍、いや100倍になります。必要な処理や高速信号処理を制御する必要があります。ちなみに対泽はあって,Guan Shu に @micropython.native や @micropython.viper のデコレータをペイけると、关数だけをネイティブコードにコンパイルできます。 メモリを食う:インタプリタ本体と標準ライブラリをマイコンにできる必要があります。数百 KB の RAM、数十 KB の RAM、時間の前に書籍を消費します。小さなさなマイコンでは現在ではありません。 ガベージコレクションがムーブメントの動作が完了し、制御が完了します。 MCXN947は2MBのフラッシュと512KBのSRAMをチップ上に保持しているので、メモリの点では余裕をもってMicroPythonを开せられます。 1.3 MCXメンテナンス:「ZephyrPort」フォーム MicroPythonは、マイコンの種類ごとに「ポート」と呼ばれる移植版を保有しています。 ports/rp2 (Raspberry Pi Pico)、 ports/mimxrt (i.MX RT)、 ports/esp32 といったツール組み合わせです。これらはそれぞれのマイコンのレジスタやSDKを直接叩いて、そのチップ専用の実装です。 MCX シリーズについては、このような専用ポートは存在しません。その代わりに使えるのが ports/zephyr 、つまり Zephyr RTOS の上でアニメーションかすポートです。 Zephyrがサポートしているボードなら、「MicroPython」と同じZephyr Zephyrめの原理で、MicroPython側には独自かつ必要な機能があります。 FRDM-MCXN947 は Zephyr がサポー トしてるボードなのですが、この士组みに乗ります。 NXPのマイコンでMicroPythonを使用 ここで少し整理しておきます。 NXP のマイコンで MicroPython を起動したとき,これまで現実的な選択limb はi.MX RT シリーズでした。 ポートの ports/mimxrt が RT1010 から RT1170 までの EVK やTeensy 4を独占的に使用します。 Zephyrポートにも前からいくつかNXPボードのSETが入っていましたが、 mimxrt1020_evk や mimxrt685_evk_cm33 のようなクロスオーバーMCUをけか、 frdm_k64f / frdm_kw41z のようにかなり前のKinetisをけで、確実に後ではファイルシステムやI²C/SPIまで全部えられたものではありませんでした。 i.MX RTは高性能で、MCUはハイエンド製品群です。「MicroPythonのMicroPythonの使用」とその目的は次のとおりです。 今回は、FRDM-MCXN947の設定を行い、汎用MCUはMCX Nシリーズという、より手を出しやすい选選択limbs plusを行いました。これも今回の対応の意味の一つだと思います。 図1: MicroPython Zephyrクラス   この道には、强的道と無しの両方があります。 Changsuo、Zephyr、Zephyr、が対応しているボードに纃くできることを展開します。短い所、Zephyrの抽象化、すぶん、チップ専用ポートに比べて「そのボードらしい书きFlavour」が薄くなることです。具体的な内容については後述します。 1.4 今回の対応でできるようになったこと Zephyr 自身の本体は以前使用しており、FRDM-MCXN947 で使用した設定がセットアップされています。そのままビルドすると、対语的にコマンドを打ち込むことはできても、ストレージもI²CもSPIも使えません、というSTATEでした。 今回は、以下の2つのファイルが本家 micropython/micropython のmasterにマージされました。 ports/zephyr/boards/frdm_mcxn947_mcxn947_cpu0.conf ports/zephyr/boards/frdm_mcxn947_mcxn947_cpu0.overlay これによって,時のことができるようになりました。 (1) オンボードのフラッシュをファイルシステムとして利用可能 FRDM-MCXN947 にいる 8 MiB の QSPIflash(Winbond W25Q64JV) の storage_partition を、LittleFS として /flash にマウントします。この本は、本いたスクリプトをボード上に待ってるようになる、という意味で、そしてこれは大きな変化です。 実界にマウントした状態で容量を確認するとその時のようになります。 >>> import os >>> os.statvfs('/flash') (4096, 4096, 2048, 2043, 2043, 0, 0, 0, 0, 255) ブロックサイズ4096バイト × 2048 ブロック = 8 MiB のうち、LittleFS 管理領域を除いて約 7.98 MiB があります。 (2) MikroBusのSPIが使えるようになった MikroBus コネクタの SPI( flexcomm6_lpspi6 ) を有効にしています。この SPI は、ボード通の devicetree ではピンDefinition まで意されているもの、 status = "disabled" のままになっていました。 MOSI/SCK は P3_20/P3_21 に使用され、SAI1 は他と共有されます。 SAIはシリアルオーディオインターフェースの若干、I²SやTDMといったデジタルオーディオのデータをやり出すための通常・インターフェースです。オーディオコーデックやマイクを行って使うもので、じピンをSPIとSAIの両四角に同時にカットすることはできません。そのためボード共通定義では、向いとも決定めずに無効にしてありました。 では、どうもに使うのか。今度はオーバーレイが有効で、SPI も有効で、判定も有効です。 Gen 存在は単正で,MicroPython の Zephyr ポートにはI²S /SAI をうわえても machine.I2S のようなクラスも存在しないからです。つまり SAI1 のピンとして半分待っていても, MicroPython からは作りようがありません。それならSPI として使えるようにしたほうが便利だろう、というわけです。 (3) I²CとSPIの意見が分かれるようになった CONFIG_I2C=y と CONFIG_SPI=y しています。これがないと machine.I2C や machine.SPI を作ろうとしても失敗します。 1.5 ゼファーの弱点: ゼファーによって指定される さて、ここでZephyrポートの「使いにくいところ」を前に说お待ちしておきます。 通常はMicroPythonが使用され、MicroPythonの名前は名前で指定されます。 # i.MX RTの専用ポート(ports/mimxrt)の場合 led = Pin('D9', Pin.OUT) # Raspberry Pi Pico の場合 led = Pin(25, Pin.OUT) # ESP32 の場合 led = Pin(2, Pin.OUT) NXP のマイコンでも、i.MX RT の専用ポートでは 'D9' というボード上の表记そのままの名前が使えます。 なおZephyrポートでは、 GPIOポート名とビット位置のタプルで指定します。 # FRDM-MCXN947(Zephyrポート)の場合 led = Pin(("gpio0", 10), Pin.OUT) ("gpio0", 10) は「GPIO0ポートの10ビット目」、つまりデータシート上のP0_10を指します。違反の形態が踏切であり、時間が踏切である。 >>> Pin(25, Pin.OUT) Traceback (most recent call last): File " ", line 1, in ValueError: Pin id must be tuple of ("GPIO_x", pin#) 「いつかこうなるという」と、Zephyr の devicetree では GPIO が gpio0 、 gpio1 、…というポート単位置のデバイスとして定義されていて、中のビット位置でピンを指しますからです。 MicroPython 側はオープンとクローズです。 問題は、デジタル回路が印刷され印刷されている ("gpio0", 10) です。 Arduinoヘッダーの D9 や、RGB LEDの 赤 といった名前は、MicroPythonはすべて見えないのです。 これはかなり不便です。第 4 章: この対 Ce を Step by Step を追いかけて紹介します。 コラム:Zephyrは「SDKの下注り」としても使われています Zephyr み込みアプリケーションを书くためのRTOS" というイメージが强いと思います。実際记そのとおりなのですが、最近はもう一つの使われているほうがてきました。地上にプラットフォームをインストールするのに SDK を使用しないでください。 今回の MicroPython Zephyr ポートがそれです。ユーザーが书くのは Python のコードで、Zephyr の存在を意識することはほとんどありません。 MicroPy thonのインタプリタ自身も、Zephyrのスレッドのひとつとして実行されています。 同じ構造の例: ArduinoCore-zephyrがあります。これはArduinoのAPI( pinMode() , digitalWrite() , Wire , SPI ...)をZephyrの上に実装したもので, Arduino IDEから使う制限はZephyrは見れません。 このように「Zephyrを直接使う」に「Zephyrの上にしたものを使う」という選択肢 Limbが壗えてきています。 Zephyrのボードサポートを準備することが、そのままMicroPythonやArduinoの対応にもつながる、という関係です。 ▲ カタログに戻る 2. MicroPython Zephyrポートのビルド ここからは実记に手を動かしてみます。 2.1 Zephyrオープン環境 この记事のコマンド例は、macOSやLinuxのシェル(bashやzsh)を前提にしています。 Windowsも使いやすく、環境も使いやすいです。 コラム:Windowsが入らない状況 最初の結論は、本、 Windows PowerShell (cmd.exe)、Windows PowerShell、および PowerShellです。コマンドを书き変更してもだめです。 MicroPython の処理が行われ、UNIX の依存関係が維持されます。ビルドを設定している py/mkrules.cmake の中で、 cat ・ sed ・ touch が直接呼び出されています。同様に qstr (文字列テーブル) する箇所は、時のようなシェルのパイプライン 1 で书かれています。 cat … | sed … | (Cプリプロセッサ) | sed … > 出力ファイル これらのコマンドはWindowsには存在しません。 cmd.exe cat sed 終わりはなく、終わりは終わりです。シェルを変えても解決しないのはこのためです。 実记、MicroPython の本家 CI でも、Zephyr ポートのビルドは ubuntu-latest でのみ実行されています。 Windows でのビルドは考えられていません。 风らわしいのですが、 Zephyr 独自のはネイティブの Windows でビルドできます。この节で紹介する Zephyr のスタート ガイドにも、winget でツールを入れる Windows のための手顺があります。 MicroPython をビルドするステップ初めて行き诘まる、ということが出てきます。 Windows環境に入り、UNIX環境の環境が良くなりました。どちらでも、この记事のコマンドはそのまま使えます。 WSL2 (Windows Subsystem for Linux) 。 Zephyr の入門ガイドでも、Ubuntu のアプリケーションはユーザーにとって使いやすいです。 Microsoft のインポート手順 Git for Windows (Git Bash) やMSYS2のbash環境 なお、ビルドと书き入れるだけをUNIX環境で行い、ThonnyでのMicroPython操作はWindows側から、という分け方もできます。 ThonnyもmpremoteもWindowsでそのまま動きますので、第3章以降はWindowsだけで入れられます。 MicroPython Zephyr の環境 (west、Zephyr SDK、Python の環境) は不要です Zephyr 環境構築ガイド、NXP 日本語解説と説明 先に環境は作ってない方は、先にそれをしてくださいを指します。 Zephyrシリーズ 第2章 はじめてのビルドと実機アニメーション(日本语ブログ) この记事で参考にしていただきたいのは、 Kailu 環境をインストールする部分です。物語の後半、Zephyr、Zephyr blinky など) をビルドしてアニメーションしますが、このブログでビルドするのは Zephyr のサンプルではなく MicroPython です。ビルドの対相を仕様する部分だけが違反をテストしてください。 west build パスのステータスは作業と同じであり、準備は完了しています。 ゼファーの公式は以下のとおりです。 Zephyr入門ガイド 環境があれば, ~/zephyrproject のようなディレクトリに西のワークスペースが目的されているはずです.以下、これを ~/zephyrproject とします。 2.2 MicroPython のソースを入手する MicroPython のソースは、Zephyr のワークスペースとは別の場所にある構造になっています。ゼファーの作業場は汚いし、別の場所だ。 git clone https://github.com/micropython/micropython.git cloneしたら、ディレクトリにアニメーションってサブモジュールを入手します。 cd micropython git submodule update --init lib/micropython-lib micropython-lib MicroPython は標準のライブラリグループとサブモジュールとして分離されています。これを入手するには準備がないとビルド時にエラーになるので、忘れて実行してください。 登場する本は本、FRDM-MCXN947の設定は本家の主人です。パッチを当てている必要はありません。 のためを読んで、のファイルがあることを使って確認してください。 micropython ディレクトリにあるSTATUSはそのまま実行します。 ls ports/zephyr/boards/ | grep mcxn947 frdm_mcxn947_mcxn947_cpu0.conf と frdm_mcxn947_mcxn947_cpu0.overlay の 2 つが意味すればOKです。 もしやファイル名が长いのか Zephyrでは、じボードでもコアやアクションモードによって複数の構成をホールドすることがあります。 FRDM-MCXN947 Cortex-M33 Cortex-M33をデュアルで搭載しているため、 frdm_mcxn947/mcxn947/cpu0 のように「ボード名/SoC名/コア名」が指定されます。ボードクオリファイアー(board qualifier)とボードクォリファイアー。 MicroPython の Zephyr ポートは、この修飾子を含めた名前でconf/overlay を探索します。つまり frdm_mcxn947.conf という名前では読み込めません。 frdm_mcxn947_mcxn947_cpu0.conf として初めて見られます。自己分割した設定は設定に追加され、設定は設定に追加されます。 2.3 ビルドする まずZephyrの仮 環境について考えるのが効果的です。 source ~/zephyrproject/.venv/bin/activate Zephyrのバージョンを合わせます。 cd ~/zephyrproject/zephyr git checkout v4.4.0 west update MicroPython の Zephyr ポートが対応を明言しているのは、v3.7 (LTS) および v4.4、そして开発版です。本家のCIはv4.4でビルドを検査しています。のバージョンになっていると、ワークスペースの外に、通ってもアクションが違反になったりすることがあるので、ここでv4.4.0に揃えておきます。 west update HALやライブラリなどの関連モジュールを取り正すためのものです。 git checkout だけでは不統合が残っているため、必ずセットで実行してください。 準備ができたら west build を実行します。 cd ~/zephyrproject west build -b frdm_mcxn947/mcxn947/cpu0 ~/micropython/ports/zephyr -b がボードで指定する、最後の引数はがビルド対相のアプリケーション(MicroPythonのZephyrPort)です。 ~/micropython の部分は,実记にクローンした場所に読んでください。 ビルドが通ると build/zephyr/ 下に zephyr.bin , zephyr.hex , zephyr.elf が生成されます。 2 エピソード後、設定はストレートでストレートです。 --pristine (または -p ) 前回の戻りの結果は前回の戻りの結果です。 cd ~/zephyrproject west build -p -b frdm_mcxn947/mcxn947/cpu0 ~/micropython/ports/zephyr 2.4 ボードに书き込む FRDM-MCXN947にはMCU-Linkデバッガがオンボードで本は別の方法で書かれており、目的が必要であり、本は別の方法で書かれています。 USBケーブルはJ17 (MCU-Link側USBコネクタ)コネクタ 図2:USBコネクタJ17(MCUリンク側)コネクタ 続きを受け取ったら, west flash を実行するだけです。 cd ~/zephyrproject west flash 本き込みが終わりわると、ボードは自動にリセットされてMicroPythonが始まります。 このJ17は书き込みだけでなく、MicroPythonと対语するための通常通信にも使います。詳細についてはセクション 3.2を参照してください。 ▲ カタログに戻る 3. MicroPythonってみる—基本エディター とりあえずが书き込めたら、いよいよMicroPythonをタッチっていきます。 3.1 トニーする MicroPython は使いやすく、MicroPython の環境は必要ありません。ターミナルソフトでも構造化していませんが、ここではThonnyを作っています。 ThonnyはMicroPython初の関数型プログラミング言語であり、同時に統合開発環境(IDE)でもあります。無料で利用でき、Windows、macOS、Linuxに対応しています。 ソニー公式サイト Thonny's のインストールとの基本操作が基本操作で、以下のアニメーションが該当部分です。 MicroPythonをi.MX RTクロスオーバーMCUでアニメーションかしてみた(YouTube) — Thonnyのインポート部分から再生成されます トニーはポイントの利点であり、コミュニケーションは同じです。 本の上部、本の上部、本の上部、本の上部 ボードのファイルシステム( /flash ) の中の体をGUIで見られる PCとボードのファイルをポータル&ドロップでコピーできる という点です。第4章。 3.2 USB USB FRDM-MCXN947にはUSB Type-Cのコネクタが複数あります。 MicroPython のコンソールにシステム ぐのはJ17 、MCU-Link 側のコネクタです (セクション 2.4の図 2 と同じ地です). MicroPython のコンソールは、Zephyr のコンソール( zephyr,console ) に出力されます。 FRDM-MCXN947のcpu0では,これが flexcomm4_lpuart4 (P1_8 / P1_9) オリジナルのMCU-Link MCU-Link VCOM (仮愿COMポート) があります. つまりJ17の1书で、一時の书き込みとコンソールの両方ができます。 MCXN947 の本体は本体の USB 方式であり、この章の構成は USB 方式です。 3.3 確認を受け入れる ケーブルを行いましたThonnyをスタートします。 Thonnyの右下(またはメニューの「実行」→「インタプリタの選択」)から、インタプリタとして「MicroPython (generic)」を選択して、ポートニボードのVCOMを指定します。 Windows: COM3 のような名前 macOS: /dev/cu.usbmodem… Linux: /dev/ttyACM0 など 図3:インタプリタに「MicroPython (generic)」を选ぶ   うまくいくシステムががると、下のシェル(Shell) ペインにプロンプトが出ます。 Ctrl-D (ソフトリセット)を試してみてください。 MicroPython v1.30.0-preview.17.g47e9329e51 on 2026-08-30; zephyr-frdm_mcxn947 with mcxn947 Type "help()" for more information. >>>   図4: 続に成功すると、シェルペイン(ウィンドウ下)にバナーとプロンプトがされることを意味します zephyr-frdm_mcxn947 with mcxn947 の最後の部分に注目してください。 zephyr-frdm_mcxn947 は Zephyr の CONFIG_BOARD 、 mcxn947 は CONFIG_SOC から作られる名前です。ここが楽しみになって進行していれば、スナイプしたボードを使用のバイナリが移動していると確認できます。 >>> まずは「Hello, world!」の式から出してみましょう。 >>> print("Hello, world!") Hello, world! MicroPython は Python なので、数式をヒットするだけでも結果が返ります. >>> 1 + 2 3 >>> "MCX" * 3 'MCXMCXMCX' ファイルシステムも確認しておきます。 >>> import os >>> os.getcwd() '/flash' >>> os.listdir('/flash') [] ストレートバックを開始しますのカレントディレクトリが /flash になっています。これは今回はマージされたセットでLittleFSがマウントされているからです。まだ何も志していないので中体は空です。 3.4 「REPL」とは 今生きているこの対情码ENVIRONMENTをREPLとHUびます。 Read (読む)、 E val(評価価する)、 Print (式する)、 Loop (粲り返すす)の頭文字はありません。 1行の入力強制、MicroPythonはそれを読み、実行し、結果を表し、また時の強制入力を待ちます。これがREPLです。 コンパイルして书き真剣で実行して、という手顺を踏んで、分からないCの开発と比較的と、試行錯誤の回しかた一瞬が変わってきます。例えば「このピンをHIGHにしたらLEDは点くのか、排除できるのか」のような確認が、そのフィールドで1行ヒットするだけで済みます。ハードウェアの挙動を手動検出りで真かめるとき、REPLは非常に強力です小道具になります。 REPLは使いやすく、操作も簡単です。 キー アクション Ctrl-C 実行中のプログラムを中断する Ctrl-D MicroPython を再起動する Ctrl-E ペーストモードに入る Ctrl-A rawREPLモードに入る Ctrl-B 通常のREPLモードに戻る 表1:REPL制御システム Ctrl-Cは、無制限ループ発生したプログラムを停止してください。 Ctrl+D Ctrl-Eのペーストモードは、複数行のコードをまとめてステッカーできる時に使います。通常 REPL は 1 行ごとにインデントを解釈しようと考えるので、 for 文のような複数行のコードをそのままにしてもうまくいかないことが起こります。 Ctrl-E してらコ-ドを貼り付けます、Ctrl-D で実行しますと、まとめられます。 3.5 スクリプトを书いて見る:Lチカ ここまではREPLに1行ずつなんとかんできました。ちょっとした確認にはこれここ半分はいのですが、缲り回しや条件分岐が入ってきて当然に俫になります。 ではスクリプトを书いてみましょう。 LEDのLチカ(LEDチカチカ)です。 FRDM-MCXN947にはRGBのLEDがあります。まずは红を点杀させてみます。红のLEDはP0_10、つまり ("gpio0", 10) に式があります。 トニーの上半身は本の上半身であり、下半身は本そのものである。 import time from machine import Pin led = Pin(("gpio0", 10), Pin.OUT) # 赤LED (P0_10) while True: led.value(0) # 点灯 time.sleep(0.5) led.value(1) # 消灯 time.sleep(0.5) 図5: 本の上面。下側がシェルペイン   书けたら、ツールバーの「実行」ボタン(緑色の三角形のアイコン。ショートカットはF5)を気をつけます。 Thonnyがious Generation ched in in in on in MicroPython今日のテストはテストと同じ、テストはテストと同じ。 赤色LEDが0.5秒で正常に点灯します。 やめて、やめて、やめて、やめて。シェルペインでCtrl-Cを気にしても同じように出ます。 ここで「あれ?」と思った方へ コードをよく読んでください。 value(0) は照明をオンにすることを意味し、 value(1) は照明をオフにすることを意味します。直感は真実を見ることの反対であり、調和は真実です。 FRDM-MCXN947のRGB LEDは、アノードコモンで接続され続けています。 LED側電源方式、マイコンのピンがマイナス側をリードっ張る形です。つまりピンをLOW(0)にしたときに電流が流れて点灯します。 図6: FRDM-MCXN947回路のRGB LED部分。LED電源システム   Zephyr の devicetree には、この LED が GPIO_ACTIVE_LOW という情報がちゃんとあります。ただし MicroPython の machine.Pin は、devicetree のこのフラグを见ずにGPIO を生の値を読み続けます(内で gpio_pin_set_raw() をHU しています)。そのため、论理を反転してくれることはありません。 0 を书すればピンはLOWになり、LEDは点きます。 さて、 led.value(0) は led.off() とも书けます。つまり led.off() をハブとLEDは点灯します。ミンマオと実记の行動が逆になるので、カオスしそうなときは value(0) / value(1) で书くほうが安全かもしれません。 もうひとつ 注: toggle() はありません 彼のポートのMicroPythonにカスタムされていますと led.toggle() と来ましたが、Zephyrポートの Pin にはこのメソッドがありません。新しいものにしてください。 メソッド/固定数 説明 value([x]) 引用はなしで読み出し、引用はありで书き込み on() HIGH(1)を出力 off() LOW(0)を出力 init(...) ピンの設定更新 irq(...) カットり込みハンドラを設定 Pin.IN / Pin.OUT / Pin.OPEN_DRAIN 入力電力と出力電力 Pin.PULL_UP / Pin.PULL_DOWN プルアップ / プルダウン Pin.IRQ_RISING / Pin.IRQ_FALLING カットり込みエッジ 表 2: ZephyrPort の machine.Pin で使えるもの トグルしたいときは、読んで転んで书れば済みます。 led.value(not led.value()) 3.6 このボードで使えるピンをアニメーションべる さて、红のLEDが ("gpio0", 10) であることは、どこから来た値なのかを description しないまま使ってきました。では自分で调べるにはどうすればいいのでお願いします。 この节では、答えを探しにZephyrのSETファイルまでドロップしていきます。小さく入った说になるので、最初を急いでぐ方は読んで飞ばして4章に入って構造ではありません。第4章:では、ここで调べた対応表を一度作ってしまえば、その後ドロップしたは名前でピンを指定できる、という语をします。 Cannian ながら、 MicroPython の Zephyr ポートには「できるピンの一覧を作る」関数がありません。 machine モジュールの中身を見ても、ピンの名前は出てきません。 >>> import machine >>> dir(machine) Pin 、 I2C 、 SPI 、 UART 、 PWM 、 ADC 、 Timer 、 WDT のようなクラス名が和びます(実记に入るはビルド時のセットで変わるので、手元で実行して真かまってください)。 Pin というクラスがあることはわかりますが。 では、どこを見ればいいのか 答えへはZephyrのdevicetreeです。 デバイスツリーとは (Zephyrのオリジナルコンテンツは「FRDM-MCXN947デバイスツリー」として知られており、「FRDM-MCXN947のデバイスツリーはオリジナルと同じである」) devicetree(デバイスツリー)は、ボードにどんなハードウェアが在っていて、どうやって話しているテキストファイルです。当初はLinuxカーネルで使われていた士组みで、Zephyrもこれを採用しています。 「この SoC には I²C コントローラが何的にあって、それぞれのアドレスにあって、どのピンに出ていて、効果的なのか無いのか」 といった情報が、 .dts / .dtsi とい拡张子のファイルのストラタ構造で书かれています。 Zephyr にこれを読み取って、必要な方の初期化コードやピンの設定を自動で生成します。 ソースコードにピン番号をダイレクトブックの代わりに、ハードウェアの構成情報をコードから分離しておく、というテストえ方です。おかげで、じアプリケーションのソースを使うボードと同じでけにビルドすることができます。 MicroPython の Zephyr ポートが ("gpio0", 10) というタプルを要件とするのも、このdevicetree の構築をそのまま反映しているからです。 gpio0 のデバイス名はdevicetree、 10 はそのポート内のビット位置です。 FRDM-MCXN947のデバイスツリーを読む FRDM-MCXN947 構成は、Zephyr のリポジトリ下のファイルに书かれています。 zephyr/boards/nxp/frdm_mcxn947/frdm_mcxn947.dtsi この中の arduino_header というノードに、Arduinoヘッダーの各ピンがどのGPIOに部門があるかがわかります。 arduino_header: arduino-connector { compatible = "arduino-header-r3"; gpio-map = , , , , , /* RX */ , /* TX */ , ... , /* SCK */ , /* SDA */ ; /* SCL */ }; は「ヘッダーのD13は gpio0 の25ビット目」という意味です。これをMicroPythonのタップに正すと ("gpio0", 25) になります。 じファイルの中と同様に、LEDとスイッチの定義もあります。 leds { compatible = "gpio-leds"; green_led: led_1 { gpios = <&gpio0 27 GPIO_ACTIVE_LOW>; ... }; blue_led: led_2 { gpios = <&gpio1 2 GPIO_ACTIVE_LOW>; ... }; red_led: led_3 { gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; ... }; }; gpio_keys { compatible = "gpio-keys"; user_button_2: button_0 { gpios = <&gpio0 23 ...>; }; /* SW2 */ user_button_3: button_1 { gpios = <&gpio0 6 ...>; }; /* SW3 */ }; 红のLEDが &gpio0 10 、つまり ("gpio0", 10) であることがここで確認できます。 GPIO_ACTIVE_LOW と书かれているのも見ますね。最初の説明は根の根です。 毎回 devicetree を読むのか? さて、これを曲に戻すたびに、べるのはは今ではありません。 「LEDを光らせたいだけなのにdevicetreeを読む」というのは、MicroPythonの手軽さを台無しにしています。 そこで4章では、この対応表現を一度だけ作って、その後は名前で书けるようにする方法を紹介します。 3.7 Lチカの色を変えてみる 対泽の前に、タップル指定の不便さをもう小さい身体感覚にしておきましょう。 3色LED光源。 devicetreeから読み取った値は時の正しくでした。 色 ピン タップル 赤 P0_10 ("gpio0", 10) 緑 P0_27 ("gpio0", 27) 緑 P1_2 ("gpio1", 2) 表3:RGB LED照明 import time from machine import Pin red = Pin(("gpio0", 10), Pin.OUT, value=1) green = Pin(("gpio0", 27), Pin.OUT, value=1) blue = Pin(("gpio1", 2), Pin.OUT, value=1) while True: for led in (red, green, blue): led.value(0) # 点灯 time.sleep(0.5) led.value(1) # 消灯 Pin() の value=1 は、ピンを出力に設定すると同時に初期値をHIGH(消灯)にする仕様です。これを払えないと、設定した瞬間に瞬間点灯することがあります。 赤→緑→緑とシュンファンに光れば成功です。 とりあえず、このコードを見てどう思いますか。 red = Pin(("gpio0", 10), Pin.OUT, value=1) ("gpio0", 10) という部分は「が読めません」という意味です。 red という変な数字の名前を払ったから書けるだけで、この数字だけを見て「赤いLED」だとわかる人はいないはずです。 まさか、この数字てもエラーにはなりません。 ("gpio0", 11) と书いたら、存在するピンなので Pin は正常にされ、LED だけないだけです。 「どこが悪いのか」を探すのに時に取られることになります。 この質問を、回の張で片払って下さい。 ▲ カタログに戻る 4. 緊急編集者: ピン名を公夫する Zephyr ポートがピン名を提供できないなら、それを分離することが目的です。それがこの章です。 Step by stepを追いかけて、3つのstep by stepで進めます。 スクリプトの中の辞書を书く config.py という別れのファイルに切り出す ボードのストレージに出ています,すべてのスクリプトから共有 4.1 わかりやすいスクリプトの中にPINS Dictionaryを书く 一番単くない、スクリプトの前头にPythonの辞書を书いてしまうメソッドです。 import time from machine import Pin PINS = { "LED_RED": ("gpio0", 10), "LED_GREEN": ("gpio0", 27), "LED_BLUE": ("gpio1", 2), } red = Pin(PINS["LED_RED"], Pin.OUT, value=1) while True: red.value(0) time.sleep(0.5) red.value(1) time.sleep(0.5) Pin(PINS["LED_RED"], ...) これなら何をしているのか一目でわかります。 さらに良いのは、タイプミスがエラーになることです。 >>> Pin(PINS["LED_RD"], Pin.OUT) Traceback (most recent call last): File " ", line 1, in KeyError: LED_RD まず「数字や数値に違反する」ということ。 Dictionary のキーを间violation えれば KeyError で停止まってくれます。これだけでもデバッグの手间がかなりマイナスです。 4.2 config.pyに切り出す しかし、スクリプトを书くたびにこの辞書をコピーするのは面流です。実记、LEDだけでなくArduinoヘッダーやMikroBusのピンも定義になったので、辞書はどんどん长になります。そのたびにすべてのスクリプトの头にステッカーりペイけるのは成実的ではありません。 Pythonらしく、不ファイルに切り出してインポートしましょう。 config.py というファイルを作ります。 PINS = { # --- Arduinoヘッダー --- "D0": ("gpio4", 3), # P4_3 (RX) "D1": ("gpio4", 2), # P4_2 (TX) "D2": ("gpio0", 29), # P0_29 "D3": ("gpio1", 23), # P1_23 "D4": ("gpio0", 30), # P0_30 "D5": ("gpio1", 21), # P1_21 "D6": ("gpio1", 2), # P1_2 "D7": ("gpio0", 31), # P0_31 "D8": ("gpio0", 28), # P0_28 "D9": ("gpio0", 10), # P0_10 "D10": ("gpio0", 27), # P0_27 (CS) "D11": ("gpio0", 24), # P0_24 (MOSI) "D12": ("gpio0", 26), # P0_26 (MISO) "D13": ("gpio0", 25), # P0_25 (SCK) "D14": ("gpio4", 0), # P4_0 (SDA) "D15": ("gpio4", 1), # P4_1 (SCL) "A2": ("gpio0", 14), # P0_14 "A3": ("gpio0", 22), # P0_22 "A4": ("gpio0", 15), # P0_15 "A5": ("gpio0", 23), # P0_23 # --- バス(Zephyrのデバイスノード名) --- "I2C": "lpi2c@94800", # flexcomm2_lpi2c2 (arduino_i2c) "SPI": "spi@93000", # flexcomm1_lpspi1 (D10〜D13) "MIKROBUS_I2C": "lpi2c@95800", # flexcomm3_lpi2c3 "MIKROBUS_SPI": "spi@b6000", # flexcomm6_lpspi6 # --- MikroBusのGPIO --- "MIKROBUS_RST": ("gpio1", 3), "MIKROBUS_CS": ("gpio3", 23), "MIKROBUS_SCK": ("gpio3", 21), "MIKROBUS_MISO": ("gpio3", 22), "MIKROBUS_MOSI": ("gpio3", 20), "MIKROBUS_PWM": ("gpio3", 19), "MIKROBUS_INT": ("gpio5", 7), "MIKROBUS_RX": ("gpio1", 16), # GPIOとして使える.UARTのRXではない "MIKROBUS_TX": ("gpio1", 17), # GPIOとして使える.UARTのTXではない "MIKROBUS_SCL": ("gpio1", 1), "MIKROBUS_SDA": ("gpio1", 0), # --- エイリアス --- "LED_RED": ("gpio0", 10), # = D9 "LED_GREEN": ("gpio0", 27), # = D10 "LED_BLUE": ("gpio1", 2), # = D6 "SW2": ("gpio0", 23), # = A5 "SW3": ("gpio0", 6), # P0_6 } すべてdevicetreeから転记した値です。 いくつか補足します。 RGB LEDはArduinoと共有されています。 赤色LED(P0_10)はArduino D9 D9と同じです。緑D10、青D6と同じ。 Arduino シールドを挿入しますときは、これらのピンをうと LED も一丝に光ります。逆に言うと、シールドがD6やD9をしていると、LEDのつもりで動作するとシールド側への影響が出ます。 SDA/SCLはA4/A5ではありません。 Arduino UNO R3 のボードでは、I²C の SDA/SCL が A4/A5 と同じ配線になっていることが多く、「A4=SDA,A5=SCL」と覚えている方も多いと思います。 I²CはAREFのネイバーにある専用のSDA/SCLピン(Zephyrのdevicetree上ではD14/D15)に出ていて、これはP4_0/P4_1です。 A4 (P0_15) および A5 (P0_23)、I²C システム独立 GPIO。第 5 章: ジャンパを性ぐときになるので、覚えておいてください。 SW2はA5と同じピンです。 ユーザースイッチのSW2(P0_23)は、ArduinoヘッダーのA5と じピンにシステムがついています。 A5の出力も回路の影響も同じで、注意点も同じです。 バスは文字列を「します」で指定します。 machine.I2C と machine.SPI のidパラメータは、タプルではなくZephyrのデバイスノード名の文字列です。 "lpi2c@94800" の 94800 は、MCXN947のメモリマップ上のペリフェラルのアドレス(0x94800)です。ここもdevicetreeの原点の値です。 4.3 ステージに保存したユーザー: して共有する config.py ができました。 スクリプトは「モジュール」として読み込む 最初のステップは最初のステップであり、 import ステップはステップを完了するための最初のステップです。 config.py は特別なフォームのファイルではありません。 PINS = { ... } と使える、ごく普通の Python のスクリプトです。 Lチカのスクリプトと同じ、ただのテキストファイルです。 Python では,そばスクリプトを彼のスクリプトから読み進め import 使えます。 from config import PINS これは「 config.py を読み込んで実行し、その中でされた PINS .py config 」という意味になります。がそのままモジュール名になります。 config.py 中体が実行されるので PINS という辞書ができます、それをここで使えます、というわけです。 よく作る定義やオフ数を比ファイルにまとめて書いて、必要なスクリプトから読み込む。これはPythonでごく一般的なやり方で、MicroPythonでも同じように使えます。 どこに志せばよいか config.py をボードのどこに出ても、すべてのスクリプトから import できるでお願いします。 MicroPython は、モジュールを sys.path に和んだディレクトリから探索します。確認。 >>> import sys >>> sys.path ['', '.frozen', '/flash/lib'] /flash/lib これは今回マージされた設定は LittleFS がマウントされたときに、起動プロセス ( _boot.py ) は自動的に追加されますが通常です。 つまり /flash/lib/config.py として保存すれば、どのスクリプトからも from config import PINS でめるということです。 トニーの家 Thonnyのメニューから「式」→「ファイル」を选ぶと、画面左側に表示されます。上半分がPC側、下半分がMicroPython側です。   図7:トニー /flash/lib config.py   使いやすく、スムーズです。 後半(ボード側)が /flash を表現していることを確認する ボード横のペインで右クリック→「新しいディレクトリ」を選択して、 lib を作ります 作られた lib をダブルクリックして中に入る 前半(PC側)で config.py を右クリック→「/flash/libへアップロード」を选ぶ 設定して確認してください。 >>> import os >>> os.listdir('/flash/lib') ['config.py'] コマンドラインから操作時(リモート) Thonnyは使いやすく、操作も簡単で、操作も簡単です。 mpremote pip install mpremote でインストールできます。 まず lib ディレクトリを作ります。 mpremote mkdir :/flash/lib その中に config.py をコピーします。 mpremote cp config.py :/flash/lib/config.py スクリプトを実行するだけなら、ボードに保存せずに実行することもできます。 mpremote run blink.py 4.4 config.pyった3色Lチカ 準備をしましょう。セクション 3.7 のコードを书き正してみましょう。 import time from machine import Pin from config import PINS red = Pin(PINS["LED_RED"], Pin.OUT, value=1) green = Pin(PINS["LED_GREEN"], Pin.OUT, value=1) blue = Pin(PINS["LED_BLUE"], Pin.OUT, value=1) while True: for led in (red, green, blue): led.value(0) # 点灯 time.sleep(0.5) led.value(1) # 消灯 セクション 3.7 と比べてください。ないは、 Pin() に複数あるものだけです。 red = Pin(("gpio0", 10), Pin.OUT, value=1) # 3.7節 red = Pin(PINS["LED_RED"], Pin.OUT, value=1) # こちら ("gpio0", 10) のような数字はどこにも出てきません。 「赤・緑・青のLEDを瞬発に光る」という意味図が、そのままコードになりました。 これで、 1.5セクションで挙げたZephyrポートの弱点を、実際に使ってほぼ解消できました。 config.py かつては「もしよかったら」を設定することで行われていましたが、その後はずっと作成することで削減されました。 なお、ここで使っている config.py の全文は4.2に含まれていてあります。 トラブルシューティング:うまくインポートできないときは config.py いたのに ImportError が出る機会を設定しています、時間を確認してください。 ソフトをリセットします。シェルペインでCtrl-Dを気になります。 MicroPython は一度インポートするので、ファイルを出して変更しても古いものが使われることがあります。これにはよくある理由があります。 購入場所を確認してください。 os.listdir('/flash/lib') で config.py が見れるか真かめます。 lib ディレクトリを作る前にアップロードして、 /flash/ の正下に式かれているケースがよくあります。 sys.path を確認します。 import sys; print(sys.path) に /flash/lib が入ります。入っていなければ、 /flash のマウントに失敗している可能性があります。 ファイル名を確認します。 from config import PINS で読めるのは config.py という名前のファイルだけです。保存する前に、名前を保存することを忘れないでください。 ▲ カタログに戻る 5. 編集者:スイッチを読む 第3章ではLEDを光らせました。 GPIO の貢献は非常に重要です。今日は度数が逆転して力が入ります。 FRDM-MCXN947には,ユーザーが免費で使えるスイッチが2つついています. SW2とSW3は同じです。ここではSW2を使います。 図8:ユーザースイッチSW2とSW3の位置   この章に追加パーツは要りません。ボードとUSBケーブルだけで入ります。 5.1 スイッチの状態を読む SW2はP0_23がいてて、 config.py に SW2 として入れてあります。 from machine import Pin from config import PINS sw = Pin(PINS["SW2"], Pin.IN, Pin.PULL_UP) print(sw.value()) Pin.IN 力設定を入力してください。 Pin.PULL_UP 内部抵抗が有効です。 なぜプルアップが必要なのか このスイッチは、おつすとピンがGNDに行く路になっています。その逆も真、その逆も真、その逆も真。電気の状態が安定しており、電圧も安定しています。 プルアップ耐性を効果的にすると、いないときはピンがパワーサイドに上げられてHIGHになります。おつしたきだけ GND にキューかれて LOW になります。これで両四角の状態が分かります。 つまり読み出される値は時のようになります。 大下していない→ 1 大下している → 0 ここでも 0 が です。 LEDのときと同じアクティブ・ローの考え方で(セクション3.5 ),このボードではよく出てくる形です. 実行して真かめてみましょう。 >>> print(sw.value()) 1 杀していないので 1 が回りました。ながら実行すれば 0 になります。 粲り回し読む機会 ステータスを監視し続けるなら、こうなります。 import time from machine import Pin from config import PINS sw = Pin(PINS["SW2"], Pin.IN, Pin.PULL_UP) last = sw.value() while True: now = sw.value() if now != last: print("押された" if now == 0 else "離された") last = now time.sleep_ms(20) 前の章で、「の値と比べて」、「変化したときだけ」は「しています」を意味します。そのたびに、という意味であり、ずっと出力され続けているという意味です。 この法をポーリングと淳ます。公式グループは純粋で単純で、欠点は小さくて明らかです。 sleep_ms(20) の间にスイッチが阿されて里されると、见出してしまいます。かべき間隔を短くすると、その分だけCPUがこの確認に充電されます。 5.2 杀されたことを切り込みで知る そこで使えるのが开り込みです。 「ピンの状態が変化したら,この关数をHUNDE」とログイン方法、対処方法、やり方が欲しいです。 「脱出」を参照してください。 machine.Pin irq() メソッドで登録します。 import time from machine import Pin from config import PINS sw = Pin(PINS["SW2"], Pin.IN, Pin.PULL_UP) n = 0 def pressed(pin): global n n += 1 print(" 割り込み %d 回目 value=%d" % (n, pin.value())) sw.irq(handler=pressed, trigger=Pin.IRQ_FALLING) print("SW2を数回押してください(30秒間)") for i in range(30): time.sleep(1) sw.irq(handler=None) print("合計 %d 回検出しました" % n) 実行してSW2を10回の返済結果です。 SW2を数回押してください(30秒間) 割り込み 1 回目 value=0 割り込み 2 回目 value=0 割り込み 3 回目 value=0 (中略) 割り込み 10 回目 value=0 合計 10 回検出しました 押された回数、呼び出された回数、呼び出された回数。 コードの読み方 trigger には、どのような変化でHUNDE欲しいと思いますか。 特定 平均 Pin.IRQ_FALLING HIGH→LOWの変化(このボードでは「した」) Pin.IRQ_RISING LOW→HIGHの変化(「 」) `Pin.IRQ_FALLING \ Pin.IRQ_RISING` 䡡方 表 4: irq() の trigger できるもの ここでは誓約したインスタントだけ知りたいので Pin.IRQ_FALLING を指定しています . handler にまたがるパス番号は、見積を1つ受け取りますようにきます。ばれるときは、切り込みの起きた Pin オブジェクトが多くなるためです。上記の例は pin.value() として、そのピンの値をお読みになります。 global n これはPythonの正常な決定まりで、MicroPythonでも同じです。 最後の sw.irq(handler=None) が最後です。元に戻して、手放してください。 ハンドラの中で print() してよいのか カットり込みハンドラの中では、時間のかかるプロセスやメモリを確保するプロセスを避けるのが原則です。 print() はどちらにも道がありますので、元々は避けていました。 ただしMicroPythonの irq() には hard という引用があり、確立された値は hard=False です。このとき、ハンドラはカットり込みが出てきましたインスタントではなく、小し後の安全なタイミングにまわって実行されます。そのため print() を书いても質問はありません。 hard=True 応答応答は速度になりますが、 print() やメモリ確実はできなくなります。まずは確立されたままで構造はありません。 チャタリングについて 機械式接点スイッチ、接点接点は瞬時、接点は細かく細かくON/OFFがオンオフします。これをチャタリングと呼び出して、1周押すだけでカットり込みが多くも入る理由になります。 FRDM-MCXN947のSW2でわかりぎりでは、10回押しに対してカットり込みは10回、チャタリングは観尺されませんでした。ただしスイッチの個別しかたによってはRISEこりうるので、数が合わないときは、前回の時間が経過し、時間が経過し、短い時間が経過し、短い時間が経過し、時間が経過しました。 ▲ カタログに戻る 6. 使い方エディター: I²Cを使ってみる GPIOのサブI²C。温度は良好です。 6.1 このボードのI²Cの件 FRDM-MCXN947にはP3T1755という温度センサーがございます。 I²CとI3Cの両方に対応した、分解エネルギー12bit、精度±0.5℃のセンサーです。 ちなみに,これをMicroPythonからそのまま読むことはできません.その理由は次のとおりです。 MCXN947のI3C1は、デバイスツリー上にあります。 pinmux_i3c1: pinmux_i3c1 { group0 { pinmux = , ; ... }; }; つまりSDAがP1_16、SCLがP1_17です。 一方、MicroPython の Zephyr のポートにはI3C の意見がありません。 machine モジュールにあるのは I2C だけで、 I3C というクラスは存在しないのです。つまりMicroPythonからは、このセンサーには手が届きません。 しかしI3Cのターゲットデバイスは、I²CのカクテルからもI²Cデバイスとしてアクセスできるようになっています(レガシーI²Cモード)。 P3T1755もそうです。 I3C信号線 ここで、最初ほど config.py にあったMikroBusのDefinitionを思い出してください。 "MIKROBUS_RX": ("gpio1", 16), # GPIOとして使える.UARTのRXではない "MIKROBUS_TX": ("gpio1", 17), # GPIOとして使える.UARTのTXではない P1_16とP1_17です。 I3C1 の SDA/SCL はI3C1 と同じです。 FRDM-MCXN947では、このI3Cの信号線がMikroBusコネクタのRX/TXピンにもリードされています(devicetreeでは「GPIO, Not a RX」というコメント払いで、GPIOとして扱われる時期があります)。 コネクタに出ているのなら、ジャンパラインで彼のバスに回線げます。 6.2 ジャンパを2本つなぐ Arduino I²C( flexcomm2_lpi2c2 ) の学科です。セクション 4.2 では、このバスが出ているのはAREF のネイバーにある専用の SDA/SCL ピンであることを強調しています。 A4/A5ではありません。 配線は配線ハーネスによって行われます。 MikroBusコネクタ 信号 先頭に立って (Arduinoヘッダー) 信号 RX (P1_16) I3C1_SDA SDA (P4_0) LPI2C2 SDA TX (P1_17) I3C1_SCL SCL(P4_1) LPI2C2 SCL 表5:JB配線 図9:ジャンパラインの接続続行 留意すべき点 SDAとSCLを違反することは出来ませんのでご了承ください。逆系はもちろん通信系。 MikroBus 側には RX と SDA があり、TX には SCL があります。 1番目の名前は1番目の名前の画像であり、1番目の名前は2番目の名前と同じです。 プルアップ抵抗: I²C はオープンドレインなので、本来はプルアップ抵抗は必要ありません。ただし作者の環境ではあり、外部支払いはけの抵抗なしで通信できました。 I3C1 側のデバイスツリーは bias-pull-up として指定されており、内部デバイスは有効なので有効です。通信の場合、4.7kΩレベルの抵抗はSDA/SCL、3.3Vの抵抗は3.3V~3.3Vの間で4.7kΩとなります。 A4/A5系がベストです。このボードのA4/A5はI²Cバスではありません。 6.3 バスをスキャンする 配線が完了し、配線の確認と確認が行われます。 I2C.scan() は,7ビットアドレスの法囲(0x08~0x77)に久问い合わせを出して,濜答え(ACK)を回したアドレスの一覧を回します。 REPLは直接試すことはできません。 >>> from machine import I2C >>> from config import PINS >>> i2c = I2C(PINS["I2C"]) >>> [hex(a) for a in i2c.scan()] ['0x48'] 0x48 これがP3T1755です。 freq= は指定できません 彼のポートのMicroPythonでは I2C(id, freq=400_000) のようにクロックサイクリック波数を指定できますが、Zephyrポートでは例外になります。 >>> i2c = I2C(PINS["I2C"], freq=100_000) Traceback (most recent call last): File " ", line 1, in NotImplementedError: explicit choice of freq is not implemented scl / sda / timeout も同様に指定できません。これらはすべてdevicetreeで決定まる値だからです。 FRDM-MCXN947のI²Cは、devicetreeで clock-frequency = 、つまり100kHzに設定されています。速度を変えたい機会はdevicetree(またはoverlay)を书き変更して、暫定を構築し正すことになります。 何も见つからないときは そらのリスト [] その場に戻って時刻を確認します。 半分挿入 半分挿入 半分挿入 SDAとSCLがなくなったか ボードの電源が入っている(たり前ですが、USBがかけていることがあります) プルアップが効果があるか ロジックアナライザやオシロスコープがあれば、SC Lにクロックが出ますを见るの一時実です。 scan() は相手がいなくてもウェーブフォーム自分は出ているので、「クロックが出ていない」のか「クロックは出ているが応答えがない」のかを切り分けられます。 I²C の信号が見えない場合は、第 10 章に挙げた I²C 関連のブログを参考にしてください。 6.4 温度制御 P3T1755の構造は、旧型のLM75と同じで、互換性があります。温度も同じです。 ポイントレジスタに 0x00 (温度レジスタ)を书く 2バイト読む 読んだ2バイトは16ビットの値ですが、有効なのは上位12ビットです。下位は4ビットは长に0です。上位ビットの記号12ビットは2の補数で整数、1LSBは0.0625℃に対応します。 コードにしたらこうなります。 import time from machine import I2C from config import PINS ADDR = 0x48 # P3T1755のI2Cアドレス REG_TEMP = 0x00 # 温度レジスタ def read_temperature(i2c, addr=ADDR): """P3T1755から温度を読んで摂氏で返す.""" i2c.writeto(addr, bytes([REG_TEMP])) # ポインタレジスタを指定 data = i2c.readfrom(addr, 2) # 2バイト読む raw = (data[0] << 8) | data[1] # 16ビットに合成 raw >>= 4 # 有効なのは上位12ビット if raw & 0x800: # 12ビットの符号を展開 raw -= 0x1000 return raw * 0.0625 # 1LSB = 0.0625℃ i2c = I2C(PINS["I2C"]) print("found:", [hex(a) for a in i2c.scan()]) while True: print("{:.4f} degC".format(read_temperature(i2c))) time.sleep(1) 実行すると、1秒ごとに温度が与えられます。 found: ['0x48'] 25.5000 degC 25.5625 degC 25.5000 degC ... センサーにタッチできると、値が上がるのがわかります。 0.0625℃と刻まれているので、近くをづけるだけでもアニメーションが見られるはずです。 コードの補足 raw >>= 4 の一部です。 P3T1755がす2バイトは、時のようなビット構成になっています。 図10: 温度制御構成   12ビットのデータが左诘め(MSB側に公開して)がんなされているので、4ビット右にシフトして右诘めにストレートしています。 記号( if raw & 0x800 )の展開は氷点下で正である必要があります。 12ビットの2の補数、のビット11が1なら負の数の最大値です。 Python の整数は限られており、「12 個の負の数」と「Python の負の数」はストレートでストレートな 0x1000 です。 0℃以上の場合は試験を省略し、安全性試験に入ります。 MikroBus側I²Cを使用する場合 じセンサーをMikroBusのI²C( flexcomm3_lpi2c3 )から読むこともできます。その機会はジャンパの続きをMikroBusコネクタのSDA(P1_0)/SCL(P1_1)にして、コードの PINS["I2C"] を PINS["MIKROBUS_I2C"] に変えるだけです。 i2c = I2C(PINS["MIKROBUS_I2C"]) MikroBus、SCL/SDA、RX/TX、SCL/SDA、交差、配線、短絡配線と同様です。 ▲ カタログに戻る 7. 編集者:SPIってみる 最後はSPIです。 7.1 ループバックでトライアル I²C はルール違反であり、FRDM-MCXN947 は SPI の標準であり、システムはそれに基づいています。そこでループバックでテストします。 ループバックというのは、MOSI(送信)とMISO(受信)を直接接続してしまう方式です。自己分割発送、自己分割返送、社外部品できます。 Arduino SPI ( flexcomm1_lpspi1 )は、サブのピンに出ています。 信号 Arduinoヘッダー ピン タップル CS D10 P0_27 ("gpio0", 27) モシ D11 P0_24 ("gpio0", 24) 味噌 D12 P0_26 ("gpio0", 26) SCK D13 P0_25 ("gpio0", 25) 表6:Arduino SPIの切断機能 D11(MOSI)とD12(MISO)をジャンパラインでラインしてください。 図11:MOSIとMISOを正解してループバックにする   from machine import Pin, SPI from config import PINS spi = SPI(PINS["SPI"], baudrate=1_000_000, polarity=0, phase=0) tx = bytes([0x00, 0xFF, 0xAA, 0x55, 0x01, 0x02, 0x04, 0x08]) rx = bytearray(len(tx)) spi.write_readinto(tx, rx) print("送信:", [hex(b) for b in tx]) print("受信:", [hex(b) for b in rx]) print("一致:", tx == bytes(rx)) 旅の結果はこうなります。 送信: ['0x0', '0xff', '0xaa', '0x55', '0x1', '0x2', '0x4', '0x8'] 受信: ['0x0', '0xff', '0xaa', '0x55', '0x1', '0x2', '0x4', '0x8'] 一致: True 送り返して送り返してください。 SPIが正しく動作しています。 ジャンパラインを外して実行すると、信頼できるデータが変わります。 MISOがどこにも组がっていない国(ハイ限界)になるので、 0x00 ばかりになったり。 お好きなギフトをお送りください 0x00 、 0xFF 、 0xAA 、 0x55 、そして 0x01 ~ 0x08 という与びには理由があります。 0x00 / 0xFF : すべてのビット 0 とすべてのビット 1。ラインは固定、ラインは固定 0xAA / 0x55 : 10101010 と 01010101 .ビットごとに成り上がるので、タイミングの窭炒见るのに向けて 0x01 , 0x02 , 0x04 , 0x08 ...:1のビットを1つずつずらしていく。ができる ロジックアナライザで波形を見るときにも、この与びはジャッジしやすくて便利です。 SPIのモード polarity と phase は SPI のモードを決定しますパラメータです。 モード 極性(CPOL) フェーズCPHA 0 0 0 1 0 1 2 1 0 3 1 1 表 7: SPI のモード ループバックでは自分が発信したものを自分で受け取っただけなので、どのモードでも満場一致でします。実记のデバイスに式ぐときは、そのデバイスのデータシートに合わせてください。 なお、I²Cと違反ってSPIでは baudrate が指定できます。 7.2 CS自動制御システム 今度こそ、実记のSPIデバイスを式ぐってCS(チップセレクト)が必要になります。 ここで、このポートならではのこだわりポイントがあります。 MicroPython Zephyr ポートの SPI には、CS を自動制御しません。 多くのMicroPythonのポートでは、 SPI オブジェクトにCSピンをたくさん待っていて、転刊のたびに自動でCSをLOWにして、最終的にわったらHIGHに戻ってきます。しかしZephyrポートの実装では、内部でZephyrに多すSPI設定のCS指定が空になっています。 したがって、 CS は machine.Pin 自分でコントロールする必要があります。 import time from machine import Pin, SPI from config import PINS cs = Pin(PINS["D10"], Pin.OUT, value=1) # アイドル時はHIGH spi = SPI(PINS["SPI"], baudrate=1_000_000, polarity=0, phase=0) data = bytes([0x9F]) # 例:何かのコマンド rx = bytearray(3) cs.value(0) # CSをアサート(LOW) spi.write(data) spi.readinto(rx) cs.value(1) # CSをデアサート(HIGH) print([hex(b) for b in rx]) CSはアクティブ・ローなのが全般です。 value(0) は選択されていません。 value(1) は選択されていません。 LEDは 0 と同じ「有効」です。 CSを戻せないようご注意ください。 LOW のままにすると、時の転送信でデバイスがカオスになります。転発信のたびに cs.value(0) と cs.value(1) を対で书く、そして忘れないのが真実です。 MikroBusのSPIをご利用ください MikroBus コネクタの SPI( flexcomm6_lpspi6 ) も同じように使えます。これが下の注のマージで新たに使えるようになったものです。 cs = Pin(PINS["MIKROBUS_CS"], Pin.OUT, value=1) spi = SPI(PINS["MIKROBUS_SPI"], baudrate=1_000_000, polarity=0, phase=0) MikroBusには豊富な種類のクリックボードが目的になっているので、そこをオンラインでテストするのも面白いと思います。 ▲ カタログに戻る 8. 編集者:イーサネットってみる 最後はイーサネットです。 8.1 有線LAN接続 ヘッドの外観は小さく、タッチも小さく、有線イーサネットは強力で強力です。ここで、その理由を具体的に考えておきます。 電波が使用され、無線は禁止および制限されており、場所が使用されます。 期間の安定性は安定しており、決定のサイクルはサイクルの目的であり、その目的はそれを使用することです。 配線と配線、通信と通信、通信と配線 工場設備、有線ケーブル設備、環境設備 MCXN947 のイーサネット コンソール(ENET QoS) は Zephyr の意見で行われていて、MicroPython からサポートされている socket モジュールは常に使用できます。 8.2 このポートのネットワークAPI まず第一に、できることとできないことをはっきりさせておきます。                  できるのは socket モジュールだけです。 >>> import socket >>> import network Traceback (most recent call last): File " ", line 1, in ImportError: no module named 'network' ここは、NXP のマイコンと同様にけであるi.MX RT の専用ポート( ports/mimxrt ) と比較的とわかりやすいと思います。あちらではイーサネットを時々のように扱えます。 import network lan = network.LAN(0) lan.active(True) DHCP サーバがあればアドレスはそこから一致され、無ければ lan.ipconfig(addr4="...") で実行時にSET できます。インターフェイスを有効にするもの無効にするもの lan.active() ひとつです。 ZephyrPortには、この network モジュールがありません。 network.LAN() も ifconfig() も存在せずに、 IPアドレスのSETや確認をするための専用APIが無い、ということです。アドレスはビルド時のKconfigで決定します(後述)。 socket オブジェクトがホールドするメソッドも、一般的なMicroPythonより小さいです。 作る 作る bind / listen / accept / connect getsockname() send / recv / recvfrom / sendto getpeername() read / write / readline / makefile settimeout() setsockopt / close   表8: Zephyrポートの socket ・    特殊効果は3点です。 getsockname() が無いので、自分のIPアドレスを直接は表現できません(セクション 8.4回避戦略を表示します) settimeout() が無いので、通信は通信の目的のために待機します(詳細についてはセクション8.8の詳細な説明を参照) accept() が回収开続元アドレスは长に None です.ポートのソースにコメントで // TODO と书かれている、の一部がアンインストールされています IPアドレスはビルド時に決定します このポートには、実行時に IP アドレスを設定するという意味がありません。 ports/zephyr/prj.conf の確立された価値は時代のようになっています。 CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.0.2.1" CONFIG_NET_CONFIG_MY_IPV4_NETMASK="255.255.255.0" CONFIG_NET_CONFIG_MY_IPV4_GW="192.0.2.2" CONFIG_NET_DHCPV4=y DHCP は有効です、DHCP は有効ですワークに式げればそこからアドレスが开里道てられます。 DHCP サーバがいない環境では、の Quiet アドレス 192.0.2.1 が使われます。 なお 192.0.2.x は、RFC 5737 は文書の例です。 Zephyr のサンプルセットがそのまま入っているだけですので、実记のでは自分のネットワークに合わせた値に変更することになります。変更する機会はボードの .conf に上书きのセットを使って、ビルドしてください。 8.3 PC直接接続テスト DHCP LAN LAN システム LAN システム DHCP LAN システム DHCP LAN LAN システム DHCP LAN システム DHCP LAN システム DHCP LAN システム DHCP LAN システム DHCP LAN システム DHCP システムボードがどのアドレスを受け取ったのかを知るのが面恧す( getsockname() が無いため). ここでは、ボードとPCをLANケーブルでダイレクトノットしてテストします。これはボードのアドレスは静的設定の 192.0.2.1 に決定まるので真実です。 (下の写真では「ストレートノット」ですがコンピューターにイーサネットポートが無いのでUSB Type-C(イーサネット)   図12:ボードとPCを直接接続する(※このコンピュータの場合、デバイスの接続にはEthernetポートがないのでUSB Type-Cコンバータを使用します) PC側の設定 PCのイーサネットはPCのイーサネットと同じです。 プロジェクト 価値 IPアドレス 192.0.2.2 サブネットマスク 255.255.255.0 無事ゲートウェイ 空欄 表9:PC側設定 192.0.2.2 はボードがゲートウェイとしてSETしているアドレスなので、これに合わせて保存と都合がいいです。 最近のPC自動MDI / MDI - はたきで正かめる MicroPython はタッチの手前にあり、PC は ping ゾーンにあります。 Zephyr IP スタックはMicroPython とはbie のスレッドで動いているので、 REPL に何も入力しなくてもping には応答します。 ping 192.0.2.1 PING 192.0.2.1 (192.0.2.1): 56 data bytes 64 bytes from 192.0.2.1: icmp_seq=0 ttl=64 time=1.088 ms 64 bytes from 192.0.2.1: icmp_seq=1 ttl=64 time=0.657 ms 64 bytes from 192.0.2.1: icmp_seq=2 ttl=64 time=1.938 ms --- 192.0.2.1 ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss これが通れば、 PHYのリンク・イーサネットの意見・IPスタックまで動いていることになります。ここが通らないうちにMicroPythonのコードを书いても意味がないので、最初に確認してください。 通信に関しては、PC側のIP設定、PC側の電源、および電源供給の安定性を確認します。 8.4 自己分割IPアドレス getsockname() がないので、ボードに「あなたのIPアドレスは?」と直接は文けません。 代表してわりに使えるが bind() の成不了です。自己 bind() 支持と失敗なので、候補者を従属テストか、どれをホールドしているかがわかります。 import socket for ip in ("0.0.0.0", "192.0.2.1", "192.168.1.1"): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.bind((ip, 9999)) print(" bind OK ->", ip) except Exception as e: print(" bind NG ->", ip, type(e).__name__, e) s.close() 実行するとこうなります。 bind OK -> 0.0.0.0 bind OK -> 192.0.2.1 bind NG -> 192.168.1.1 OSError [Errno 2] ENOENT 0.0.0.0 ここでは 192.0.2.1 だけが成功したので、ボードは静かな設定のアドレスを使っているとわかります。 DHCPはDHCPと同じです。 DHCPは必要なときだけ使用するものであり、単体でスタンバイとして使用することは困難です。それは機会です、それはDHCP プログラムと同じです。 「どの机にどのアドレスを貸していますか」の一覧が見られるので、そこからボードのアドレスを拾ってください。 8.5 ボードをWebサーバにする ここまでで疎通は確認できました。最後に、ボードをWebサーバにしてみます。 PC側の目的は「するものはブラウザだけです」を使用することです。 import socket srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) srv.bind(("0.0.0.0", 8080)) srv.listen(1) print("listen 0.0.0.0:8080 接続待ち...") cl, addr = srv.accept() # addr は常に None print("接続あり:", addr) req = cl.recv(256) print("リクエスト先頭:", req.split(b"\r\n")[0]) body = " FRDM-MCXN947 MicroPython on Zephyr " cl.send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n" + body) cl.close() srv.close() bind() に "0.0.0.0" を多しているのは、「このボードがホールドしているすべてのアドレスで治療できる」という意味です。アドレスを決定めヒットちしなくても大丈夫ですので、DHCPでもストレートノットでもそのままアニメーションきます。 「するとボード横はこう」は「して」を表し、その後実行を待ちます。 listen 0.0.0.0:8080 接続待ち... このSTATEでPCのブラウザから http://192.0.2.1:8080/ を开いてください。 図13:ブラウザからボードにアクセスする   ボードラテラルにはリクエストがされます。 接続あり: None リクエスト先頭: b'GET / HTTP/1.1' 接続あり: None となっているのが、セクション 7.2 に触れられた accept() の非実装组です。身体と身体のつながりも同様で、コミュニケーションが障害となります。 Python の数十行、マイコンが Web サーバになりました。ここから、センサーの値を HTML に埋めて無視すれば、第 6 章温度テスター 温度計 温度計 になります。 8.6 LED照明制御操作 最初のセクションは最初のセクション、最後のセクションは最後のセクションです。今日はブラウザからボードのLEDを操作できますようにみます。 第 3 章: で光らせた LED を、 /on と /off という URL で切り代えます。 import socket from machine import Pin from config import PINS led = Pin(PINS["LED_RED"], Pin.OUT, value=1) # 1 = 消灯 srv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) srv.bind(("0.0.0.0", 8080)) srv.listen(1) print("http://192.0.2.1:8080/ を開いてください") running = True while running: cl, _ = srv.accept() try: req = cl.recv(256) path = req.split(b" ")[1] if b" " in req else b"/" if path == b"/on": led.value(0) # アクティブ・ロー: 0で点灯 elif path == b"/off": led.value(1) elif path == b"/quit": running = False state = "ON" if led.value() == 0 else "OFF" cl.send("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n" "Connection: close\r\n\r\n" " FRDM-MCXN947 " " RED LED: %s " " ON / OFF " "" % state) except OSError as e: print("接続エラー(無視):", e) # 後述.握りつぶして継続する try: cl.close() except OSError: pass srv.close() print("サーバを終了しました") 最初のセクションには 14 行の「が」と 38 行の「ここが」が含まれています。 ブラウザで http://192.0.2.1:8080/ を开くと、「ON」「OFF」のリンクが与ったページが出ます。クリックするたびに、ボードの红LEDが実界に点々出てきました。 図14:ブラウザからボードのLEDを操作する http://192.0.2.1:8080/quit を开すればサーバが終わりになります、REPLに戻ります。 ここまで引っ越しなら成功です。コードの中の人、 try / except を入れてある理由については発行录にまとめました。 8.7 電源装置が電源装置に接続されています。 ここまでは,PCからスクリプトを実行していました。最後に、 PC ベースの電源装置には電源装置 40 によって電力が供給されます。 MicroPythonが起動すると、 /flash は起動時に自動的に使用されます。 _boot.py … ファイルシステムのマウントなど(ファームウェアに内蔵,変更不可) boot.py … あれば実行される(起動時の設定用) main.py … あれば実行される(アプリケーション用) つまり /flash/main.py として保存したスクリプトは、電源を入れるだけで動きます。 セクション 7.6 LED オペレーション システム main.py LED オペレーションを保存します。 Thonnyなら,エディタで開いたSTATUSで「ファイル」→「名前を払って保存」を選択して、最初に「MicroPythonデバイス」を選択して main.py という名前にします。 mpremote なら時の正論です。 mpremote cp led_server.py :/flash/main.py 保存したらUSBケーブルを除いて、ACアダプターやモバイルバッテリーなど、電源システムにおいでください。 LANケーブルは組み立ててあります。 しばらく出てから PC のブラウザで http://192.0.2.1:8080/ を开くと、 PC ベースの LED ディスプレイ、LED ディスプレイ オペレーション システム。 Python の数十行をブックいて main.py という名前の前で設定しただけで、ネッ トワーク クロスしにできるマシンになりました。 「抜け道」のつもりで保存しなければならない それに注意を払うことが重要です。 main.py はSTARTのたびに実行されます。もしその中文が accept() で出続けているんだったら, REPLは永久に戻ってきません。セクション 8.8 : べるとおり、このポートには settimeout() が無く、Ctrl-C でも抜けられないからです。 今後REPLに入れないということは,その main.py を抜くこともできないというSTATUSになります。 セクション 7.6 のコードに /quit を入れてあるのは、このためです。ブラウザで http://192.0.2.1:8080/quit を开ればスクリプトが終わり、REPL が来ます。ネットワーク経絡上のVERYKou というわけです。 main.py 仕事の順序は時間の順序であり、順序は時間の順序である。 まずは通常のスクリプトとして実行し、今後の行動を確認することを楽しみにしています 終わりは終わり、手段は終わり、終わりは確定した( /quit など) それから main.py として保存する いきなり main.py に书いて Try すのは避けてください。 8.8 ハマりやすいポイント settimeout() がないので、ブロックすると戻ってきません ご注意ください。 accept() や recv() は、手が来て待機が終わります。通常、MicroPython settimeout() 待機時間の上限は待機時間の上限です。 なお、これはC语のレベルで待っているのでCtrl-Cが効きません。状態が良くなるとREPLは力を入れて受けるのが得意です。 筆者も同様で、電源は必須です。リセットボタンでも戻らないことがあります。 対泽としては、 accept() を実行したら,すぐに与続しに行く(ブラウザのアドレスバーにURLを入れておき,実行後すぐ开けるようにしておく) 缲り回し受信けペイできるサーバには、 8.6の /quit のような抜け道を必ず覚悟しておく アクション main.py セクション8.7 . エラーで正に合ったあとは EADDRINUSE になります サーバーのプログラムが途中でエラーが終了しました、待って受信けに使っていたソケットが开じられないまま残っています。そのSTATEでもう一度実行するとこうなります。 Traceback (most recent call last): File " ", line 10, in __main__ OSError: [Errno 112] EADDRINUSE 「そのアドレスとポートはもう使われている」という意味です。 SO_REUSEADDR いても、以前のソケットが本道开いたままなら効果はありません。 Ctrl-D でソフトリセットすれば、MicroPython が再起動されてソケットがすべてliberate ます。サーバーを书いてテストしているときは、エラーが出たらまず Ctrl-D を取る、と覚えておくと楽です。 ネットワークはREPLが止まっていても動いています これは知っておくと切り分けが楽になります。 Zephyr IP スタックはMicroPython とはbie のスレッドで移動可能であるため、 MicroPython がしっかりしていてもping には応答します。 つまり、「pingは通るのにREPLが抜き濜」というSTATUSは、Ethernetの失敗ではなくMicroPythonがブロックしていることを表示しています。逆に「pingも通らない」ならケーブルやSETを怪しいう、という切り分けができます。 DNS環境シーケンス socket.getaddrinfo() 名前解決もできますが、DNS サーバーのアドレスは CONFIG_DNS_SERVER1 の確立された値が 192.0.2.2 になりました。 DHCP環境、DHCP、マッチング、DNSなど。 直接接続の構成は名前の前にソリューションがあり、IPは直接指定です。 ▲ カタログに戻る 9. まとめ FRDM-MCXN947でMicroPythonをアニメーションかすまでの一通りを見てきました。最後の重要なポイントは、それを整理することです。 今度はもう一度やってみます ホーム micropython/micropython の master に FRDM-MCXN947 の設定があったことで、パッチを当てずに本家のソースからそのままビルドできるようになりました。 /flash 有線イーサネット接続 MicroPython がアニメーションく安いボードの多くは無線でネットワークにシステムぎますが、このボードは有線のイーサネットをホールドしてます。電波は使われる場所であり、電波の目的は電波の安定性と目的です。このメモはウェブページで確認されました。バ見てブラウザから見たところを実機で確認しました。 ゼファーの弱点、その弱点 ピンを ("gpio0", 10) のようなタプルで指定しなければならない点が、このポートの一盘の使いにくさです。これは config.py に PINS 辞書を意にして /flash/lib/ に志してで、実用上ほぼ解出できます。本の最初の名前は本です、名前は本です、名前は本です、名前は本です KeyError で検出ようできるという子的な効果もあります。 ひきこもり ボード設定ファイルの名前は、ボード変更サブ組み込みの frdm_mcxn947_mcxn947_cpu0.conf で認められません クローンしたあとに git submodule update --init lib/micropython-lib が必要です RGB LEDはアクティブ・ロー。 value(0) で光る( off() を火ぶと光る) Pin に toggle() はない スイッチ入力は Pin.IN, Pin.PULL_UP で構成されます。大下 0 (LEDと同じアクティブ・ロー) Pin.irq() が使えます。 hard=False を設立しましたのでハンドラ内で print() してよい このボードのArduinoヘッダーのI²Cは、A4/A5ではなく専用のSDA/SCLピン(P4_0/P4_1) machine.I2C に freq= / scl= / sda= / timeout= は指定できない(devicetree で決定まる) SPIの自動制御システム、 machine.Pin 手動制御システム MicroPyth には I3C がないため、ジャンパで I²C バスに引用する必要がある os.uname() はこのポートでは组見受け入れられていない ネットワークは socket のみ. network モジュールはありません socket に getsockname() が無いので、自分の IP は bind() の成不でアニメーションべる socket に settimeout() が無い。 accept() や recv() でブロックするとCtrl-Cでも抜けられず、電源の入れストレートしが必要になることがある accept() が洗い合おう元アドレスは长に None accept() は失敗しても例外を投票げない。無効なソケットが返されました、回の recv() が EBADF になるので、 try / except OSError で囲む サーバがエラー終了するポートが洴まれたままになります。 Ctrl+D で解放します IPアドレスは実行時に変更できません。 Kconfigで決意まるのでビルドしましょう このビルドでは input() が使えません(関数レベルが BASIC_FEATURES のため。対言说ちが必要なときは time.sleep() (によるカウントダウンで代用します) MicroPython は非常に強力で強力です。 FRDM-MCXN947 高性能なマイコンでも、MicroPython でづかして感情をつかんでから本片の実装を C で书く、という入り方は十に见実的だと思います。 ぜひお試ししてみてください。 ▲ カタログに戻る 10.参考文献 MicroPython MicroPython公式サイト MicroPython ドキュメント MicroPython GitHub リポジトリ MicroPython Zephyrポートのreadme 今回はマージされたPull Request (#19573) ゼファー ゼファープロジェクト公式サイト Zephyr入門ガイド Zephyr FRDM-MCXN947 ボードドキュメント Zephyrシリーズ 第2章 はじめてのビルドと実機アニメーション(日本语ブログ) ツール ソニー公式サイト Thonnyのインストールとの基本操作(YouTube) mpremote ドキュメント ハードウェア FRDM-MCXN947製品 MCX Nシリーズ 製品ページ P3T1755 製品ページ バス NXPコミュニティ・ブログ:I²Cバスの概要 (日本语ブログ) NXPカメラ NXPコントローラ:I3Cプログラマの概要 NXPコミュニティ・ブログ:I²Cハードウェア・デバッグ (日本语ブログ) ▲ カタログに戻る 11. 補足事項:LED動作システムの説明 セクション 8.6のコードについて、中国語の说をここにまとめました。この記事の流れは 2 つの部分に分けられる唯一のものです。アニメーションかすだけなら考えなくても構築しない。 11.1 ここまでのコンテンツが1まとめている このコードは小さいわりに、この记事で読んだことをほとんど使っています。 from config import PINS — 第4章の定義 Pin(PINS["LED_RED"], ...) — LEDの3章。 value(0) でLighting Upセクション 3.5説明したアクティブ・ローだからです socket — 小説第7章 11.2コードの3つのしはんけ (1) while True セクション 8.5のサーバは 1 return で終了わりで一応、運用を続けるには缲り回しが要ります。 accept() 問題、セクション 8.8の問題のステータス、および問題のステータスを待っています。 そこ /quit しました。 elif path == b"/quit": running = False ブラウザで http://192.0.2.1:8080/quit を开くと、最後の応答答えしてからループをけ、REPLが来ます。たった2行ですが、これが無いとプログラムを止めるめる入れる手段が力のストレートししかなくなります。 (2) リクエストからパスをとり出す ブラウザは、続くときのような文字列を受信して、まいりますを送信します。 GET /on HTTP/1.1 Host: 192.0.2.1:8080 ... このうち必要はない真ん中の /on の部分だけです。空白部分がカットされ、2つのアイテムが切り取られます。 path = cl.recv(256).split(b" ")[1] b" " そうのように b が発行しているのは、コミュニケーションで受け取ったけたけるのが文字行ではなくバイト行だからです。比較する側も b"/on" と书く必要があります。 (3)現状の反映 led.value() 今の出力が読めます。アクティブ・ローなので 0 が軽いです。 state = "ON" if led.value() == 0 else "OFF" これで、ページを开きまっすぐたびに現在の状態がされます。 11.3 例外が必要な理由 ナオの著書『 try / except 』は、その地方の歴史についての物語です。 cl, _ = srv.accept() path = cl.recv(256).split(b" ")[1] # ← ここで落ちることがある 今度こう书くと、ブラウザで操作を缲りリターンすうちに必ずいつかのエラーで停止します。 Traceback (most recent call last): File " ", line 16, in OSError: [Errno 9] EBADF EBADF は「無なファイル记子」という意味です。 accept() が回ってきたソケットが、まともに使える状態にはなりません。 理由は、はこのポートの実装にあります。 ports/zephyr/modsocket.c の accept は、こうなっています。 int ctx = zsock_accept(socket->ctx, &sockaddr, &addrlen); socket_obj_t *socket2 = socket_new(); socket2->ctx = ctx; /* エラーチェックが無い */ じファイルの彼のオフ番号は RAISE_SOCK_ERRNO(res) で戻り値を検checkしているのと同じで、 accept だけが検checkをしていません。 zsock_accept() が失敗して -1 を返しても、それはそのままその中身としてホールドち戻ってしまいます。その結果、の recv() が EBADF になるとき、という流れです。 ではなぜ accept() が失敗するのか。 Zephyrに扱えるネットワーク开続の数に上限があるためです。 CONFIG_NET_MAX_CONTEXTS=6 CONFIG_NET_TCP_TIME_WAIT_DELAY=1500 同時に6チャンネルの通信が使用でき、通信終了時間は TIME_WAIT 秒です。ブラウザはページ本のほかに /favicon.ico なども取りに来るので、続けてクリックしていると、あっという間の6枚を作ります。 例外は例外です。これで. except OSError as e: print("接続エラー(無視):", e) cl.close() も try で囲んであるのは、壊れたソケットを閉じようとして、そこまた例外が出るのを防ぐためです。 実记にどのくらい失敗するのか 著者の環境ではテストが行われていません。 作戦のペース 成功/トライアル 間隔を置いて連続して打撃を行う 32 / 40 1秒間隔 15 / 15 2秒間隔 10/10 表 10: クリックの快さと応答 りこぼし 人がブラウザをクリックする程度のスピードさであれば、とりこぼしは起きません。継続して最初のものと戦い、最初のものは最初のもの、例外は最初のもの、例外は最初のものです。もう一度言いますが、昼も夜も普通です。 11.4 Connection: close について これは のです。急行に切れてもらうこで、枠の解放をはーいます。 11.5 その他気をつける点 ページの文字はASCIIにしてあります。日本語を入れる機会は Content-Type: text/html; charset=utf-8 としてください req.split(b" ")[1] if b" " in req else b"/" としているのは、 recv() が空を回ったとき IndexError で流さないようにするためです Connection: close 返却の理由は、記録の説明です。 11.6 未来の未来 accept() のエラーチェックが意味がありません、メインレポートの場合はされうる部分を修正しました。修正されれば accept() が正しく例外をげられるので、 try / except の书き方も素正になります。ここに书いたコンテンツは、2026 年 8 月時点で公開されました。 ここまで来れば、あは応用です。 led を 3 色 RGB 操作パネル、第 6 章: 温度、温度、温度、温度、温度、温度計、温度計 ▲ カタログに戻る 最終更新日:2026年9月2日:初版 ========================= この投稿の「コメント」欄は作成者によって書かれており、返信レターは現在作成者によって書かれています。 (当社は同社のNXP代理店、NXPのNXP販売店、NXPのパートナーであり、ご質問の直接の担当者はNXPです。) MicroPythonの本家R&D、ZephyrのZephyr、FRDM-MCXN947のFRDM-MCXN947の設定。 NXP NXP MicroPython MicroPython i.MX RT MCX Nシリーズが続いたことになります。 この记事では、増設のビルドと书き込みから开みて、REPLでの対線操作、Lチカ、スイッチ入力とカットり込み、I²C温度センサー、SPI、有線イーサネット、Webセンサー、LEDを操作するところまでを、フォローして説明します。機械の動作は機械の動作によって確認されます。 「MicroPythonをタッチするのは初めて」という方を考えて、途中でつまずきやすい点や、このポート固有の制限と回避戦略も有って书きました。 MicroPython and FRDM-MCXN947MicroPython and FRDM-MCXN947MicroPython and FRDM-MCXN947MicroPythonとFRDM-MCXN947 イーサネット インタフェース 導入 MCX 日本語ブログ Re: FRDM-MCXN947でMicroPythonを動かす (日本語ブログ) 有料級の記事ですね。非常に興味深いです。 Re: FRDM-MCXN947でMicroPythonを動かす (日本語ブログ) ありがとうございます
View full article
S32プラットフォーム用S32デザインスタジオ3.5ライセンス 私はノートパソコンとデスクトップパソコンをそれぞれ1台ずつ持っています。ノートパソコンでS32 Design Studioをアンインストールして再インストールするには、S32 Platform 3.5用のライセンスが2つ必要です。
View full article
S32K344/S32K388 MPU Setting Check I'm trying to create a generic, default MPU configuration for the S32K344 and S32K388. I have a basic proposal here, but I would love some confirmation that this looks like it covers everything - especially the register sections - correctly. The types here aren't super important - hopefully you can tell the matching types based on the names. The only odd one is "u4" which is just a wrapper for validating a unsigned 4-bit integer /// S32K344 core-local memories and peripheral windows, using regions 0 through 5. /// /// Geometry: S32K3xx_memory_map.xlsx, Memories sheet, S32K344 column. /// Attributes: S32K3xx RM rev. 12, sections 3.7, 3.9, and 5.2. pub const S32K344_BASE_REGIONS: [MpuRegionConfig; 6] = [ MpuRegionConfig { region: u4::new(0), base_addr: 0x0000_0000, // ITCM: 64 KiB size_log2: 16, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(1), base_addr: 0x2000_0000, // DTCM: 128 KiB size_log2: 17, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(2), base_addr: 0x2040_0000, // SRAM: 320 KiB size_log2: 19, // 512 KiB envelope; enable five 64 KiB subregions access: AccessPermission::ReadWrite, memory_type: MemoryType::WriteBackReadWriteAllocate, shareable: false, execute_never: true, subregion_disable: 0b1110_0000, }, MpuRegionConfig { region: u4::new(3), base_addr: 0x4000_0000, // AIPS0/1/2: 6 MiB size_log2: 23, // 8 MiB envelope; enable six 1 MiB subregions access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(4), base_addr: 0x0040_0000, // Program flash: 4 MiB size_log2: 22, access: AccessPermission::ReadOnly, memory_type: MemoryType::WriteThrough, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(5), base_addr: 0x1000_0000, // Data flash: 128 KiB size_log2: 17, access: AccessPermission::ReadOnly, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, ]; /// S32K388 core-local memories and peripheral windows, using regions 0 through 6 /// /// Geometry: S32K3xx_memory_map.xlsx /// Each core sees its own 32 KiB ITCM and 64 KiB DTCM at the same local addresses pub const S32K388_BASE_REGIONS: [MpuRegionConfig; 7] = [ MpuRegionConfig { region: u4::new(0), base_addr: 0x0000_0000, // ITCM: 32 KiB per core size_log2: 15, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(1), base_addr: 0x2000_0000, // DTCM: 64 KiB per core size_log2: 16, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(2), base_addr: 0x2040_0000, // SRAM: 768 KiB size_log2: 20, // 1 MiB envelope; enable six 128 KiB subregions. access: AccessPermission::ReadWrite, memory_type: MemoryType::WriteBackReadWriteAllocate, shareable: false, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(3), base_addr: 0x4000_0000, // AIPS0/1/2: 6 MiB size_log2: 23, // 8 MiB envelope; enable six 1 MiB subregions. access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(4), // Program flash: 8 MiB at 0x0040_0000 is not aligned to 8 MiB. // Enable subregions 2..=5 of a 16 MiB envelope, mapping exactly // 0x0040_0000..0x00C0_0000 (end exclusive). base_addr: 0x0000_0000, size_log2: 24, access: AccessPermission::ReadOnly, memory_type: MemoryType::WriteThrough, shareable: false, execute_never: false, subregion_disable: 0b1100_0011, }, MpuRegionConfig { region: u4::new(5), base_addr: 0x1000_0000, // Data flash: 128 KiB size_log2: 17, access: AccessPermission::ReadOnly, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(6), base_addr: 0x4400_0000, // AES_ACCEL: 1 KiB, outside AIPS0/1/2 size_log2: 10, access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0, }, ]; Thanks in advanced for the help! Re: S32K344/S32K388 MPU Setting Check Hi @kscz  The proposed MPU configuration looks good overall, including the region sizes, alignment, and subregion configuration. The main remaining point is to ensure that all required peripheral and PPB/system-register areas are properly covered with the appropriate Device, read/write, and execute-never attributes. If a default-deny region is used, it must have lower priority than the explicitly permitted regions. BR, VaneB Re: S32K344/S32K388 MPU Setting Check Thank you for the check! Re: S32K344/S32K388 MPU Setting Check Hi @kscz  Yes, you are correct. The AIPS regions you have configured look appropriate for covering the address space, and I do not see another peripheral region that would need to be added. Your understanding of the PPB/system-register area is also correct. Since accesses to the PPB use the default system address map, you do not need to add a separate MPU region for it. My previous comment was intended more as a general note to use the appropriate Device, read/write, and execute-never attributes for peripheral regions. I did not mean to imply that I had identified a missing region in your configuration. From this perspective, your current configuration looks good. Re: S32K344/S32K388 MPU Setting Check I'm a little perplexed by your response! "The main remaining point is to ensure that all required peripheral and PPB/system-register areas are properly covered with the appropriate Device, read/write, and execute-never attributes." Am I missing any regions for peripherals? I was hoping for confirmation that the 3 AIPS regions I covered in this configuration was enough that I had correctly covered *all* the peripherals! In a similar vein, I was hoping that you could confirm there were no other regions I'd missed in general. Things like the PPB/system-register areas are exempted from the MPU configuration, no? At least that's my understanding of B3.5.1 of the ARMv7-M architecture reference: > Accesses to the Private Peripheral Bus (PPB) always use the default system address map. > Exception vector reads from the Vector Address Table always use the default system address map. Let me know I've misunderstood something or if this configuration actually looks incomplete!
View full article
S32K344/S32K388 MPU設定チェック S32K344とS32K388用の汎用的なデフォルトMPU構成を作成しようとしています。ここに基本的な提案がありますが、これがすべて、特に登録セクションを正しく網羅しているように見えるかどうか、確認していただけると幸いです。 ここでの種類はそれほど重要ではありませんが、名前から一致するタイプが分かるはずです。唯一異質なのは「u4」で、これは符号なし4ビット整数を検証するためのラッパーにすぎない。 /// S32K344 core-local memories and peripheral windows, using regions 0 through 5. /// /// Geometry: S32K3xx_memory_map.xlsx, Memories sheet, S32K344 column. /// Attributes: S32K3xx RM rev. 12, sections 3.7, 3.9, and 5.2. pub const S32K344_BASE_REGIONS: [MpuRegionConfig; 6] = [ MpuRegionConfig { region: u4::new(0), base_addr: 0x0000_0000, // ITCM: 64 KiB size_log2: 16, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(1), base_addr: 0x2000_0000, // DTCM: 128 KiB size_log2: 17, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(2), base_addr: 0x2040_0000, // SRAM: 320 KiB size_log2: 19, // 512 KiB envelope; enable five 64 KiB subregions access: AccessPermission::ReadWrite, memory_type: MemoryType::WriteBackReadWriteAllocate, shareable: false, execute_never: true, subregion_disable: 0b1110_0000, }, MpuRegionConfig { region: u4::new(3), base_addr: 0x4000_0000, // AIPS0/1/2: 6 MiB size_log2: 23, // 8 MiB envelope; enable six 1 MiB subregions access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(4), base_addr: 0x0040_0000, // Program flash: 4 MiB size_log2: 22, access: AccessPermission::ReadOnly, memory_type: MemoryType::WriteThrough, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(5), base_addr: 0x1000_0000, // Data flash: 128 KiB size_log2: 17, access: AccessPermission::ReadOnly, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, ]; /// S32K388 core-local memories and peripheral windows, using regions 0 through 6 /// /// Geometry: S32K3xx_memory_map.xlsx /// Each core sees its own 32 KiB ITCM and 64 KiB DTCM at the same local addresses pub const S32K388_BASE_REGIONS: [MpuRegionConfig; 7] = [ MpuRegionConfig { region: u4::new(0), base_addr: 0x0000_0000, // ITCM: 32 KiB per core size_log2: 15, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(1), base_addr: 0x2000_0000, // DTCM: 64 KiB per core size_log2: 16, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(2), base_addr: 0x2040_0000, // SRAM: 768 KiB size_log2: 20, // 1 MiB envelope; enable six 128 KiB subregions. access: AccessPermission::ReadWrite, memory_type: MemoryType::WriteBackReadWriteAllocate, shareable: false, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(3), base_addr: 0x4000_0000, // AIPS0/1/2: 6 MiB size_log2: 23, // 8 MiB envelope; enable six 1 MiB subregions. access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(4), // Program flash: 8 MiB at 0x0040_0000 is not aligned to 8 MiB. // Enable subregions 2..=5 of a 16 MiB envelope, mapping exactly // 0x0040_0000..0x00C0_0000 (end exclusive). base_addr: 0x0000_0000, size_log2: 24, access: AccessPermission::ReadOnly, memory_type: MemoryType::WriteThrough, shareable: false, execute_never: false, subregion_disable: 0b1100_0011, }, MpuRegionConfig { region: u4::new(5), base_addr: 0x1000_0000, // Data flash: 128 KiB size_log2: 17, access: AccessPermission::ReadOnly, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(6), base_addr: 0x4400_0000, // AES_ACCEL: 1 KiB, outside AIPS0/1/2 size_log2: 10, access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0, }, ]; ご協力ありがとうございます! Re: S32K344/S32K388 MPU Setting Check お会計ありがとうございます! Re: S32K344/S32K388 MPU Setting Check あなたの返答には少し戸惑っています! 「残る主なポイントは、必要なペリフェラルおよびPPB/システムレジスタ領域が、適切なデバイス、読み書き、実行-決まり属性で適切にカバーされていることを確認することです。」 ペリフェラルの領域を見落としているのでしょうか?この構成でカバーした3つのAIPS地域が、すべてのペリフェラルを正しくカバーできているかどうかの確認を期待していました! 同様に、他に見落とした地域がないか確認してもらいたいと思っていました。PPB/システムレジスタ領域などは、MPU構成の対象外ですよね?少なくとも、ARMv7-Mアーキテクチャの参照のB3.5.1について私の理解はそうです: > プライベートペリフェラルバス(PPB)へのアクセスは常にデフォルトのシステムアドレスマップを使用します。 > Exception ベクトルはベクトルアドレステーブルから読み取る際には常にデフォルトのシステムアドレスマップを使用します。 私が何か誤解している点や、この設定が実際には不完全な点があれば教えてください! Re: S32K344/S32K388 MPU Setting Check こんにちは、 @ksczさん はい、おっしゃる通りです。あなたが設定したAIPSリージョンはアドレス空間をカバーするのに適しているように見え、追加が必要な周辺領域は見当たりません。 PPB/システムレジスタ領域に関するあなたの理解も正しいです。PPBへのアクセスはデフォルトのシステムアドレスマップを使用するため、別途MPUリージョンを追加する必要はありません。 私の前のコメントは、ペリフェラル領域に対して適切なDevice、read/write、execute-never属性を使うという一般的な注意書きを意図していました。設定ファイルに欠落している領域を見つけたという意味で言ったのではありません。 この観点からすると、現在の構成は良好に見えます。 Re: S32K344/S32K388 MPU Setting Check こんにちは、 @ksczさん 提案されたMPU構成は、領域サイズ、配置、サブ領域構成を含め、全体的に良好に見える。 残る主なポイントは、必要なペリフェラルおよびPPB/システムレジスタ領域が、適切なDevice、read/write、execute-never属性で適切にカバーされていることを確認することです。デフォルト拒否領域を使用する場合、明示的に許可された領域よりも優先順位を低く設定する必要があります。 BR、VaneB
View full article
S32K344/S32K388 MPU 设置检查 我正在尝试为 S32K344 和 S32K388 创建一个通用的默认 MPU 配置。我这里有一个基本方案,但我希望得到确认,这个方案是否涵盖了所有内容——尤其是注册部分——并且是正确的。 这里的类型并不是特别重要——希望你能根据名称判断出匹配的类型。唯一比较特殊的是“u4”,它只是一个用于验证无符号 4 位整数的包装器。 /// S32K344 core-local memories and peripheral windows, using regions 0 through 5. /// /// Geometry: S32K3xx_memory_map.xlsx, Memories sheet, S32K344 column. /// Attributes: S32K3xx RM rev. 12, sections 3.7, 3.9, and 5.2. pub const S32K344_BASE_REGIONS: [MpuRegionConfig; 6] = [ MpuRegionConfig { region: u4::new(0), base_addr: 0x0000_0000, // ITCM: 64 KiB size_log2: 16, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(1), base_addr: 0x2000_0000, // DTCM: 128 KiB size_log2: 17, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(2), base_addr: 0x2040_0000, // SRAM: 320 KiB size_log2: 19, // 512 KiB envelope; enable five 64 KiB subregions access: AccessPermission::ReadWrite, memory_type: MemoryType::WriteBackReadWriteAllocate, shareable: false, execute_never: true, subregion_disable: 0b1110_0000, }, MpuRegionConfig { region: u4::new(3), base_addr: 0x4000_0000, // AIPS0/1/2: 6 MiB size_log2: 23, // 8 MiB envelope; enable six 1 MiB subregions access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(4), base_addr: 0x0040_0000, // Program flash: 4 MiB size_log2: 22, access: AccessPermission::ReadOnly, memory_type: MemoryType::WriteThrough, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(5), base_addr: 0x1000_0000, // Data flash: 128 KiB size_log2: 17, access: AccessPermission::ReadOnly, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, ]; /// S32K388 core-local memories and peripheral windows, using regions 0 through 6 /// /// Geometry: S32K3xx_memory_map.xlsx /// Each core sees its own 32 KiB ITCM and 64 KiB DTCM at the same local addresses pub const S32K388_BASE_REGIONS: [MpuRegionConfig; 7] = [ MpuRegionConfig { region: u4::new(0), base_addr: 0x0000_0000, // ITCM: 32 KiB per core size_log2: 15, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: false, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(1), base_addr: 0x2000_0000, // DTCM: 64 KiB per core size_log2: 16, access: AccessPermission::ReadWrite, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(2), base_addr: 0x2040_0000, // SRAM: 768 KiB size_log2: 20, // 1 MiB envelope; enable six 128 KiB subregions. access: AccessPermission::ReadWrite, memory_type: MemoryType::WriteBackReadWriteAllocate, shareable: false, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(3), base_addr: 0x4000_0000, // AIPS0/1/2: 6 MiB size_log2: 23, // 8 MiB envelope; enable six 1 MiB subregions. access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0b1100_0000, }, MpuRegionConfig { region: u4::new(4), // Program flash: 8 MiB at 0x0040_0000 is not aligned to 8 MiB. // Enable subregions 2..=5 of a 16 MiB envelope, mapping exactly // 0x0040_0000..0x00C0_0000 (end exclusive). base_addr: 0x0000_0000, size_log2: 24, access: AccessPermission::ReadOnly, memory_type: MemoryType::WriteThrough, shareable: false, execute_never: false, subregion_disable: 0b1100_0011, }, MpuRegionConfig { region: u4::new(5), base_addr: 0x1000_0000, // Data flash: 128 KiB size_log2: 17, access: AccessPermission::ReadOnly, memory_type: MemoryType::NonCacheable, shareable: false, execute_never: true, subregion_disable: 0, }, MpuRegionConfig { region: u4::new(6), base_addr: 0x4400_0000, // AES_ACCEL: 1 KiB, outside AIPS0/1/2 size_log2: 10, access: AccessPermission::ReadWrite, memory_type: MemoryType::SharedDevice, shareable: true, execute_never: true, subregion_disable: 0, }, ]; 提前感谢您的帮助! Re: S32K344/S32K388 MPU Setting Check 谢谢你的支票! Re: S32K344/S32K388 MPU Setting Check 你的回复让我有点困惑! “剩下的主要一点是确保所有必需的外围设备和 PPB/系统寄存器区域都已正确覆盖适当的设备、读/写和永不执行属性。” 我是否遗漏了外设方面的信息?我希望得到确认,我在此配置中覆盖的 3 个 AIPS 区域是否足以正确覆盖*所有*外围设备! 同样地,我希望您能确认一下,我是否遗漏了其他地区。像 PPB/系统寄存器区域这样的部分不属于 MPU 配置的范畴,对吗?至少这是我对 ARMv7-M 架构参考,引用 B3.5.1 节的理解: 对专用外设总线 (PPB) 的访问始终使用默认系统地址映射。 > 从向量地址表读取异常向量时,始终使用默认系统地址映射。 如果我的理解有误,或者这个配置看起来不完整,请告诉我! Re: S32K344/S32K388 MPU Setting Check 嗨@kscz 所提出的 MPU 配置总体上看起来不错,包括区域大小、对齐方式和子区域配置。 剩下的主要一点是确保所有必需的外围设备和 PPB/系统寄存器区域都已正确覆盖适当的设备、读/写和永不执行属性。如果使用默认拒绝区域,则其优先级必须低于明确允许的区域。 BR,VaneB Re: S32K344/S32K388 MPU Setting Check 嗨@kscz 是的,你说得对。您配置的 AIPS 区域看起来足以覆盖地址空间,我没有看到还需要添加其他外围区域。 您对 PPB/系统寄存器区域的理解也是正确的。由于对 PPB 的访问使用默认的系统地址映射,因此无需为其添加单独的 MPU 区域。 我之前的评论更多的是想提醒大家,要为外围区域使用适当的设备、读/写和执行-永不属性。我并非暗示我已经发现了您配置中缺失的区域。 从这个角度来看,你目前的配置看起来不错。
View full article
S32 Design Studio for S32 Platform 3.5 License I have one laptop and one desktop computer. Uninstalling and reinstalling on the laptop requires two licenses for S32 Design Studio for S32 Platform 3.5.
View full article
S32 Design Studio for S32 Platform 3.5 License 本人一个笔记本,一个台式机,笔记本卸载重装,需要2个S32 Design Studio for S32 Platform 3.5 的License
View full article
imx95-evk: NETC on cortex M7 Hi list, According to AN15047 'i.MX 95 Dual-Ethernet on M7 and A55 - Rev. 1.0 — 19 May 2026', i'm trying to use NETC0 on cortex-m7. The chapter '5 Implementation' section 1.b describes how you can affect NETC2 to A55 non-secure cores and NETC0 to cortex-m7. I downloaded the repository https://github.com/nxp-imx/imx-sm.git (hash:eec2328, tag: lf-6.18.37-2.1.0) and take a to *configs/mx95evk.cfg* to update it according to the former chapter. But there are inconsistencies especially concerning the items 'NETC_ECAM0' and 'NETC_ECAM2' which are available in the documentation but *not* in the repository. The file's *configs/mx95evk.cfg* history doesn't provide any reference to NETC_ECAM0 or NETC_ECAM2 i.e 'git log -S NETC_ECAM2' or 'git log -S NETC_ECAM0' return nothin... Do you know where i can find consistent information to define NETC0 to A55 and NETC2 to cortex-m7 please? Can you provide a file *configs/mx95evk.cfg* which is correct for this configuration please? I'm supposed to include the generated build/mx95evk/m33_image.bin to a yocto build with the manifest imx-6.12.49-2.2.0.xml. Is the tag lf-6.18.37-2.1.0 the right one for imx-sm? Thanks. Re: imx95-evk: NETC on cortex M7 Hi, Thank you for your interest in NXP Semiconductor products, You should refer to the following code that defines ECAM https://github.com/nxp-imx/imx-sm/blob/eec232878ab7dd460f5a8f3767d39dc7e9412efa/devices/MIMX95/configtool/netcmix.cfg#L45 In the appnote is stated that the following changes should be made: # modified split definition NETC_ECAM1: PD_NETC, MBC_E0=1.0-3 NETC_ECAM2: PD_NETC, MBC_E0=1.4-7 So, including netcmix.cfg should make it possible. For Yocto and branch of SM, you should select the SM branch of the BSP you are trying it on, if it's the latest BSP or the one where the appnote was tested with. You could modify the code in Yocto source code, create a patch or build it standalone and use imx-mkimage to generate it. make config=mx95evk cfg make config=mx95evk all Regards Re: imx95-evk: NETC on cortex M7 Hello Joseph, Thanks for your answer. After reading carefully the documentation, i reach your conclusion concerning the file netcmix.cfg and i build successfully the binary. So thanks for your confirmation. Now i'm trying to follow "6.2 Setting up Yocto and building the Linux image", especially the step 5. When i try to update the layer i get: build-imx95-19x19-lpddr5-evk$ bitbake-layers add-layer ../sources/meta-imx-dual-eth-m7-a55 NOTE: Starting bitbake server... WARNING: Layer meta-imx-dual-eth-m7-a55 should set LAYERSERIES_COMPAT_meta-imx-dual-eth-m7-a55 in its conf/layer.conf file to list the core layer names it is compatible with. ERROR: BBFILE_PATTERN_meta-imx-dual-eth-m7-a55 not defined ERROR: Parse failure with the specified layer added, exiting. where imx95-yocto-bsp$ ls sources/meta-imx-dual-eth-m7-a55/ conf LICENSE.txt patch-mcuxsdk README.md recipes-bsp recipes-kernel SBOM.spdx.json sources/meta-imx-dual-eth-m7-a55$ git show commit bd42e153e1f39c06ca148dff90362978567a8449 (HEAD -> lf-6.12.49-2.2.0_25.12, origin/lf-6.12.49-2.2.0_25.12, origin/HEAD) [..] Any hint concerning this issue please? Regards
View full article
imx95-evk:皮层 M7 上的 NETC 大家好, 根据AN15047 “i.MX 95 双以太网在 M7 和 A55 上 - 修订版 1.0 — 2026 年 5 月 19 日”,我正在尝试在 cortex-m7 上使用 NETC0 。 “5 实现”章节 1.b 节描述了如何将 NETC2 应用于 A55 非安全内核,以及如何将 NETC0 应用于 cortex-m7。 我下载了仓库https://github.com/nxp-imx/imx-sm.git (hash:eec2328, tag: lf-6.18.37-2.1.0)然后打开*configs/mx95evk.cfg*文件,根据前一章的内容进行更新。 但存在一些不一致之处,特别是关于“NETC_ECAM0”和“NETC_ECAM2”这两个项目,它们在文档中可用,但在存储库中*不可用* 。 文件*configs/mx95evk.cfg*历史记录中没有提供任何关于 NETC_ECAM0 或 NETC_ECAM2 的引用,即“git log -S NETC_ECAM2”或“git log -S NETC_ECAM0”没有任何返回结果…… 请问您知道哪里可以找到关于NETC0对应A55以及NETC2对应cortex-m7的统一信息吗? 请提供文件 *configs/mx95evk.cfg*请问哪种配置才是正确的? 我应该将生成的 build/mx95evk/m33_image.bin 添加到带有清单 imx-6.12.49-2.2.0.xml的yocto 版本中。 标签lf-6.18.37-2.1.0哪个型号适合 imx-sm? 谢谢。 Re: imx95-evk: NETC on cortex M7 您好, 感谢您对恩智浦半导体产品的关注, 您应该参考以下定义 ECAM 的代码:https://github.com/nxp-imx/imx-sm/blob/eec232878ab7dd460f5a8f3767d39dc7e9412efa/devices/MIMX95/configtool/netcmix.cfg#L45 应用说明中指出,应进行以下更改: # modified split definition NETC_ECAM1: PD_NETC, MBC_E0=1.0-3 NETC_ECAM2: PD_NETC, MBC_E0=1.4-7 因此,包含 netcmix.cfg 文件应该可以实现这一点。 对于 Yocto 和 SM 分支,您应该选择您正在尝试的电路板支持包的 SM 分支,如果它是最新的电路板支持包或应用笔记中测试的电路板支持包。您可以修改 Yocto 源代码中的代码,创建补丁,或者将其独立构建并使用 imx-mkimage 生成独立组网 \(SA\)。 make config=mx95evk cfg make config=mx95evk all 此致 Re: imx95-evk: NETC on cortex M7 你好,约瑟夫, 谢谢你的回答。 仔细阅读文档后,我认同您关于netcmix.cfg文件的结论,并成功构建了二进制文件。 谢谢你的确认。 现在我正在尝试遵循“6.2设置 Yocto 并构建 Linux 镜像”,特别是第 5 步。 当我尝试更新层时,出现以下错误: build-imx95-19x19-lpddr5-evk$ bitbake-layers add-layer ../sources/meta-imx-dual-eth-m7-a55 注意:Bitbake 服务器正在启动…… 警告:层 meta-imx-dual-eth-m7-a55 应在其 conf/layer.conf 文件中设置 LAYERSERIES_COMPAT_meta-imx-dual-eth-m7-a55,以列出与其兼容的核心层名称。 错误:未定义 BBFILE_PATTERN_meta-imx-dual-eth-m7-a55 错误:添加指定层时解析失败,程序退出。 其中: imx95-yocto-bsp$ ls sources/meta-imx-dual-eth-m7-a55/ conf LICENSE.txt patch-mcuxsdk README.md 配方-电路板支持包。 配方-kernel SBOM.spdx.json sources/meta-imx-dual-eth-m7-a55$ git show 提交 bd42e153e1f39c06ca148dff90362978567a8449 (HEAD -> lf-6.12.49-2.2.0_25.12,origin/lf-6.12.49-2.2.0_25.12,起源/HEAD) [...] 请问关于这个问题有什么线索吗? 此致
View full article
IMX95-EVK:Cortex M7上のNETC こんにちは、 AN15047『i.MX 95 Dual-イーサネット on M7 and A55 - Rev. 1.0 — 2026年5月19日』によると、Cortex-m7でNETC0を使おうとしています。 第5章「実装」セクション1.bでは、NETC2からA55非セキュアコア、NETC0からcortex-m7への影響方法が説明されています。 リポジトリhttps://github.com/nxp-imx/imx-sm.git (ハッシュ: eec2328、タグ: lf-6.18.37-2.1.0) をダウンロードしました。そして、 *configs/mx95evk.cfg*に移動して、前の章に従って更新します。 しかし、特にドキュメントにはあるもののリポジトリ には存在しない「NETC_ECAM0」と「NETC_ECAM2」という項目に関して矛盾があります。 ファイルの内容は*configs/mx95evk.cfg* です。履歴には NETC_ECAM0 または NETC_ECAM2 への参照が一切ありません。つまり、「git log -S NETC_ECAM2」または「git log -S NETC_ECAM0」を実行しても何も返されません。 NETC0からA55、NETC2からcortex-m7までを定義するための一貫した情報をどこで見つけられますか? ファイルを提供できますか *configs/mx95evk.cfg*この構成の場合、どちらが正しいでしょうか? 生成されたビルド/mx95evk/m33_image.binを 、マニフェストimx-6.12.49-2.2.0.xml付きのYoctoビルドに含めるべきです。 タグはlf-6.18.37-2.1.0ですか?imx-smに最適なのはどれですか? ありがとうございます。 Re: imx95-evk: NETC on cortex M7 こんにちは、 NXP Semiconductors製品にご関心いただきありがとうございます。 ECAMを定義する以下のコードを参照してください。https://github.com/nxp-imx/imx-sm/blob/eec232878ab7dd460f5a8f3767d39dc7e9412efa/devices/MIMX95/configtool/netcmix.cfg#L45 アプリケーションノートには、以下の変更を行う必要があると記載されています。 # modified split definition NETC_ECAM1: PD_NETC, MBC_E0=1.0-3 NETC_ECAM2: PD_NETC, MBC_E0=1.4-7 ですので、netcmix.cfgを含めることで可能になるはずです。 YoctoとSMのブランチの場合は、試しているBSPのSMブランチを選ぶべきです。最新のBSPか、Appnoteがテストされたものであれば。Yoctoのソースコードでコードを修正したり、パッチを作成したり、単体で構築してimx-mkimageで生成することもできます。 make config=mx95evk cfg make config=mx95evk all よろしくお願いします。 Re: imx95-evk: NETC on cortex M7 こんにちは、ジョセフさん。 ご回答ありがとうございます。 ドキュメントを注意深く読んだ結果、 netcmix.cfg ファイルに関する結論に達し、バイナリを成功裏に構築しました。 SO、ご確認ありがとうございます。 今は「6.2」に従おうとしていますYoctoの設定とLinuxイメージのビルディング」、特にステップ5について。 レイヤーを更新しようとすると、次のような結果が出ます: build-imx95-19x19-lpddr5-evk$ bitbake-layers add-layer ../sources/meta-imx-dual-eth-m7-a55 注:bitbakeサーバーを起動しています... 警告: レイヤー meta-imx-dual-eth-m7-a55 は、互換性のあるコア レイヤー名をリストするために、conf/layer.conf ファイルで LAYERSERIES_COMPAT_meta-imx-dual-eth-m7-a55 を設定する必要があります。 エラー: BBFILE_PATTERN_meta-imx-dual-eth-m7-a55 が定義されていません エラー: 指定されたレイヤーを追加した状態で解析に失敗しました。終了します。 ここで、 IMX95-yocto-bsp$ LS ソース/meta-imx-dual-eth-m7-a55/ conf LICENSE.txt patch-mcuxsdk README.md recipes-bsp recipes-kernel SBOM.spdx.json sources/meta-imx-dual-eth-m7-a55$ git show コミット bd42e153e1f39c06ca148dff90362978567a8449 (HEAD -> lf-6.12.49-2.2.0_25.12、origin/lf-6.12.49-2.2.0_25.12、起源/HEAD) [..] この件に関して何かヒントがあれば教えてください。 よろしくお願いします。
View full article
i.MX 93 – 预构建的 Ubuntu/Debian Linux 镜像和定制载板支持 您好,NXP支持团队, 我正在评估 i.MX 93 平台在 EVSE 应用方面的性能,并发现了EVSE-IMX93 开发套件。 我想澄清一下可用的 Linux 镜像及其与潜在的定制载板设计的兼容性。 我们的目标是使用 MCIMX93-SOM,并基于 NXP 原有的载板设计开发一款简化的定制载板。我们将保留相同的SOM连接器和引脚分配,同时移除未使用的外围设备和电路。 由于我对 i.MX 处理器平台和基于 Yocto 的开发还比较陌生,我正在寻找一个简单易用的 Linux 解决方案来入门,然后再进行自定义。 请问您能否澄清以下问题? 是否有适用于 i.MX 93 的现成 Ubuntu 或 Debian 13 (Trixie) 镜像?最好是通用服务器/最小 Linux 镜像。 这个镜像可以直接下载并刷入microSD卡来启动板,而无需Yocto构建吗? 提供的镜像是否支持标准的 Linux 功能,例如apt 、Python 3、SSH、systemd 和网络功能? 它是否支持CAN/CAN-FD (SocketCAN)、Wi-Fi、以太网和 MQTT ?是否可以使用apt安装 Mosquitto 等软件包? 在我们保留原有SOM连接器和相关硬件连接的前提下,能否将相同的预构建镜像用于我们提出的定制载板?是否只需要更改设备树或配置? 如果有这样的镜像文件,能否分享一下直接下载链接、支持的板信息和安装说明? 我们的目标是将 i.MX 93 用作运行 EVerest 框架和其他 EVSE 应用软件的通用 Linux 平台,同时避免最初维护 Yocto 构建的需要。 谢谢你的帮助。 此致敬礼 加内什·巴格瓦特 Re: i.MX 93 – Prebuilt Ubuntu/Debian Linux Image and Custom Carrier Board Support 你好, 是的,有一个与 i.mx93 平台兼容的 Debian Linux SDK,您可以通过“Flexbuild”的实现来构建镜像,而不是使用 Yocto,然后使用 flexinstaller 工具刷写镜像。有关该发行版支持的软件包的更多信息,请参阅此处: DEBIAN-SDK Debian 软件版本说明 LDLSDK_26.06
View full article
S32K376NHT1MJBST:适用的功率估算器和单电源电流数据 你好, 请问您能否提供适用于 S32K376NHT1MJBST 的功率估算工具和供电电流数据? S32K-PET 是否支持这种特定衍生物?应该使用哪些工具和设备数据集版本?如果不支持,NXP 目前推荐的方法是什么? 对于采用外部 NMOS V11 稳压器配置的外部供电 V15,应如何将报告的需求分配给 V15、V11、VDD_HV_A/B 和其他模拟/偏置电源?请明确哪些项目包含在内,哪些项目不包含在内,特别是调节器损耗、共享核心/锁定步进需求、I/O 负载和外围电流,以免重复计算。 哪些适用的公共文件、数据或表征方法涵盖了最坏情况下的供电电流与电压/温度的关系,以及RESET、启动、唤醒和时钟/模式变化期间的峰值?请区分典型/平均估价和保证限额,并说明其适用条件。 已审核公开的PET页面和设置指南。他们的家族级支持清单和初始平均功率范围并未明确指出具体的衍生品或所有实物供应贡献。我们寻求的是适用的资源和方法,而不是没有明确操作规范的特定应用的当前结果。 如果这些信息不公开,请指出相应的公开资料或支持途径。 谢谢! Re: S32K376NHT1MJBST: applicable power estimator and per-supply current data 你好@JonasGranlund , 1.目前,S32K PET 工具不支持 S32K39/37/36 设备。推荐的方法是参考 S32K396 的数据手册(修订版)。5)关于供应电流数据,具体而言: 6.7 电源电流(待机和运行模式表) 6.9 循环唤醒平均电流计算 2. 数据手册中的电流表分别报告以下各轨的电流: VDD_HV_A被列为主 I/O 和模拟电源,它覆盖 VDD_HV_A 组中的两个 I/O 焊盘和所有模拟模块。 VDD_HV_B是辅助 I/O 电源,仅覆盖 VDD_HV_B 组中的 I/O 焊盘。您可以参考参考手册中的“S32K39_and_S32K37_IOMUX.xlsx”附件,以确定哪个引脚属于哪个电源域。 V11由 V15 利用外部 NMOS 产生。进入LPM模式前,应关闭外部V1.5电源。 测量中不包括 I/O 负载电流。实际的 I/O 电流需求将取决于应用程序中的 I/O 配置。请参阅 S32K39 数据表中的直流特性表。 数据表中核心供电量中包含了锁步/双核需求;由于没有根据核心负载单独制定的规格,因此功耗规定为相同。 3. 数据表中的数值包括环境温度、典型值和最大值。 据我所知,没有专门针对 S32K39 的文件详细说明最坏情况下的电流、RESET 期间的峰值等。然而, S32K3 低功耗电源管理单元 AN 和演示文档提供了电源模式转换、低功耗电源模式下的时钟操作、硬件注意事项和静态电流。它更侧重于家族层面,一般参考 S32K3xx,而不是 S32K39-37-36 的具体细节。 我还通过社区分享 S32K3 低功耗实验室演示文稿向您发送了一条私信,其中解释了 S32K3 的低功耗特性和注意事项。 此致, 朱利安
View full article
Battery pack active balancing solution Hello, I couldn't find a solution for active battery pack balancing on the website, only a demonstration video of a battery energy storage solution. I also couldn't find any related articles on the forum. Do you have any recommendations? Thank you. Re: 电池包主动均衡方案 That's too outdated. Active balancing should be the future trend for new energy sources. Re: 电池包主动均衡方案 Hi Bob We don't manufacture active balancing ICs, and there's not much information available on this topic. The attached file is an older app note and hopefully will be helpful.
View full article
ライセンスに関する質問:LA_OPTオンラインコードホスティングv1.4(SR250 UWBIoT)—結果の共有、AIツール、独自の こんにちは、 NXPのサポートチャットのアドバイスで、ライセンスチームのためにここにライセンスに関する質問を投稿します。  github.com/nxp-uwb/sr250-uwbiot-zephyr と github.com/nxp-appcodehub/an-sr250-uwb-plug-and-play-demo のソフトウェアを使って、SR250UWBSHIELD + FRDM-RW612を使った研究プロトタイプを計画しています(SR250 FW 01.41.04)どちらも「LA_OPT_Online Code Hosting NXP_Software_License – v1.4 May 2025」に基づいています。私はまだライセンスに同意しておらず、まず以下の点について明確にしておきたいと思います。 1.セクション3.8:「ライセンスソフトウェアの使用に関連するレポート」の配布制限は、私自身の測定結果、ログ、テストレポートにも適用されるのでしょうか?試験機関や外部査読者、お客様、あるいは科学論文に共有するのが良いでしょう。  2.AI ツール (セクション 3.2 / 3.8): AI アシスタント (例:ChatGPT、クロード)。(a)自分の結果やレポートをそのようなサービスと共有してもよろしいですか?(b)AIアシスタントにライセンスソフトウェアやNXPのドキュメント(例:Rancyd Software)を読み、扱ってもらえますか?UM12508)を自分のコンピューターでダウンロードするか、クラウドサービス経由でダウンロードするか? 3.自社ソフトウェア(セクション1.3 / 5):CIRデータのみを受け取りNXPコードを含まないPC側の信号プロセッシングソフトウェアは「派生作品」と言えますか?セクション5.1~5.2を実行してくださいそれに適用しますか? 4.製品(セクション2.1):v1.4はSR250(NXPボード、サードパーティ製SR250モジュール、または自分の基板上の裸SR250UK)とこのファームウェア、そしてお客様向けのファームウェアアップデートファイルを含みたデバイスを販売することを許可していますか?それとも、別途契約が必要ですか? 5.ライセンシー:今個人としてライセンスを受け入れた場合、後で設立する可能性のある会社に引き継がれますか?  書面での回答や、NXPのライセンス・法務チームへのお問い合わせをいただけると大変ありがたいです。ありがとう!
View full article
许可问题:LA_OPT 在线代码托管 v1.4 (SR250 UWBIoT) — 共享结果、AI 工具、自有 你好, 根据 NXP 支持聊天软件的建议,我在这里发布我的许可问题,以便向许可团队寻求帮助。 我计划使用 SR250UWBSHIELD + FRDM-RW612 构建一个研究原型,并使用来自 github.com/nxp-uwb/sr250-uwbiot-zephyr 和 github.com/nxp-appcodehub/an-sr250-uwb-plug-and-play-demo 的软件。(SR250 FW 01.41.04)。两者均受“LA_OPT_Online Code Hosting NXP_Software_License – v1.4 May 2025”保护。我尚未接受许可协议,因此想先澄清以下几点: 1.第 3.8 节:关于分发“与使用许可软件相关的报告”的限制是否涵盖我自己的测量结果、日志和测试报告?我会将它们分享给测试实验室、外部审稿人、客户或在科学出版物上发表。 2.AI 工具(第 3.2 节 / 3.8 节):我使用 AI 助手进行开发(例如,ChatGPT,克劳德)。我可以 (a) 与此类服务共享我的结果和报告,以及 (b) 让 AI 助手读取和使用许可软件和 NXP 文档(例如,(UM12508)是在我自己的电脑上还是通过云服务安装的? 3.自己的软件(第 1.3 / 5 节):我自己的 PC 端信号处理软件,只接收 CIR 数据,不包含 NXP 代码,是否属于“衍生作品”?完成第 5.1 至 5.2 节适用于它吗? 4.产品(第 2.1 节):v1.4 是否允许销售带有 SR250(NXP 板、第三方 SR250 模块或裸 SR250UK 芯片,安装在我自己的 PCB 上)和此固件的设备,包括为客户提供的固件更新文件?或者需要另行签订协议? 5.被许可方:如果我现在以个人身份接受许可,该许可是否适用于我以后可能成立的公司? 非常感谢您能提供书面答复,或者提供恩智浦(NXP)授权/法律团队的联系方式。谢谢你!
View full article
MC33PF8100A0TS 参考資料 こんにちは。MC33PF8100A0tsの設計参考資料はありますか? 1. プログラミングポートをどのように設計すればよいか? 2. 参考設計図はありますか? ご確認いただけますでしょうか?ありがとうございます。 Re: MC33PF8100A0TS参考资料 PF8100のGUIを使用してソフトウェアをフラッシュした後、インターフェースの接続図が記載されているユーザーマニュアルをダウンロードしてください。 PF8200/PF8100プログラミングボード | NXPセミコンダクターズ FRDM-KL25Zはこの制御基板を使用しており、そのプロセスは簡単ではありません。ソケットに直接コードを書き込む方が良いでしょう。 Re: MC33PF8100A0TS参考资料 はい、初期プロトタイプのデバッグ段階では、チップは基板に半田付けされています。 Re: MC33PF8100A0TS参考资料 こんにちは、ボブ 製品の回路基板をプログラムする予定ですか?
View full article
FS2643D H世代:S32K376NHT1MJBSTの本格的なOTP/オーダー可能なサポート こんにちは、 S32K376NHT1MJBST対応するFS2643D H世代の生産構成について教えていただけますか? 1. この組み合わせに対応する、既存のプログラム済み生産発注書およびOTP構成はありますか?もしそうであれば、正確な注文コード、OTP ID/リビジョン、該当する設定レポートおよびプログラミング/設定ファイルのリンクを特定してください。 2. カスタムOTPが必要な場合、互換性のある構成と本番プログラム部品を得るために、どのNXPまたは認可チャネルプロセスを使用すべきか?これは、ブランクデバイスを用いたエンジニアリングのエミュレーション/プログラミングとは区別してください。 3. MFS2643HMDA0ADとMFS2643HMDA0UDは該当するブランク開発バリアントであり、ADとUDの違いはパッケージ、組み立て、ご注文の適用性にどのような影響を与えるか? 公開されているFS26標準構成例とS32K376POCページを確認しました。後者はFS2633ベースのボードについて説明しており、その構成はFS2643Dにそのまま適用できるとは想定されていません。これらの詳細が公開されていない場合は、正確な該当書類または適切なサポートルートをご指摘ください。 よろしくお願いします。 Re: FS2643D H-generation: production OTP/orderable support for S32K376NHT1MJBST こんにちは、ジョナス 以下のコメントをご覧ください。 1. この組み合わせに対応する、既存のプログラム済み生産発注書およびOTP構成はありますか?もしそうであれば、正確な注文コード、OTP ID/リビジョン、該当する設定レポートおよびプログラミング/設定ファイルのリンクを特定してください。 [gw]以下は推奨事項です。まず、このパワーツリーがS32K376に適しているかどうかを評価してください。 https://www.nxp.com/products/FS26 2. カスタムOTPが必要な場合、互換性のある構成と本番プログラム部品を得るために、どのNXPまたは認可チャネルプロセスを使用すべきか?これは、ブランクデバイスを用いたエンジニアリングのエミュレーション/プログラミングとは区別してください。 [gw]上記の回答をご覧ください。 3. MFS2643HMDA0ADとMFS2643HMDA0UDは該当するブランク開発バリアントであり、ADとUDの違いはパッケージ、組み立て、ご注文の適用性にどのような影響を与えるか? [gw] A0 は空白部分を意味します。以下は FS26 の命名規則です。UD サフィックスは見つかりませんでした。 回路図デザインが終わったら、再度確認のために当社にご連絡ください。 よろしくお願いします!
View full article
S32K376NHT1MJBST: applicable power estimator and per-supply current data Hello, Could you please identify the applicable power-estimation tool and supply-current data for S32K376NHT1MJBST? Does S32K-PET support this exact derivative? Which tool and device-dataset revisions should be used? If it is not supported, what is the recommended current NXP method? For externally supplied V15 with the external NMOS V11 regulator arrangement, how should reported demand be attributed to V15, V11, VDD_HV_A/B and other analog/bias supplies? Please identify what is included or excluded, especially regulator losses, shared core/lockstep demand, I/O loading and peripheral currents, so these are not counted twice. Which applicable public documents, data or characterization method cover worst-case supply current versus voltage/temperature, and peaks during reset, startup, wake and clock/mode changes? Please distinguish typical/average estimates from guaranteed limits and identify their conditions. The public PET page and setup guide have been reviewed. Their family-level support listing and initial average-power scope do not identify the exact derivative or all physical-supply contributions. We are seeking the applicable sources and method, not an application-specific current result without a defined operating profile. Please point to the appropriate public material or support route if these details are not public. Thank you. Re: S32K376NHT1MJBST: applicable power estimator and per-supply current data Hello @JonasGranlund, 1. As of now, the S32K PET tool does not support S32K39/37/36 devices. The recommended method is to refer to S32K396's Data Sheet (Rev. 5) for supply current data, specifically: 6.7 Supply currents (Standby and RUN mode tables) 6.9 Cyclic wake-up average current calculation 2. The datasheet supply current tables report current at the following rails independently: VDD_HV_A is catalogued as the main I/O and analog supply, and it covers both I/O pads in the VDD_HV_A bank and all analog blocks.  VDD_HV_B is the secondary I/O supply and covers I/O pads in the VDD_HV_B bank only. You can refer to "S32K39_and_S32K37_IOMUX.xlsx" attachment inside the Reference Manual in order to identify which pin belongs to which power domain. V11 is generated by V15 using external NMOS. The external V1.5 power supply should be turned off before entering LPM mode. IO load current is not included in measurements. The actual current requirements for IOs will depend on the I/O configuration in the application. Refer to the DC characteristics tables in the S32K39 Data sheet. Lockstep/dual-core demand is included in the core supply figures in the data sheet; the power consumption is specified to be the same because there are no separate specifications depending on the load of the cores. 3. Data Sheet values include ambient temperature, typical and maximum values.  As far as I know, there are no specific S32K39 documents detailing worst-case scenario currents, peaks during reset, etc. However, S32K3 Low Power Management AN and demos document provide power mode transitions, clock operation in low-power modes, hardware considerations and quiescent current. It is focused on a more family-level, referencing S32K3xx in general, rather than S32K39-37-36 specifics. I've also sent you a private message in community sharing S32K3 Low Power Lab presentation, which explains S32K3 low power behavior and considerations. Best regards, Julián
View full article
トリメンションSR250 — 試作前のライセンスとレーダーデータの質問 FRDM-RW612と「SR250 UWBIoT for Zephyr」(github.com/nxp-uwb/sr250-uwbiot-zephyr)を用いたSR250UWBSHIELDを基に研究プロトタイプを計画しています。これはタグフリーのUWBレーダーで、ビルディング資材の背後にいる人を探知し、検索救助に使用されます。ソフトウェアライセンス(LA_OPT_Online Code Hosting v1.4)を受け入れる前に、以下の5つの質問に簡潔にお答えいただけると幸いです。 1. レーダーデータ:レーダーモードでSR250は複雑なI/Q(位相保持)としてCIRをホストに届けますか?複数の受信アンテナからCIRを同時にキャプチャし、ホストが到着角度を推定できるのでしょうか? 2. 結果共有:セクション3.8は「ライセンスソフトウェアの使用に関連する報告」をNXP以外の者に配布することを禁止しています。これは、私自身の測定結果やテストラボ、外部査読者、お客様、科学論文と共有したログも含まれますか?もしそうなら、NXPは書面での許可を出せますか? 3. 自社ソフトウェア:私自身のホスト側信号プロセッシング(PC上で動作し、CIRデータを受信し、NXPコードを含まない)は、セクション1.3および5の下で「派生作品」として扱われますか? 4. 製品経由:プロトタイプが成功した場合、v1.4は自社のPCBにSR250を搭載した機器の商業販売を許可し、お客様向けのファームウェアアップデートも含めて提供できますか?それとも別途合意が必要でしょうか? 5. コンプライアンス:SR250UWBSHIELDのEU適合宣言全文はどこで入手できますか?レーダーモードはカバーされていますか? ご返信よろしくお願いします。 Re: Trimension SR250 — licensing and radar data questions before prototyping こんにちは、 プライベートメッセージを送りました! よろしくお願いいたします。 リカルド
View full article
FS2643D H 代:生产 OTP/可订购支持 S32K376NHT1MJBST 你好, 请问能否说明一下 S32K376NHT1MJBST 支持的 FS2643D H 代生产配置? 1. 是否存在针对此组合的已编程生产可订购和OTP配置?如果是,请提供确切的订单代码、OTP ID/版本以及适用的配置报告和编程/配置文件链接。 2. 如果需要定制 OTP,应该使用 NXP 的哪个流程或授权渠道来获得兼容的配置和生产编程部件?请将此与空白设备工程仿真/编程区分开来。 3. MFS2643HMDA0AD 和 MFS2643HMDA0UD 是否是适用的空白开发变体?它们的 AD/UD 差异对封装、组装和订购适用性有何意义? 已审查公开的 FS26 标准配置示例和 S32K376POC 页面。后者描述的是基于 FS2633 的板;其配置不被认为可以转移到 FS2643D。如果这些信息不公开,请指出适用的具体文件或正确的求助途径。 谢谢! Re: FS2643D H-generation: production OTP/orderable support for S32K376NHT1MJBST 嗨,乔纳斯 请看下方评论: 1. 是否存在针对此组合的已编程生产可订购和OTP配置?如果是,请提供确切的订单代码、OTP ID/版本以及适用的配置报告和编程/配置文件链接。 [gw]以下是推荐配置,请先评估此电源树是否适用于 S32K376。 https://www.nxp.com/products/FS26 2. 如果需要定制 OTP,应该使用 NXP 的哪个流程或授权渠道来获得兼容的配置和生产编程部件?请将此与空白设备工程仿真/编程区分开来。 [gw]请看上面的答案。 3. MFS2643HMDA0AD 和 MFS2643HMDA0UD 是否是适用的空白开发变体?它们的 AD/UD 差异对封装、组装和订购适用性有何意义? [gw] A0 表示空白部分,以下是 FS26 的名称规则,我没有找到 UD 后缀。 请注意,原理图设计完成后请发送给我们进行复核。 谢谢您!
View full article