Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
i.MX6 上的高保证启动 (HAB) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 抽象的 安全是我们日常生活中不可避免的一个词。对于我们许多人来说,没有安全性的技术就是没有“信任”的技术。我们都知道,从工作场所到社交聊天,安全在我们的生活中扮演着重要的角色。即使是嵌入式系统也应该实施安全措施,以防止未经授权访问敏感数据。我们如何确保 i.MX6 平台只能使用授权图像启动?让我们来看看名为高保证启动 (HAB) 的酷东西,它使启动映像变得安全而简单。 介绍 数字安全自诞生以来就成为我们生活中不可避免的一部分。对于任何嵌入式系统来说,这种情况都没有什么不同,特别是在处理敏感数据时。许多用于银行交易、国防、医疗、工业和汽车领域的嵌入式设备都严格执行安全规定。 几乎所有嵌入式系统都是根据闪存图像给出的特定指令来工作的。想象一下,如果黑客可以将自己的指令刷入嵌入式设备,那么他就可以完全控制该设备需要执行的操作。如果该设备用于银行目的,那么黑客将获得包括密码在内的所有详细信息!如果该设备用于国防或医疗领域,这种情况会变得更加糟糕。我们如何才能防止这种情况发生?嗯,答案并不那么简单! 嵌入式系统操作系统映像可以从不同的介质(例如 MMC、SD 卡、SATA、以太网等)闪存。由于 SD 卡等介质可以轻松地从一个介质替换到另一个介质,因此在介质上实施安全检查将很困难。此外,人们可以在将操作系统映像刷入这些介质后对其进行更改。因此,仅在刷新图像之前实施安全检查不足以解决这个问题。那么我们如何实施安全检查以确保我们的操作系统映像是安全的?答案是 HAB(高保证靴)。 飞思卡尔在 i.MX6Q 处理器中提供了 HABv4(最新 HAB 版本 4)作为可选功能。HAB 是飞思卡尔安全模块的一部分,可以与 CAAM 和 TrustZone 等其他安全功能协同工作。 使用HAB的优点包括但不限于以下几点: HABv4 实现了启动 ROM 级别的安全性,一旦融合就无法改变。 高效的。 图像控制系统之前的安全检查。 允许多个根密钥。 利用数字签名——保护操作系统映像的最有效方法。 将安全性直接附加到操作系统映像,而不会影响操作系统映像的功能。 通过操作系统映像验证的处理器级别检查可以完全确保安全启动。 HAB 如何运作? HAB基于数字签名的原理。数字签名通过对内容上下文进行签名,使得内容变得安全。该签名过程应包含多种安全算法,以加强最终结果。 HAB 数字签名是 open-ssl 认证、MD5 哈希和 RSA-AES-DES 公钥和私钥检查的组合。 HAB 通过将引导加载程序(u-boot)和操作系统映像(uImage)制作成签名映像来确保安全性。这些签名的图像包含正常的图像内容和安全指令。这些图像也包含公钥和私钥。在HAB过程中,组合得到的公钥哈希码将融合到i.MX6处理器的启动ROM代码中。这种融合使得平台更加安全并且以后无法更改。 在启动过程中,首先启动过程的初始参数应从闪存介质(例如 SD 卡)中获取启动 ROM 代码。然后,HAB 指令将检查启动 ROM 和签名图像中的哈希值。当这两个哈希值匹配时,HAB 进程允许平台启动映像。否则系统将停止所有进程并等待授权图像。 这样,系统就可以防止未经授权的访问,即使有人在后期更改了签名的图像(这最终会改变图像的哈希值,因此在运行时检查期间失败)。 iWave 已成功在我们的i.MX6Q iW-RainboW-G15D-Q7 Linux 平台上实现 HAB,并验证了 HAB 如何保护平台安全。然而,HAB 并非开发平台或模块购买时提供的标准 BSP 的一部分。仅应特殊要求提供。 结论 HAB 是防止未经授权访问操作系统映像的最佳解决方案之一。处理敏感数据(银行、国防等)的嵌入式系统应集成 HAB,以防止外部来源控制整个系统。虽然 HAB 在 i.MX6 平台中是可选功能,但为了确保启动过程更安全,建议集成 HAB。 参考: AN4581_HAB_Application_Note.pdf - 使用 HABv4 在 i.MX50、i.MX53 和 i.MX 6 系列上进行安全启动的应用说明 i.MX_6_Linux_High_Assurance_Boot_(HAB)_User's_Guide.pdf - i.MX 6 Linux 高保证启动 (HAB) 用户指南 概述
記事全体を表示
ESC技术报告.pdf <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 飞思卡尔杯技术报告 韩国ESC团队 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 飞思卡尔杯技术报告 韩国ESC团队
記事全体を表示
2015年入学人数 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 如果您愿意学习新技术、使用开源软件并推广您对 Linux、物联网和嵌入式的新颖想法,那么 Linux 嵌入式挑战赛就是您让所有人惊叹的机会。 组建您的团队(1-3 名成员)并研究与物联网相关的项目构想,可以使用 Freescale Linux BSP / Android 和Udoo 平台实现。 挑战自己并通过发送电子邮件至[email protected]报名参加 Linux 嵌入式挑战赛。 电子邮件的格式为: 主题: [LEC2015] [TEAMNAME] 项目名称 团队描述 项目描述: 详细描述你的想法 包括架构图和使用的技术 提及它为物联网世界带来的改进。 请用英文提交您的投稿。 2015年Linux嵌入式挑战赛
記事全体を表示
I2C NCSWの使用例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> NCSW(NetCommソフトウェア)は、フリースケールのPowerQUICCおよびQorIQプロセッサ・プラットフォームでの開発を迅速化するためのパッケージです。これには、NCDD(NetComm Device Drivers)およびその他のコンポーネントが含まれています。ここでは、バージョンGA_4.7でサポートされているP3041 I2Cを例にとり、NetCommソフトウェアの構造とデバイスドライバの使用状況を分析します。CW PA 10.3 は、ユースケースコードと互換性を持つために使用されます。
記事全体を表示
FAQ 全ボード GPIOテスト <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> カーネル空間内でGPIOを制御するための独自のドライバを開発することも可能ですが、ユーザー空間からGPIOにアクセスするためのより簡単な方法があります。タイミング要件が問題にならない場合は、GPIO-SYSFSを使用できます。 SYSFSは、カーネル内部フレームワークの一部の機能をユーザー空間にエクスポートする仮想ファイル・システムであり、GPIOはSYSFSを通じて機能をエクスポートできるフレームワークの1つです。 GPIO-SYSFS機能は2.6.27以降のすべてのメインライン・カーネルで使用可能です。 SYSFS経由でGPIOをエクスポートするためのカーネルの構成 SYSFSでGPIOを有効にするには、次のカーネル・オプションを選択してください: デバイスドライバー --->       --- GPIOサポート             [*] /sys/class/gpio/...(sysfsインターフェース) i.MX233またはi.MX28を使用している場合、カーネルを再コンパイルした後、ltibでも自動的に実行されないため、ブート・ストリームを再度生成することを忘れないでください。 使用するピンが本当に GPIO ピンとしてアクセス可能であり、カーネルによって要求されていない(gpio_request)ことを確認してください。ピンが gpio_request された場合、SYSFS 経由でアクセスできるようにするには、カーネル内で同じピンを gpio_export する必要があります。ピンがデフォルトで GPIO として設定されていない場合、 /arch/arm/mach-XXX 内の適切なファイルで IO MUX を設定する必要があります。 ユーザー空間でのGPIOへのアクセス GPIO-SYSFS 機能を有効にした後、新しいカーネルでデバイスを起動してテストを行うことができます。 まず、テストするGPIOをユーザー空間にエクスポートする必要があります: echo XX > /sys/class/gpio/export XXは、次のアルゴリズムによって特定されます: GPIOA_[B]はエクスポートしたいGPIOです。ここで、「A」はGPIOバンク、「B」はバンク内のピンのオフセットです。 最初の利用可能なGPIOバンクが0の場合//(たとえばiMX.28)    XX = A×32 + B; それ以外の場合//最初のGPIOバンクは1    XX =(A-1)×32 + B; GPIOピンをエクスポートした後、次の場所にエクスポートされたGPIOインターフェースを確認できるようになります: /sys/class/gpio/gpioXX このインターフェースを通じて、次のようなことができるようになります: #ピンの値を読みます cat /sys/class/gpio/gpioXX/value #ピンの向きを変える > /sys/class/gpio/gpioXX/directionにエコーイン エコーアウト> /sys/class/gpio/gpioXX/direction # GPIO出力レベルの切り替え echo 0 > /sys/class/gpio/gpioXX/value echo 1 > /sys/class/gpio/gpioXX/value GPIO仮想ファイル・システムでは、一度に1つのGPIOピンしか処理できないことに注意することが重要です(コマンドごと)。 Re:FAQすべてのボードGPIOテスト <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> これは愚かな質問かもしれませんが、どのピンがgpioXXに物理的にリンクされているかを知るにはどうすればよいでしょうか?
記事全体を表示
eIQ Toolkit for MCU - Getting Started Labs The tools previously bundled as part of eIQ Toolkit are now released as standalone packages and eIQ Toolkit will no longer be updated after the eIQ Toolkit v1.17 in Q3 2025. Going forward the tools previously included in eIQ Toolkit can now be found at: eIQ Neutron SDK now contains the latest versions of the Neutron Converter tool eIQ Time Series Studio can now be found in a standalone package eIQ Model Creator provides an option for vision based model creation eIQ AI Toolkit will provide model optimization functionality (Coming Soon) Netron provides TFLite model viewing functionality This article will remain up for existing users. --------- eIQ Toolkit enables machine learning development with an intuitive GUI (named eIQ Portal) and development workflow tools, along with command line host tool options as part of the eIQ ML software development environment. Developers can create, optimize, debug and export ML models, as well as import datasets and models, rapidly train and deploy neural network models and ML workloads. The eIQ Portal provides output TensorFlow Lite models that seamlessly feed into eIQ inference engines like TensorFlow Lite and TensorFlow Lite for Microcontrollers. Using a tool called Model Runner, eIQ Toolkit can also generate runtime insights to help optimize neural network architectures on i.MX RT and i.MX devices. These labs go over how to use eIQ Portal. It is recommended to do them in the following order: Data Import Lab Model Runner Lab The labs are written for using a FRDM-MCXN947 and i.MX RT1170-EVK, but other eIQ supported devices can be used as well.  MCX N i.MX RT1050 i.MX RT1060 i.MX RT1064 i.MX RT1160 i.MX RT1170 i.MX RT1180 i.MX RT500 i.MX RT600 For details on the Time Series Studio tool please see the Time Series Studio lab guides. For  i.MX RT
記事全体を表示
HSE_b: RSAキーをRAMにインポートすることは許可されていません 1024ビットのRSA公開鍵を1つRAMカタログにインポートして鍵インポートサービスを使用する方法を理解しようとしていますが、サーバーからHSE_SRV_RSP_NOT_ALLOWEDという応答が返されます。 私のテストアプリケーションは、RAMキーカタログを次のようにフォーマットします。 { { muMask = HSE_MU0_MASK | HSE_MU1_MASK, groupOwner = HSE_KEY_OWNER_ANY, keyType = HSE_KEY_TYPE_RSA_PUB, numOfKeySlots = 2, maxKeyBitLen = HSE_KEY1024_BITS, }, { muMask = HSE_MU0_MASK | HSE_MU1_MASK, groupOwner = HSE_KEY_OWNER_ANY, keyType = HSE_KEY_TYPE_ECC_PUB_EXT, numOfKeySlots = 2, maxKeyBitLen = HSE_KEY256_BITS, }, { muMask = 0, groupOwner = 0, keyType = 0, numOfKeySlots = 0, maxKeyBitLen = 0 }, } そして、サーバーからの応答としてHSE_SRV_RSP_OKを受け取りました。 次に、以下のキー情報を使用してRSAキーをインポートしようとします。 { keyFlags = HSE_KF_USAGE_VERIFY, keyBitLen = HSE_KEY1024_BITS, keyCounter = 0x0, smrFlags = 0x0, keyType = HSE_KEY_TYPE_RSA_PUB, specific = { pubExponentSize = 4, } } 私の要望は以下のとおりです。 { targetKeyHandle = 0x20000, pKeyInfo = 0x20401f74, pKey = { 0x210034b4, 0x21003534, 0x0}, keyLen = { 0x80, 0x4, 0x0}, } . HSE_RAM_PUB_KEY_IMPORT_POLICY_ATTR_ID を HSE_KM_POLICY_ALLOW_RAM_PUB_KEY_IMPORT に設定し、読み戻した結果も同じでした。 LC属性は0x04、HSEエラーフラグは0x0000、HSEステータスフラグは0x0B60です。ファームウェアバージョンは、0x0F SoC ID 0x0000 FWタイプ 0x02 メジャー 0x32 マイナー 0x00 パッチと読み取られます。 Re: HSE_b: Not allowed to import RSA key to RAM こんにちは、 @Emma_G-gbgさん パラメータは正しく設定されています。特に問題は見当たりません。スーパーユーザー権限を持っている場合は、その属性を設定する必要すらありません。 昨日、これと非常によく似たことをテストしていたので、1024ビットのRSA公開鍵と4バイトの公開指数をインポートするようにコードを少し更新しました。見た目はこんな感じです。 RSA公開鍵をインポートする際には、pubExponentSizeを設定する必要がないことに注意してください。HSEはこのパラメータを無視します。代わりにkeyLen[1]を使用します。 パラメータ pubExponentSize は、サービス HSE_SRV_ID_GET_KEY_INFO によって keyInfo を読み取る際に使用されます。そのキーのkeyInfoを読み取った結果は以下のとおりです。 それは単なるデータキャッシュの問題ではないでしょうか?データキャッシュを無効にして、違いが出るかどうか試していただけますか? よろしくお願いいたします。 ルーカス Re: HSE_b: Not allowed to import RSA key to RAM ありがとうございます。暗号鍵と認証鍵のハンドル情報の入力を忘れていました。確認していなかったので、HSE_INVALID_KEY_HANDLE はゼロになると思っていました。 現在は、キャッシュメモリ内の少なくとも一部の値を使用して動作しており、サービス呼び出しの前後にキャッシュメンテナンス操作が行われています。既存のプロジェクトにHSEサービスを追加しているため、キャッシュ構造を変更することはできませんが、共有メモリに実際に書き込まれていることを確認する限り、これまでのところすべて正常に動作しています。ただし、関連するメモリのキャッシュを無効にしてみましたが、違いはありませんでした。
記事全体を表示
iMX8MP MIPI DSI 至 HDMI 转换器(LT9611UXD)调出 您好, 我们设计了一款基于 imx8MP 的主板,用于使用 LT9611UXD 将 MIPI DSI 转换为 HDMI,但该芯片不断报告错误,例如 MIPI DSI 时钟不稳定和无法同步。 我们试图用 LT9611UXC 替换同一块主板上的 LT9611UXD,HDMI 有输出,但是换回来后 LT9611UXD 仍然无法工作。 能否请您指点一二? 1。恩智浦是否有 LT9611UXD 的解决方案或演示板? 2.恩智浦是否遇到过 MIPI DSI 时钟不稳定的问题?是如何解决的?    Re: iMX8MP MIPI DSI to HDMI Convertor(LT9611UXD) Bring Up 你好@杨志荣 希望你一切都好。 实际上,我们在 i.MX95 15mm x 15mm EVK DTSO 中使用了 LT9611UXC。 请看一看: https://github.com/nxp-imx/linux-imx/blob/lf-6.12.y/arch/arm64/boot/dts/freescale/imx95-15x15-evk-lt9611uxc.dtso 对于 i.MX8MP,我们没有任何示例。 此外,您还可以使用 i.MX8MP 的原生 HDMI 来代替 LT9611UXD。 顺祝商祺! 萨拉斯
記事全体を表示
T2080ブートフラッシュ設定に関するお問い合わせ 親愛なる友人たち、 私はT2080 + VxWorksブートローダー + NORブートフラッシュ(tACC=120ns、tOE=35ns)を使用しています。 電源を入れると、断続的にブートローダーまでしか起動せず(vxworksカーネルをロードできない)、起動が停止します。 T2080 CPUのIFC_FTIM1には、97nsのTRAD_NORを使用しています。これはNORフラッシュのtOE(35ns)を完全に満たしていると思います。 1. tACC(120ns)を満たすためにTRAD_NORを変更する必要がありますか? 2. T2080(ifc_clk=11.5ns)からNORブート(tACC=120ns、tOE=35ns)にアクセスする場合、よく設定されるIFC_FTIM0~3の値と、既知の注意事項を教えていただけますか? ご回答ありがとうございます。 QorIQ T2デバイス Re: Inquiry regarding T2080 Boot Flash settings tOEおよびtACCのNORフラッシュのタイミングシーケンス図、または対応するNORデータシートをご提供いただけますでしょうか。 可能であれば、これらのパラメータが指定されているページ番号も併せてご提示ください。 よろしくお願いします。 Re: Inquiry regarding T2080 Boot Flash settings ご返信よろしくお願いします。 私はCypress社のS29GL01GTを使用しています。 tACC=120ns(最大)、tOE=35ns(最大)、tCE=120ns(最大)。 Re: Inquiry regarding T2080 Boot Flash settings ジューン・ルーさん、ありがとう。 TACOは11サイクルを使用しており、CSの前のアドレスが安定していることを確認しました。 データシートに記載されている要件は満たしているように見えるが、断続的な起動エラーが依然として発生している。 ChatGPTのようなAOツールに問い合わせると、TRADはtACC+遅延(温度などの影響を受ける)を満たす必要があると示唆されます。これについてどう思いますか? それと、u-bootなど、T2080で一般的に使用されているブートローダーの設定を教えていただけますか? (IFC_FTIM0/1の設定とブートフラッシュモデル) よろしくお願いします。 Re: Inquiry regarding T2080 Boot Flash settings IFCモジュールの入力クロックをご確認いただけますでしょうか? T2080リファレンスマニュアル(図4-3)によると、それはip_clkであり、プラットフォームクロックの1/2です。 プラットフォームクロックの有効範囲はデータシート(表121)に記載されており、構成によって異なります。 IFC_CLKとip_clkが同じかどうか確認していただけますか? S29GL01GSを使用してT1023RDBプラットフォームを確認しました(ただし、これはNO-ADMです)。S29GL01GTと非常によく似ており、そのタイミング構成を初期参照として使用できます。 このプラットフォームでは、プラットフォームクロックは400MHzに設定されています。 https://github.com/nxp-qoriq/u-boot/blob/LSDK-1703/include/configs/T102xRDB.h#L328 追加の遅延(例えば、温度の影響を受ける遅延)については、QorIQ T2080のデータシートの図20および図21を参照してください。これらの図には、最大出力遅延が2.5 ns、最小出力ホールド時間が-2 nsであることが示されています。 tACOとtRAdが設定されている場合、実際のCE_BとOE_Bのタイミングは、プログラムされた値よりも少なくとも0.5ナノ秒長くなります。温度やレイアウトによる変動を考慮しても、3 × 11.5 ns = 34.5 ns は、要求される 23 ns と比較しても十分な余裕がある。 T2080リファレンスマニュアルのセクション13.4.2も参照してください。(フラッシュインターフェースタイミングのプログラミングモデル)は、IFCモジュールの入力クロックサイクルを1つ追加することで、マージンをさらに拡大することを可能にします。 いずれにしても、タイミングが要件を満たしていることを確認するために、オシロスコープを使用して波形を検証することをお勧めします。 波形とIFCレジスタの設定をさらに詳しく確認することもできます。 Re: Inquiry regarding T2080 Boot Flash settings ジューン・ルーさん、ありがとう。 私は以下のように時計を使用しています。 プラットフォームクロック:533.33MHz - ip_clk : 266.66MHz (IFCモジュール入力クロック) - IFC_CLK:88.88MHz(IFC外部クロック) ご提供いただいた参照データ(T102xRDB.h)を見ると、TRADは0x1Aに設定されています。プラットフォームクロックは400MHz、ip_clkは200MHzなので、TRAD = 5ns * 26(0x1A) = 130nsと推定されます。 つまり、TRADはFlashのtOE(35ns)ではなくtACC(120ns)を満たすように設計されているようだ。 Re: Inquiry regarding T2080 Boot Flash settings 親愛なるジュン・ルー様、 データシートを再度確認しましたが、同じ内容でした。 Re: Inquiry regarding T2080 Boot Flash settings TACCとTOEの定義を確認してください。 手持ちのS29GL01GTのデータシートを確認しました。それによると、TACCはアドレスから出力までの遅延、tCEはチップイネーブルから出力までの遅延、tOEは出力イネーブルから出力までの遅延である。これらの定義は、データシートに記載されているものと同じですか? 図17は、下に示した図と同じものですか? Re: Inquiry regarding T2080 Boot Flash settings T2080 RM 式 TRAD_NORは、TOEmaxに2×ボード遅延とセットアップ時間を加えた値を明示的に使用します。これはtOEに関連しています。tACC/tCEは、 TRAD_NOR単独ではなく、 tACO + tRADという複合パスと比較してチェックする必要があります。 T102xRDB.hのパラメータは、ボードにアクセスするための十分な余裕を残しています。すべての設定を試して問題が解決するかどうかを確認し、解決できた場合は、リファレンスマニュアルとデータシートに従ってパラメータを調整してください。 さらにご質問がある場合は、波形とすべてのIFCレジスタ設定を共有してください。 Re: Inquiry regarding T2080 Boot Flash settings 親愛なるジュン・ルー様、 u-bootコードでTRADを130ns(tACCより大きい値)に設定する理由がまだ気になっていますが、あなたの回答はとても参考になりました。 ご協力ありがとうございます。 Re: Inquiry regarding T2080 Boot Flash settings 十分なマージンを確保するため、TRADを130 nsに設定することをお勧めします。ただし、97ナノ秒などのより小さな値を試してみることもできます。この値でも問題なく動作するはずです。 結果が出ましたら、随時お知らせください。 ありがとうございます。
記事全体を表示
i.MX8QX6 – UUUフラッシュがlibusbエラーで停止する(LPDDR4行アドレスの不一致の可能性) こんにちは、 現在、以下の構成で作業を行っています。 SoC: NXP i.MX8QX6(MIMX8QX6AVLFZAC) LPDDR4: Micron MT53E768M32D2ZW-046 (AIT:C) Yoctoリリース: walnascar-6.12.34-2.1.0 Universal Update Utility を使用して imx-boot-imx8qxp-mek-sd.bin-flash_spl イメージをフラッシュしようとしています。 フラッシュ処理中にツールが停止し、最終的にLIBUSB_ERROR_NO_DEVICEを報告して、フラッシュ処理が完了しなくなります。 トラブルシューティングを実施しました 問題を特定するために、以下のことを試みました。 以前のリリースに含まれる古いimx-bootバイナリを使用してテストしました。 LF_v6.6.52-2.2.2_images_IMX8QXPC0MEK LF_v5.15.32-2.0.0_images_IMX8QXPC0MEK UUUツールの最新バージョンを使用しました フラッシュ処理を複数回繰り返した しかし、その行動は変わらない。 疑われる原因 メモリデバイスの仕様を精査した結果、社内調査により、 SoCのDDRコントローラ構成と実際のLPDDR4デバイスとの間でDDRアドレス行構成の不一致が発生している可能性があることが示唆されました。 Micronのデータシートによると、メモリデバイスは行アドレスR[16:0](17行)を使用します。 しかし、SoCのドキュメントによると、DDRコントローラは最大16行のアドレス線(R0~R15)をサポートしているようです。 この違いから、 DDRコントローラ構成とメモリデバイスのアドレス指定方式に不一致がある可能性があると推測されます。 質問 LPDDR4構成における行アドレスの不一致が原因で、起動初期段階でUUUフラッシュ処理がLIBUSB_ERROR_NO_DEVICEエラーで停止する可能性はありますか? これが原因である可能性がある場合、 i.MX8QX6 上のこの LPDDR4 デバイスの DDR パラメータを正しく設定するための推奨される方法は何ですか? 構成はNXPが提供するDDRツール/RPAツールを使用して生成すべきでしょうか、それともこの特定のメモリデバイス用のリファレンス構成は既に用意されているのでしょうか? 何かご助言やご提案があれば、大変ありがたく思います。 よろしくお願いします。 Re: i.MX8QX6 – UUU flashing stalls with libusb error (possible LPDDR4 row address mismatch) こんにちは、 @Yogesh_   私は自分のimx8qxpボードでテストしました。問題は発生していません。私は以下のコマンドを使用してflash.binファイルをフラッシュします。 uuu -b emmc .\imx-boot-imx8qxpc0mek-sd.bin-flash   ご質問にお答えします: Q1 & Q2:これはこの問題を引き起こしません Q3:DRAMの適切なパラメータを設定する必要があります。次に、新しいflash.binファイルを再コンパイルします。しかし、おっしゃる通りです。お使いのDRAMの行数は17ですが、imx8qxpがサポートする最大行数は16です。ですから、16行の別のDRAMに交換してください。つまり、最大4GB(32Gb)のLPDDR4密度をサポートするには、構成は16行2ランクでなければならない。 BR Re: i.MX8QX6 – UUU flashing stalls with libusb error (possible LPDDR4 row address mismatch) UUUツールがハングアップ/停止する問題を解決するための代替案をご提案いただけますでしょうか?以前のバージョンと最新バージョンのUUUツール両方を試してみましたが、依然として同じエラーが発生します。 Re: i.MX8QX6 – UUU flashing stalls with libusb error (possible LPDDR4 row address mismatch) ご返信ありがとうございます。 Yoctoで生成されたimx-boot-imx8qxp-mek-sd.bin-flash_splとflash.binイメージの両方のログを添付しました。flash.binはRPAツールを使用して設定され、SCFWポーティングキットでビルドされ、正常に起動しています。 Re: i.MX8QX6 – UUU flashing stalls with libusb error (possible LPDDR4 row address mismatch) こんにちは、 @Yogesh_ 以下のコマンドを実行した結果はどうなりますか? uuu -lsusb BR Re: i.MX8QX6 – UUU flashing stalls with libusb error (possible LPDDR4 row address mismatch) こんにちは、 @Yogesh_ 以下のコマンドは使用しないでください sudo uuu -v -b emmc_all imx-boot-imx8qxp-mek-sd.bin-flash_spl 以下のコードを使用してください。 uuu -b emmc imx-boot-imx8qxp-mek-sd.bin-flash_spl 1. Windows OS上でuuuツールを実行してみてください。 2. 下記のコマンドの結果を共有してください。 uuu -lsusb BR
記事全体を表示
imx8qm jailhouse Hi all, Is there any document showing all the steps to have a demo running on imx8qm mek board with jailhouse? I was going over this: L5.4.70_2.3.3_LINUX_DOCS but all I could find is a reference to device trees: Hypervisor Jailhouse Enables the Jailhouse Hypervisor device trees. • imx8qxp-mek-root.dtb: DTB for root-cell I do not know what to do with this info. That is why I need a step by step instruction list. Br, Mircea Re: imx8qm jailhouse @Jerry137207  Hi, Are you running jailhouse on top of hw ? Re: imx8qm jailhouse Hi @Rita_Wang  I am using MCIMX8QM soc I need to run android and freertos on top of hypervisor. Which hypervisor i can use ? Re: imx8qm jailhouse Waste of time. Nothing works out of the box on nxp imx8qm, at least not with the software provided by nxp. Android does not run in jailhouse, on imx95 they have a small android demo running in xen. freertos can run on the second core m3 core, you can flash the emmc with android and have it like that running. no hypervisor needed. Re: imx8qm jailhouse hi @Ahelion i am planning to use MCIMX8QM-CPU soc  i need to bringup freertos and Android on top on this do we need hypervisor here, and also Jailhouse is already present in the latest version of android ? Re: imx8qm jailhouse Hi, Ahelion: I'm interested in runing multiple OS based on jailhouse, but related information is lack. I've sucessfully run jailhouse test demo in Imx8qm mek board. If you would like share info each other, plz email me: [email protected]. Re: imx8qm jailhouse I can tell you right now, it is not supported. I could not get jailhouse or xen to work on imx8qm. Whatever documentation i find is referencing linux4.9, which can not be build anymore. Re: imx8qm jailhouse Hi, Yes, the xen is supported on the i.MX8QM. You can refer to the attach document. Wish you have a nice day Best Regards Rita Re: imx8qm jailhouse any ideea?  Found out that the latest linux kernel does support the lates XEN How can I get Linux and Android running at the same time? Re: imx8qm jailhouse OK, I will help confirm. Re: imx8qm jailhouse L5.4.70_2.3.3, i was following this quide, so all bsp-s mentioned here I am using. Re: imx8qm jailhouse Which version BSP are you want to use? Re: imx8qm jailhouse @Rita_Wang Xen willl support on latest kernal 6x? Re: imx8qm jailhouse @Rita_Wang i have one more we are buying MCIMX8QM soc  i need to run android and freertos as guest which hypervisor support on this latest kernel? jailhouse supports on latest kernel for my requirement  Re: imx8qm jailhouse Hi @Shivu_Guru_24 , Sorry for late reply. For the XEN the on latest kernal 6x do not support it. If customer want to use, they can do porting themself. In our BSP 4.14.98 support it. Customer and refer it: Embedded Linux for i.MX Applications Processors | NXP Semiconductors   Hope this can do help for you Wish you have a nice day Best Regards Rita Re: imx8qm jailhouse Hi @Shivu_Guru_24 , Jailhouse is a Type 1 hypervisor for i.MX 8. Xen is not support in the latest version BSP. Wish you have a nice day Best Regards Rita
記事全体を表示
For S32G274A multi-core scenario, can the first 0x9100 bytes of fip.bin be neglected? When making ATF image for BSP42, we get information like this: Boot Core: A53_0 IVT Location: QSPI Load address: 0x342f8f00 Entry point: 0x34302000   Entry point - Load address = 0x9100 it's BL2 that sits at offset 0x9100 of fip.bin. So is "Entry point" refering to BL2?   For multi-core scenario, MCU runs bootloader to load BL2 for A53. If BL2 is the entry point, should bootloader just copy from offset 0x9100 of fip.bin(BL2) to 0x34302000 of RAM space(neglect the first 0x9100 bytes)? GoldVIP Re: For S32G274A multi-core scenario, can the first 0x9100 bytes of fip.bin be neglected? Hello, @wansp  Thanks for your post The bootloader will move the data from QSPI to the Load address(SRAM), they would not be neglected. BR Chenyin
記事全体を表示
割り込みハンドラからI/Oを実行する この質問に関連するパラメータは次のとおりです。 1. IDE: S32 DS for ARM v 2.2 (これは古いですが、問題の製品自体も古いので、既存のコードのサポートが必要です) 2. チップ: S32K148 3. OS: Windows 11 4. システムOS: ベアメタル ISR であらゆる種類の SPI マスター転送を実行しようとするとハングし、通常、中断された API はブロッキング I/O (I2C または SPI) 呼び出しです。 ブロッキング呼び出し (LPSPI_DRV_MasterTransferBlocking() へ) では、sysTick 割り込みが発生していないように見えるため呼び出しがハングし、MCU は経過時間を把握できません。 非ブロッキング呼び出し (LPSPI_DRV_MasterTransfer() の後に LPSPI_DRV_MasterGetTransferStatus(SPI1, &byte_remaining) が続く) では、byte_remaining は元の値のままになります。非同期転送のために LPSPI_DRV_MasterTransfer() を呼び出す前に LPSPI_DRV_MasterAbortTransfer(SPI1) への呼び出しを追加しようとしましたが、結果は同じです。 少し関連する質問ですが、SysTick_Handler() をトリガーするものは何ですか?私の直感では、1 ミリ秒ごとにティック カウントを増やしながら常に実行されているはずですが、その本体にブレーク ポイントを設定すると、一部の時間しかヒットしないようです。不思議なことに、ブロッキング SPI 転送が成功した場合でもヒットしないことがあります。これは、システム タイマーが以前は解除されていた場合は、システム タイマーが起動される必要があるためです。 もう 1 つの関連する質問は、SPI の S32 クックブックのサンプル コードでは、SDKs が提供する API が使用されていないことです。サンプルでは、すべてのレジスタ ビットを直接操作します。車輪の再発明ではなく、少なくとも NXP API を呼び出すという点で、本番環境に適したコードに近い例はありますか? Re: Doing I/O from an interrupt handler こんにちは@PetrS どうもありがとうございます。割り込み優先度によって、問題は確かに解決しました。しかし、私は疑問を持っています。 ISR 内でブロックするのは良いアイデアではないことに同意しますが、シングル スレッド アプリケーションでは代替手段は何でしょうか?SPI 転送が完了するまで、アプリケーション コンテキストでスピンできます。これにより、他の I/O 割り込みが発生するようになります (私の理解では、負の優先度の割り込みはいずれにせよ発生します。正の優先度の ISR に入っても、それらは無効になりません)。しかし、私の状況では、重複する I/O を実行することは不可能であり、望ましくもありません。 1.S32K148 はすべてのバスのバス・マスタであるため、これは不可能です。SO、ISR で SPI 転送を実行している場合、別の I/O バスを駆動することはできず、したがって割り込みをトリガーすることはできません。 2. ISR 間でグローバルが共有される可能性があるため、現在の I/O が完了するまで新しい I/O を開始したくない、SO これは望ましくありません。 シングル Thread のベア メタル アプリケーションの場合、この状況に対処するにはどのような方法をお勧めしますか? Re: Doing I/O from an interrupt handler こんにちは、 OK、では単純に優先順位を中断すると、この動作が発生する可能性があります。両方の割り込みの優先度が同じ場合、GPIO ISR がアクティブな間は LPSPI ISR を実行できないため、ブロッキング API がハングします。ブロッキング呼び出しは、ISR が転送を完了してセマフォをポストするまで待機しますが、その ISR は GPIO ISR が終了するまで CPU 時間を取得しません。SDKs のドライバは実際には LPSPI 割り込みで転送を終了し、その後でセマフォをポストしてブロッキング呼び出しを解放します。SO、優先順位が同じ ISR はこのように転送をデッドロックします。 非ブロッキング API の動作は同じです。同じ優先度の GPIO ISR から呼び出された場合、LPSPI ISR はそれをプリエンプトすることができないSO、ドライバ ステート マシンは LPSPI IRQ によって処理されないSO、byte_remaining は変更されません。LPSPI の優先度を高く(数値的に低い値に)した後にのみ、LPSPI 割り込みが直ちに発生し、転送が完了し、ブロッキング API と非ブロッキング API の両方が期待どおりに動作できるようになります。試す /* 数字が小さいほど、Cortex-M での優先度が高くなります */ INT_SYS_SetPriority ( SysTick_IRQn 、 0 ) ;     // ティックタイムアウトに依存している場合 INT_SYS_SetPriority ( LPSPI1_IRQn 、 1 ) ;      // GPIO より高くなければなりません INT_SYS_SetPriority ( PORTC_IRQn 、 2 ) ;       // ボタンの PORTx IRQ   注: 優先度の修正に関係なく、ISR 内でブロッキング SPI API を使用しないことをお勧めします。同様に、ISR 内で非ブロッキング転送が完了するまで待機しないこともお勧めします。S32K LPSPI ドライバーは割り込みハンドラー内で転送を進行しますが、ISR が長いと他の割り込みの実行が妨げられる可能性があります。   BR、ペトル Re: Doing I/O from an interrupt handler こんにちは@PetrS ご返答ありがとうございます。しかし、よく理解できていないようで申し訳ありません。 あなたが言っているのは、ISR 内でブロッキング I/O を実行するのは悪い考えだということのようですが、私も同感です。しかし、なぜそれが機能しないのでしょうか?ティック カウンタは、優先度 -1 の割り込みハンドラ内で増加します。これは、どの I/O 割り込み優先度よりも高い優先度です。また、コード内の割り込みマスクは変更していませんが、ドライバが内部的にそれを変更するのでしょうか? 私たちのアプリケーションはベアメタル (シングル スレッド) なので、ISR コンテキストとアプリケーション コンテキストで待機することはほぼ同じです。唯一の違いは、ISR コンテキストでは、他の I/O 割り込みがブロックされることです。しかし、これはまさに私が望んでいるものなのです。ただし、優先度が高いため、タイマー ISR をブロックしてはなりません。ISR の最初の行に ENABLE_INTERRPUTS() の呼び出しを追加してみましたが、違いはありませんでした。 非ブロッキング バージョンも試してみましたが、これも別の方法でハングします。非ブロッキング呼び出し(LPSPI_DRV_MasterTransfer() の後に LPSPI_DRV_MasterGetTransferStatus(SPI1, &byte_remaining) )では、byte_remaining は元の値のままです。非同期転送のために LPSPI_DRV_MasterTransfer() を呼び出す前に LPSPI_DRV_MasterAbortTransfer(SPI1) の呼び出しを追加しようとしましたが、結果は同じでした。上記のAPI呼び出しはどちらもISRから実行されます。ユースケースとしては、ユーザーがボタンを押すとGPIO割り込みが発生し、SPI経由で値を読み取るというものです。 もう一度指摘しておく価値のあることは、ISR が中断している API はブロッキング SPI 転送であるということです。新しい転送を開始する前に ISR に LPSPI_DRV_MasterAbortTransfer() の呼び出しを追加しても、効果はありませんでした。 この問題に関しては期限が非常に迫っているため、どんな助けでも大歓迎です。 Re: Doing I/O from an interrupt handler こんにちは、 ISR からの I/O をブロックすることは、S32K1 SDK では機能しません。LPSPI_DRV_MasterTransferBlocking() は OSIF セマフォを待機します。ISR コンテキストではブロックする場所がなく、進めるティック/タイム ベースもないため、ハングします。非ブロッキング API (LPSPI_DRV_MasterTransfer) を使用して、LPSPI ISR/コールバックで転送を完了し、タスク/メイン ループを信号します。また、SysTick はタイマー ラップ時に起動しますが、そのハンドラーはマスクされておらず、十分な NVIC 優先度がある場合にのみ実行されます。そのため、PRIMASK が設定されている場合、または優先度の高い ISR にいる場合は延期されます。 クックブック プロジェクトは意図的に軽量化されており、高レベルのドライバの抽象化なしでペリフェラルの使用を直接示します。これは、実稼働での使用ではなく、学習の開始点として意図されています。NXP ドライバ スタイルの例が必要な場合は、クックブックではなく SDK、または RTD ドライバ/サンプル プロジェクトを参照してください。   BR、ペトル Re: Doing I/O from an interrupt handler こんにちは、 今では「動作する」ようになりましたが、ISR 内で SPI 転送を行うことは依然として推奨されません。 後で優先順位を変更したり、別のペリフェラルを追加したりする場合は、診断したデッドロック状態を簡単に再現できます。最も安全なデザインは、ISR を常に短く保ち、実際の作業をメイン ループに延期することです。 ISR はトリガーとしてのみ使用し、SPI 転送を main() で同期的に実行するか、ISR で開始されて LPSPI ISR によって完了する非ブロッキング転送として実行し、main は完了フラグを待機します。 BR、ペトル
記事全体を表示
Doing I/O from an interrupt handler The relevant parameters for this question are as follows: 1. IDE: S32 DS for ARM v 2.2 (Yes, I know this is old, but so is the product in question; we need to support the existing code) 2. Chip: S32K148 3. OS: Windows 11 4. System OS: Bare metal Attempting to do any kind of SPI Master transfer in an ISR hangs, and usually the API that was interrupted is a blocking I/O (I2C or SPI) call. On a blocking call (to LPSPI_DRV_MasterTransferBlocking() ), the call hangs because sysTick interrupts do not seem to be happening, so the MCU does not get a sense of elapsing time. On a non-blocking call (LPSPI_DRV_MasterTransfer() followed by LPSPI_DRV_MasterGetTransferStatus(SPI1, &byte_remaining) ), byte_remaining stays at the original value. I have attempted to add a call to  LPSPI_DRV_MasterAbortTransfer(SPI1) before calling LPSPI_DRV_MasterTransfer() for the async transfer, but the result is the same. On a semi-related question, what triggers the SysTick_Handler() ? My intuition says it should be running all the time increasing the tick count every 1ms, but putting a break point in the body of it seems to hit only some time. Strangely, it is sometimes not hit even when a blocking SPI transfer is successful, which should be arming the system timer if it was unarmed before. Another semi-related question is that in the S32 Cookbook example code for SPI, there are no use of the SDK provided APIs; the examples do all the register bit banging directly. Are there any examples that are closer to production worthy code, in that they at least call the NXP APIs instead of re-inventing the wheel? Re: Doing I/O from an interrupt handler Hello @PetrS  Thank you very much. The interrupt priority indeed solved the problem. However, I do have a question: I agree that blocking inside an ISR is not a good idea, but what is the alternative in a single threaded application? I could spin in the application context until the SPI transfer is done. That will allow other I/O interrupts to happen (my understanding is that negative priority interrupts will fire anyway; they are not disabled when a positive priority ISR is entered). But in my situation doing overlapping I/O is neither possible nor desirable. 1. It is not possible because the S32K148 is the bus master for all the buses. So if it is doing a SPI transfer in an ISR, it cannot possibly drive another I/O bus and therefore cannot trigger interrupts. 2. It is not desirable because there could be shared globals between the ISRs, so I don't want to start a new I/O until the current one is complete. For a single threaded bare metal application, what would be your recommendation to handle this situation? Re: Doing I/O from an interrupt handler Hi, OK, then simply interrupts priorities could cause this behavior. The blocking API hangs simply because the LPSPI ISR cannot run while the GPIO ISR is active if both interrupts have the same priority. The blocking call waits for the ISR to finish the transfer and post the semaphore - but that ISR never gets CPU time until the GPIO ISR exits. The SDK’s driver indeed finishes transfers in the LPSPI interrupt, and only then posts the semaphore to release the blocking call, so equal‑priority ISRs will deadlock the transfer this way.  The non‑blocking API behaves the same: if called from a GPIO ISR of equal priority, the LPSPI ISR cannot preempt it, so byte_remaining never changes because the driver state machine is never serviced by the LPSPI IRQ. Only after raising LPSPI to a higher priority (numerically lower value) will the LPSPI interrupt fire immediately, complete the transfer, and allow both blocking and non‑blocking APIs to work as expected. Try  /* Smaller number = higher priority on Cortex-M */ INT_SYS_SetPriority(SysTick_IRQn, 0);     // if you rely on tick timeouts INT_SYS_SetPriority(LPSPI1_IRQn, 1);      // must be higher than GPIO INT_SYS_SetPriority(PORTC_IRQn, 2);       // your button’s PORTx IRQ   Note: regardless of the priority fix, it’s still advisable not to use the blocking SPI API inside an ISR, and likewise not to wait inside an ISR for a non‑blocking transfer to finish. The S32K LPSPI driver progresses transfers in its interrupt handler, and long ISRs can prevent other interrupts from running.   BR, Petr Re: Doing I/O from an interrupt handler Hello @PetrS  Thank you for your response, but I am afraid I don't really understand it. What you seem to be saying is that doing blocking I/O inside an ISR is a bad idea, and I agree. But why should it not work? The tick counter increments in an interrupt handler that priority -1, that is higher than any I/O interrupt priority. And I am not changing any interrupt mask in my code; does the driver change it under the hood? Our application is bare metal (single threaded), so waiting in an ISR context and application context is pretty much the same thing. The only difference is that in an ISR context, other I/O interrupts will be blocked. But this is exactly what I want anyway. The timer ISR, however, should not be blocked because of the higher priority. I have tried adding a call to ENABLE_INTERRPUTS() on the first line of the ISR, but it made no difference. I have tried the non-blocking version also, and that also hangs, in a different way. On a non-blocking call (LPSPI_DRV_MasterTransfer() followed by LPSPI_DRV_MasterGetTransferStatus(SPI1, &byte_remaining) ), byte_remaining stays at the original value. I have attempted to add a call to  LPSPI_DRV_MasterAbortTransfer(SPI1) before calling LPSPI_DRV_MasterTransfer() for the async transfer, but the result is the same. Both of the above API calls are made from the ISR. The use case is that if the user presses a button, a GPIO interrupt is fired and it wants to read a value over SPI. One thing worth pointing out again is that the API that the ISR is interrupting is a blocking SPI transfer. Adding a call to LPSPI_DRV_MasterAbortTransfer() in the ISR before starting the new transfer also did not help. I am on a very tight deadline on this issue; any help is greatly appreciated. Re: Doing I/O from an interrupt handler Hi, Blocking I/O from an ISR won’t work with the S32K1 SDK. LPSPI_DRV_MasterTransferBlocking() waits on an OSIF semaphore; in ISR context there’s no place to block and no tick/time base to advance, so it hangs. Use the non‑blocking API (LPSPI_DRV_MasterTransfer) and complete the transfer in the LPSPI ISR/callback, then signal a task/main loop. Also, SysTick fires on timer wrap, but its handler only runs when not masked and with sufficient NVIC priority—so if PRIMASK is set or you’re in a higher‑priority ISR, it will be deferred.  The cookbook projects are deliberately lightweight, showing peripheral use directly without the higher‑level driver abstractions; they’re intended as learning starting points, not production usage. If you want NXP driver‑style examples, look to SDK, or rather RTD driver/example projects rather than the cookbook.   BR, Petr Re: Doing I/O from an interrupt handler Hi, even though it now “works” you should still discourage doing the SPI transfer inside the ISR.  If you ever change priorities later, or add another peripheral, you can easily re‑create the deadlock condition you just diagnosed. The safest design would be always to keep ISRs short and defer real work to the main loop. Use the ISR only as a trigger; perform the SPI transfer synchronously in main() or as a non‑blocking transfer initiated in the ISR but completed by the LPSPI ISR, and main waits for the completion flag. BR, Petr
記事全体を表示
HSE data reflected in memory only after multiple soft resets Steps followed: 1. Provide the HSE ELF file (containing HSE data bytes programmed at HSE memory locations) to Cyclone image creator 2. Create a Cyclone .sap file to enable and program HSE. 3. Flash the .sap file on the S32K312 board using the Cyclone debugger via JTAG. 4. Perform a power cycle. 5. Load the workspace and verify HSE data in memory. 6. Perform multiple soft resets via the debugger. Observed behavior: • After the initial power cycle, the HSE data is not immediately reflected in memory. • The HSE data becomes visible in memory only after multiple soft resets. (Issue) • Also tried allowing with delay, still the same behavior Question: • Why are multiple soft resets required for the HSE data to be reflected in memory? • Is there a recommended workaround (e.g.,reset sequence, or configuration change)? Re: HSE data reflected in memory only after multiple soft resets Hi @abdul_rahiman_csg  First of all, could you please explain what do you mean by "Provide the HSE ELF file (containing HSE data bytes programmed at HSE memory locations)"?  When HSE firmware is installed, only HSE has exclusive access rights to HSE secure memory (HSE firmware, HSE data). Secure memory is removed from memory map and user can't access it at all.  Regards, Lukas Re: HSE data reflected in memory only after multiple soft resets This ELF contains HSE data programmed in the address ranges 0x004D2000–0x004D2060 and 0x1B000000–0x1B000360 Re: HSE data reflected in memory only after multiple soft resets Hi @abdul_rahiman_csg  This does not make sense from microcontroller point of view. It seems to be related to tools. Could you try to discuss this with Pemicro directly? https://www.pemicro.com/support/index.cfm Regards, Lukas
記事全体を表示
高级声明式用户界面框架 是否有适用于 i.MX RT 跨界 MCU 的高级声明式用户界面框架?我希望能用 Swift 或 JavaScript 等高级语言编写代码,然后使用类似 SwiftUI 或 React 的东西创建用户界面。 Re: High level declarative UI framework 你好@MatthewRuzzi、 感谢您关注恩智浦 MIMXRT 系列! 恩智浦正式提供 GuiGuider 工具,以 LVGL 作为底层框架,帮助客户快速开发用户界面软件。此外,SDK 还包括 emWin 和 VGLite 的示例项目。虽然目前官方并不支持高级语言的实现,但我建议探索以下方法: 1.https://doc.qt.io/QtForMCUs/qtul-zephyr-mimx1060-evk.html https://www.embeddedartists.com/wp-content/uploads/2023/06/QtMCUs_ProgramDevelopment.pdf 2https://www.nxp.com/design/design-center/training/TIP-CREATE-USER-INTERFACE-QT 3.https://docs.microej.com/en/latest/GettingStarted/gettingStartedIMXRT1170.html 4.https://github.com/lvgl/lv_micropython 5.https://www.swift.org/blog/embedded-swift-examples/ 我希望这些资源能对您的发展有所启发。 致以最诚挚的问候, Gavin Re: High level declarative UI framework 目前是否有任何项目正在开展这方面的工作?我非常希望能够使用 Swift 或 JavaScript 这样的语言。有什么办法能让我今后更有可能这样做吗?我应该在哪些地方提交或投票表决功能请求,或者在哪些地方发布此信息?
記事全体を表示
PN7160とnRF52840 こんにちは、 カスタムPCB上のnRF52840モジュール(Raytac MDBT50Q-1MV2)にI2C経由でコネクテッドされた外付けNFCリーダ/コントローラ(NXP PN7160A1HN/C100E)を使用しています。(プログラミングは、nRF52840 DKをデバッグプローブとして使用し、SWD経由で行います。) 現在のソフトウェア環境は、VS Code(Windows 11)のnRF Connect SDK(NCS)v3.2.0とZephyr RTOS v4.2.99です。目標は、PN7160(NCI-over-I2C)を使用して、RF検出を開始し、13.56MHzパッシブカードのUIDを読み取ることです。 私はPN7160を「典型的なZephyrの方法」で統合しようと試みました。 ソース/メイン.c ボード/nrf52840dk_nrf52840.オーバーレイ prj.conf I2C ピンと PN7160 GPIO (VEN/IRQ) を設定できますが、初期化が失敗します (プローブ中または最初のコマンド中の I2C -EIO/NACK)。その結果、RF 検出全体が機能せず、統合アプローチが正しいかどうかわかりません。 質問: NCS/Zephyrでは、`main.c`を変更するだけでPN7160をプログラムすることは可能ですか?+ `nrf52840dk_nrf52840.overlay` + `prj.conf`、それともPN7160には適切なカスタムドライバが必要であると予想されますか? ドライバが必要な場合、NCS でドライバを追加するための推奨アプローチは何ですか (デバイスツリー バインディング YAML + Kconfig + CMake + ドライバ ソース)。また、外部 Zephyr モジュール (zephyr/module.yml + EXTRA_ZEPHYR_MODULES) としてパッケージ化する必要がありますか?これを行う方法のサンプル コードはありますか (パブリック github リポジトリのようなものですが、見つけることができませんでした)? プローブ/最初の書き込み時に -EIO を引き起こす可能性のある、別の方法で処理する必要がある既知の NCS v3.2.0 / Zephyr 4.2.99 I2C/TWIM 動作はありますか? 他に役立つコメントがありましたら、ぜひ教えてください。 ご協力ありがとうございます!
記事全体を表示
MCXN947 I3C IBI 有效载荷问题 您好, 我遇到了一些关于 I3C 接收 IBI 有效载荷的问题。希望你们能提供帮助。欣赏。 当我使用 NXP974 作为 I3C 主站时,我们能收到多少个包含 MDB 的有效载荷数据?在我的测试中,似乎最大值为8字节。(一个 MDB 和七个有效载荷数据)。但是从规范来看,它表明支持 9 字节的支持包括 MDB。您能帮忙确认一下吗? 规格:控制器在 9 字节(包括必填数据字节)后自动停止 IBI 数据。 我遇到的另一个问题是,当我将有效载荷设置为8字节时,我确实收到了来自fifo的8字节,但是即使我们没有从i3c目标发送新的IBI,它也会再次进入IBI并导致系统卡住。当有效载荷大小于 8 字节时,它运行良好。 我检查了 SDATACTRL 的 RX FIFO 计数,是 8。我认为这是正确的。而 irq 的状态似乎是正确的,与正常情况下的状态(0x2e00)相同。所以我想这也是正确的。 然后,我尝试捕获洛杉矶的波形。我发现正确和不正确的情况有些不同。 在正常情况下(有效载荷< 7),最后一个 T 位的整个时钟周期为低电平,然后产生一个停止信号。 在错误的情况下,SDA将在T位时钟的上升沿处于高位。然后,重新发送时钟(开漏)。 你知道恩智浦发生了什么事吗?为什么有效载荷大小不同时会有不同的行为? MCX N Re: MCXN947 I3C IBI payload issue 嗨,杰姬! 我们过去也遇到过这个问题,并向恩智浦报告过。我们得到确认,这是恩智浦 I3C IP 模块中的一个错误。IBI 有效负载长度不能大于 8 字节,此外,I3C 目标应使用 T-Bit 来表示最后一个字节中的数据结束(T-Bit LOW)。I3C IP 块作为控制器时,如果 T 位为高电平,则不能发出 STOP 条件。 Re: MCXN947 I3C IBI payload issue 你好@JackieZhu 是的,你说得对。I3C 目标支持在强制数据字节之后最多七字节的扩展 IBI 数据。 因此,包括 MDB,最大值为 8 字节。(一个 MDB 和七个有效载荷数据)。 BR 哈利
記事全体を表示
mk64 从闪存 0xE5FF8 读取数据会导致总线故障 你好, 我有一款运行 MK64FN01M 的板,与 frdm_K64 的板类似。 我确实在存储CRC的最后一个字节上存储了闪存中的设置。 对于板上的一个扇区,我在阅读该部分时出现总线故障 该代码调用了从 0xE5FF8 到 RAM 的简单 memcpy,长度为 8 字节。 该代码中的该函数之前被不同的内存部分调用过。 只有在这些位置上,代码才会崩溃。 当我把这个扇区移到其他位置时,它就能正常工作了。 是否知道为什么特定内存会出现问题? 谢谢,阿迪布 Re: mk64 read from flash 0xE5FF8 causes busfault 你好@theadib 请先擦除整个扇区,然后写入与 8 字节边界对齐的设置数据(包括 CRC)。不要对同一 8 字节短语执行部分更新。然后,继续进行读取操作。   BR 爱丽丝 Re: mk64 read from flash 0xE5FF8 causes busfault 你好,爱丽丝,感谢您的回复。 总线故障发生在读取操作期间(来自闪存位置的 memcpy)使用常规闪存地址会导致总线故障的原因 是什么? 之前没有写入操作。 是否有可能持续"阻止/保护" 闪存的读取。 我的程序在其他设备上运行正常。 有什么想法吗? 谢谢,阿迪布 Re: mk64 read from flash 0xE5FF8 causes busfault 你好@theadib 有 FSEC 寄存器。FSEC 中的高效密码学标准(SEC) 位决定了 MCU 处于安全还是不安全状态。虽然它可以控制整个 MCU,但在你的情况中,只有部分内存无法读取,所以我认为这不是原因。 有可能是上一次写入操作过程中发生了错误,因此我建议先擦除内存,然后再次读取以检查是否正常工作。   谢谢!   BR 爱丽丝   Re: mk64 read from flash 0xE5FF8 causes busfault 你好@Alice_Yang, 也许这个问题与我使用世纪佳缘 JLink 时发现的一些奇怪行为有关。 当我在 JLink 中使用 MK64FN1M0XXX12 连接到我的 MK64FN1MOVLQ12 时: 设备 mk64fn1moxxx12 如果 SWD 速度 1000 connect erase loadbin imagefile.bin 0 通常 jLink 会声称设备在擦除后受到保护。 并提出了所附的对话。 我本以为在执行擦除命令后设备不受保护且不安全。 使用 JLink 完全擦除闪存并加载新映像的首选顺序是什么? 。 预先致谢 Re: mk64 read from flash 0xE5FF8 causes busfault 您好@Alice_Yang 很抱歉打扰您...... ,我现在已经找到了根本原因,即向同一地址重复写入相同数据。 这种情况不应该发生在没有错误的代码中 😉 但是, ,第二次写入会返回错误代码 ,但随后即使读取该扇区也会导致 BUS_FAULT 陷阱。 有没有可能在一次访问导致整个程序崩溃之前检查扇区状态? 这样,我就可以再次正确擦除扇区,并将扇区置于正确的状态。 ?? 我已经查看了参考手册第 29.4.10.2 节中的 FSFE 描述闪存命令。 但我没有看到一条命令可以"测试" 程序存储器中的一个扇区。 我是不是漏掉了什么? 这样,我就能制作出更具弹性的应用程序,在重启后检查闪存状态。 预先致谢, Adib Re: mk64 read from flash 0xE5FF8 causes busfault 你好@theadib 使用 J-Link 擦除时,同一芯片有两种选择。请选择没有 “允许网络安全” 的设备名称;这样,擦除后将无法保护设备名称。 谢谢。 BR 爱丽丝 Re: mk64 read from flash 0xE5FF8 causes busfault 你好@theadib 用上市 “擦除闪存扇区” 命令后,FRFE 会擦除所选闪存,然后验证其是否已擦除。如果擦除验证失败,则 FSTAT[MGSTAT0] 位被置位。 在擦除闪存扇区操作 完成后,CCIF 标志被置位。擦除闪存扇区命令可挂起(参见 FCNFG[ERSSUSP] 位和图 29-11)。 BR 爱丽丝
記事全体を表示
启用密码保护后无法移除 NTAG213 上的写保护 (AUTH0/ACCESS) 您好,NXP团队, 我正在使用 PN7160 NFC 控制器和恩智浦 Linux NF CDemoApp 处理 NTAG213 标签。 我的成功经验 我修改了nfcDemoApp (main.c),通过配置在 NTAG213 上启用只写密码保护: 工务司 包装 AUTH0 访问(prot = 0) 写保护正常工作: 移动 NFC 应用程序无法再写入 只有从我的应用程序中发送 PWD_AUTH 后,才能进行写入操作 将 AUTH0 RESET 为 0xFF 清除接入 重写配置页面 我还使用恩智浦 NFC TagInfo / NFC Tools应用程序在另一个 NTAG213 上启用了写保护,结果也达到了预期效果。 我面临的问题 现在,我在这两种情况下都 无法移除写保护: 使用我自己的代码 (nfcDemoApp) 使用恩智浦 NFC 工具/TagWriter移动应用程序 即使使用正确的密码 (PWD_AUTH) 进行了身份验证,但尝试:仍失败。 我的理解是 根据 NTAG213 数据表,我明白了: PWD_AUTH 应允许在 RF 会话期间写入受保护的页面 身份验证后,应该可以修改 AUTH0 和 ACCESS NTAG213 没有用于密码保护的永久锁定位(与锁字节不同) 但在实际操作中,我无法将标签恢复到未受保护的状态。 问题 启用 NTAG213 基于密码的写保护后,官方是否支持移除或禁用该保护? 成功设置 PWD_AUTH 后,AUTH0 和 ACCESS 页面是否可以写入,还是一旦设置后就永久受保护? 是否有将 NTAG213 恢复到可写(未受保护)状态的推荐顺序? 恩智浦 NFC Tools / TagWriter 是否能移除 NTAG213 上的密码保护,还是需要自定义原始命令处理? 身份验证后是否需要完全RESET(RF 会话RESET/电源重启)才能修改配置页面? 如果恩智浦团队能提供任何指导或说明,将非常有帮助。 感谢您的支持。 致以最诚挚的问候, Niranjan Re: Unable to remove write protection on NTAG213 after enabling password protection (AUTH0/ACCESS) 我使用 RFIDDiscover。它可以更改配置页面中的设置,取消保护。
記事全体を表示