Multi Source Translation Content

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Multi Source Translation Content

讨论

排序依据:
NTAG424DNA書き込み耐久性 ハイ 特定のNFCタグへの書き込みアクションについて質問します Google はこちらです: 1. タグ上で直接カウンターを更新する   NTAG 213、215、216 などの多くの NFC チップには、タグがスキャンされるたびに増加するように設定できるカウンターが組み込まれています。 この機能を備えたタグがスキャンされると、チップ自体がメモリに保存されているカウンター値を更新します。この更新プロセスは書き込みアクションです。 このカウンターは、たとえば URL の末尾に追加してスキャンごとに一意のリンクを返すなど、NDEF メッセージに組み込むことができます。  このアクション (カウント) は、各チップの「書き込みサイクル」制限にカウントされますか? NTAG 424 DNAの全体的な寿命に関して言えば、有効な読み取りカウンタのないチップは、カウンタ付きのチップよりも技術的に長く持続する。 他のすべての要因が等しい場合。  理由は次のとおりです。 耐久性を書く: 読み取りカウンタが増加するたびに、チップのメモリへの書き込み操作と見なされます。 書き込みサイクルの制限: NTAG 424 DNA を含むすべての NFC チップには、故障するまでに耐えられる書き込みサイクルの数が限られています。NTAG 424 DNA の場合、最低 200,000 回の書き込みサイクルが保証されています。 書き込み回数の削減、寿命の延長: チップにカウンタが搭載されていない場合、またはカウンタ機能が無効になっている場合、タグが読み取られるたびに自動書き込み操作は行われません。これにより、チップの書き込み耐久性が実質的に維持され、他の書き込み操作の頻度に応じて、理論的には最大書き込みサイクルの制限を超えて、より長く動作できるようになります。  これは本当ですか、これに関するドキュメントはありますか? 私たちは、大勢のユーザーが利用(マーケティング)できる NTAG アプリケーションを構築しており、ソリューションのチップをいつ交換する必要があるかを知る必要があります。 何かご指摘がありましたら、よろしくお願いいたします。 Re: NTAG424DNA WRITE ENDURANCE はい、そのとおりです。 Re: NTAG424DNA WRITE ENDURANCE SO、異なる場所でのカウンターの更新はタグの書き込みサイクルに影響を与えず、200,000 カウントでタグを交換する必要はありません。それは正しいですか? Re: NTAG424DNA WRITE ENDURANCE NFC カウンターには、物理的に異なる EEPROM メモリ位置から値を保存および読み取るメカニズムがあります。この方法では、3 バイト カウンターの最大値に到達CAN、EEPROM セルが消耗することはありません。
查看全文
Ceedlingを使ったユニットテスト こんにちは、 Ceedling を使用して、S32146 テスト プロジェクト (この CASE、プロジェクトは hello_world の例) のモジュールをテストしようとしています。s32 の製品コードには、S32 Development Studio 内で内部的に構成された追加のヘッダー ファイルが必要なため、ceedling プロジェクトの実行に行き詰まっています。そのコードを使用してシーディング プロジェクトを実行しようとするときに、この構成をどのように考慮すればよいですか。ありがとう! Re: Unit Testing With Ceedling @ajain33555ついに S32DS プロジェクトで Ceedling をセットアップできましたか? Re: Unit Testing With Ceedling 申し訳ありませんが、S32DS ではサポートされていないため、これについてはまったく経験がありません。 よろしくお願いいたします。 ルーカス Re: Unit Testing With Ceedling こんにちは、ルーカス。 ceedling がコマンドラインから S32 コードをテスト CAN かどうかご存知ですか?ありがとう! 最高、 アーラッシュ Re: Unit Testing With Ceedling S32DS は正式にはシーディングプラグインをサポートしていないため、このマターに関してはお手伝いできません。 敬具、 ルーカス Re: Unit Testing With Ceedling やあ、ルーカス 本当に助かりました。S32DS 用の ceedling プラグインを構成する方法、または s32 コードを使用して ceedling プロジェクトを構成し、コマンド ラインから実行する方法も知っていますか?ありがとう! 最高、 アーラッシュ・ジェイン Re: Unit Testing With Ceedling こんにちは@ajain33555 私の理解が正しければ、すべての RTD または SDKs ファイルをリンクするだけでなく、プロジェクトに直接含める必要があるのですよね? もしSOであれば、プロセッサ Expert を搭載した S32DS の古いバージョンをお持ちの場合は、次の手順に従ってください。 https://community.nxp.com/t5/S32-Design-Studio-Knowledge-Base/HOWTO-Use-SDK-based-example-code-as-standalone-usable-for-GIT/ta-p/1108204 S32DS 3.4 以上をお持ちの場合は、次のように設定CANます。 よろしくお願いいたします。 ルーカス
查看全文
iMX8プロセッサの内部保護ダイオードに関するクエリ NXPチームの皆様、こんにちは。 iMX8 Dual X plus プロセッサ (IMX8DX5A) の GPIO ピンに内部保護ダイオードまたはクランプ ダイオード (ESD 保護用) があるかどうかを教えてください。 よろしくお願いいたします。 アビナッシュ i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Re: Query on Internal protection diode in iMX8 processors そのトピックに関して何か新しい情報はありますか? Re: Query on Internal protection diode in iMX8 processors こんにちは、イゴールさん。 この情報に感謝します。 ありがとうございます アビナッシュ Re: Query on Internal protection diode in iMX8 processors こんにちは、アビナッシュ これらのパラメータは特性評価されていない(工場で測定されていない)SO、チャンスはありません。 どこからも入手できません。 よろしくお願いします イゴール Re: Query on Internal protection diode in iMX8 processors こんにちは、イゴールさん。 迅速な入力に再度感謝いたします。 ところで、現在の詳細を入手することは可能でしょうか? 外部クランプダイオードを使用する必要があるかどうかを判断する必要があるためです。 ありがとうございます アビナッシュ Re: Query on Internal protection diode in iMX8 processors こんにちは、アビナッシュ 申し訳ありませんが、そのような注入電流は指定されていません。 よろしくお願いします イゴール Re: Query on Internal protection diode in iMX8 processors こんにちは、イゴールさん ご確認いただきありがとうございます。 これらの GPIO ピンのクランプ ダイオードの注入電流仕様を教えてください。 ありがとうございます アビナッシュ Re: Query on Internal protection diode in iMX8 processors こんにちは、アビナッシュ はい、GPIO ピンにはクランプ ダイオードがあります。 よろしくお願いします イゴール
查看全文
NTAG424DNA WRITE ENDURANCE Hi I'm asking about write action on certain NFC tags Here's Google: 1. Updating a counter directly on the tag   Many NFC chips, like the NTAG 213, 215, or 216, have a built-in counter that can be configured to increment every time the tag is scanned. When a tag with this feature is scanned, the chip itself updates the counter value stored in its memory. This update process is a write action. This counter can be incorporated into the NDEF message, for example, by adding it to the end of a URL so that each scan returns a unique link.  Does this action (counting) gets counted against the "write cycle" limit of each chip? In terms of the NTAG 424 DNA's overall lifespan, a chip without an enabled read counter would technically last longer than one with a counter, if all other factors are equal.  Here's why: Write endurance: Every time the read counter is incremented, it's considered a write operation to the chip's memory. Limited write cycles: All NFC chips, including the NTAG 424 DNA, have a finite number of write cycles they can endure before potentially failing. For the NTAG 424 DNA, it's rated at a minimum of 200,000 write cycles. Reduced writes, prolonged life: If a chip does not have a counter, or the counter feature is disabled, there are no automatic write operations occurring each time the tag is read. This would essentially conserve the chip's write endurance, allowing it to function for longer, theoretically up to its maximum write cycle limit and beyond, depending on the frequency of other write operations.  Is this true, are there documentations on this?  We are building application of Ntag for mass audience to tap (marketing) and need to know when we need to replace the chips for our solutions. Thank you for any pointers. Re: NTAG424DNA WRITE ENDURANCE Correct. Re: NTAG424DNA WRITE ENDURANCE So counter update on different location does not affect the tag's write cycle, thus the tag does not need to be replaced at 200,000 count. Is that correct? Re: NTAG424DNA WRITE ENDURANCE NFC Counter has mechanism, which stores & reads value from physically different EEPROM memory locations. This way, max value of 3 Byte counter can be reached and will not wear-out EEPROM cell.
查看全文
ntag424dna 写入耐久性 HI 我在问某些 NFC 标签上的写入操作 这里是谷歌: 1.直接更新标签上的计数器   许多 NFC 芯片,例如 NTAG 213、215 或 216,都有内置计数器,可以将其配置为每次扫描标签时递增。 当扫描具有此功能的标签时,芯片本身会更新存储在其存储器中的计数器值。该更新过程是一个写入操作。 该计数器可纳入 NDEF 信息,例如,将其添加到 URL 的末尾,这样每次扫描都会返回一个唯一的链接。 这种操作(计数)是否会计入每个芯片的"写入周期" 限制? 就 NTAG 424 DNA 的整体寿命而言,如果其他因素相同,没有启用读取计数器的芯片在技术上比有计数器的芯片寿命更长, 。 原因就在这里: 写耐久性: 每次读计数器递增,都被视为对芯片内存的一次写操作。 有限的写入周期: 包括 NTAG 424 DNA 在内的所有 NFC 芯片在可能发生故障之前所能承受的写入周期都是有限的。NTAG 424 DNA 的额定写入次数最少为 200,000 次。 减少写入次数,延长使用寿命: 如果芯片没有计数器,或计数器功能被禁用,则每次读取标签时都不会发生自动写入操作。这将从根本上保护芯片的写入耐久性,使其能够工作更长时间,理论上可达到最大写入周期限制,甚至更长,这取决于其他写入操作的频率。 这是真的吗?有相关文件吗? 我们正在开发Ntag的应用程序,以供大众TAP(营销),并需要知道何时需要为我们的解决方案更换芯片。 感谢您的指点。 Re: NTAG424DNA WRITE ENDURANCE 是的。 Re: NTAG424DNA WRITE ENDURANCE 因此,不同位置上的计数器更新不会影响标签的写入周期,从而无需在 200,000 计数时更换标签。是这样吗? Re: NTAG424DNA WRITE ENDURANCE NFC 计数器有一个机制,可存储& 从物理上不同的 EEPROM 存储位置读取的值。这样,可以达到 3 字节计数器的最大值,并且不会损坏 EEPROM 单元。
查看全文
周期中断定时器 我正在使用时钟频率为 40MHz 的 PIT,而我正在使用那个 PIT 来发送其他函数 abc () 的触发信号,它必须在 400kHz 时触发,但是当我尝试将频率设置为 80kHz 以上时,PIT 的回调没有收到触发信号,最终函数 abc () 没有收到触发信号。 我的问题是,那是有极限的,我们使用 PIT 不能超过 80kHz 左右,还是我需要激活微控制器中的某些东西才能超过 80khz 的触发信号或其他东西? 微控制器:- S32K344 T-172 谢谢! Re: Periodic Interrupt Timer 您好, 我想现在我不会再提供任何意见了。你有两个外设,都会产生中断。在每个中断回调中,都会执行一些计算。我怀疑是中断优先级、延迟和持续时间导致了您所观察到的问题。 例如,尝试使用引脚拨动测量每个中断的持续时间。此外,还要检查中断的优先级。如果两者设置为相同级别,请记住 eMIOS 的 IRQ 编号低于 BCTU,因此优先级更高。再加上频率较高,ISR 执行时间可能较长,这可能导致 BCTU 中断延迟甚至错过。 BR, Petr Re: Periodic Interrupt Timer Namste@PetrS 是的,我明白你的意思。 但是 好吧,让我再试一次。 我正在使用Emios_Gpt触发信号算法中的一个计算,而BCTU用于触发信号同一算法中的另一项计算。 现在,当我想以 20kHz 的频率 (50uSec) 运行 BCTU 回调触发信号时,我能做到,但是当我以 114kHz 或更低的频率触发 Emios_Gpt 时。 但是当我尝试以更高的频率触发 Emios_Gpt 的回调时,BCTU 接收触发信号的频率较低。 当我将 Emios_Gpt 的频率提高到 80kHz 以上时,PIT 也发生了同样的情况。 我不明白的原因是,如果它们是单独的外设,为什么会相互干扰。 谢谢  petrS Re: Periodic Interrupt Timer 您好, 我不太清楚您的应用程序设计。如何使用外围设备,在何处使用软件或硬件触发信号。BCTU 可以由 emiOS 中的硬件触发,因此不应丢失触发信号。PIT 没有输入触发信号,可以由 SW 启动/停止。因此,如果您使用 SW 启动,那么 SW 延迟也同样适用。 BR, Petr Re: Periodic Interrupt Timer Namste @PetrS 感谢您的答复和建议。 在这里,我尝试使用Emios_Gpt来解决这个问题,我可以在其中以更高的频率触发信号abc()函数。 但是我遇到了一个新问题:-当我以更高的频率触发 Emios_Gpt 模块时,可用的 BCTU 和 PIT 模块没有收到触发信号。 但当 EMIOS_Gpt 频率较低时,BCTU 和 PIT 都能正常工作。 这里的 BCTU 和 PIT 使用了 EMIOS_0。 EMIOS_1 已用于 EMIOS_Gpt 模块。 在这里,我更改了优先级,但仍然没有效果。 有没有什么办法可以让我把它短路? Re: Periodic Interrupt Timer 您好, 看来这可能是由于 CPU 或中断处理的限制造成的,而不是 PIT 本身。在高频情况下,CPU 可能跟不上中断速率。 频率为 80 kHz 时,中断周期为 12.5μs. 这样 CPU 就有更多时间处理中断。在 400 kHz(2.5 µs)的频率下,CPU 可能会不堪重负,尤其是在 ISR 没有优化的情况下, 。 以下是一些建议: - 优化 ISR(保持简短)。 -如果可能,使用硬件触发信号(如 DMA 或计时器输出)来实现功能。 - 检查中断优先级。 - 尝试为项目设置更高的代码优化级别 BR, Petr
查看全文
周期割込みタイマ 私はクロック周波数が 40MHz の PIT を使用しており、その PIT は 400kHz でトリガーを取得する必要がある他の関数 abc() をトリガーするために使用しています。ただし、周波数を 80kHz 以上に設定しようとすると、PIT のコールバックがトリガーを受信せず、最終的に関数 abc() がトリガーを受信しません。 私の質問は、PIT では 80kHz を超えることができないという制限があるのでしょうか、それとも 80kHz を超えるトリガー周波数にするにはマイクロコントローラで何かをアクティブ化する必要があるのでしょうか、あるいは何か他のものがあるのでしょうか。 マイクロコントローラ:- S32K344 T-172 よろしくお願いします。 Re: Periodic Interrupt Timer こんにちは、 現時点ではこれ以上の意見は述べないつもりです。2 つのペリフェラルがあり、どちらも割り込みを生成しています。各割り込みコールバック内で、いくつかの計算を実行します。割り込み優先度、レイテンシ、および継続時間が、観察されている問題に影響していると思われます。 たとえば、ピンのトグルを使用して各割り込みの持続時間を測定してみてください。また、割り込みの優先順位も確認してください。両方が同じレベルに設定されている場合、eMIOS の IRQ 番号は BCTU よりも低く、優先度が高くなることに注意してください。より高い周波数と、潜在的に長い ISR 実行時間の組み合わせにより、BCTU 割り込みが遅延したり、見逃されたりする可能性があります。 BR、ペトル Re: Periodic Interrupt Timer ナムステ@PetrS はい、あなたの言いたいことは理解しました。 対照的に わかりました。もう一度試してみます。 私はアルゴリズム内の 1 つの計算をトリガーするために Emios_Gpt を使用しており、同じアルゴリズム内の別の計算をトリガーするために BCTU を使用しています。 ここで、BCTU コールバック トリガーを 20kHz 周波数 (50uSec) で実行したいのですが、これは可能ですが、Emios_Gpt を 114kHz 以下でトリガーしているときは実行できません。 しかし、Emios_Gpt のコールバックをより高い頻度でトリガーしようとすると、BCTU はより低い頻度でトリガーを受信します。 Emios_Gpt の周波数を 80kHz 以上に上げると、PIT でも同じことが起こります。 理由:これらが個別のペリフェラルであるのに、なぜ互いに干渉し合うのか理解できません。 よろしくお願いします。 ペトルS Re: Periodic Interrupt Timer こんにちは、 アプリケーションのデザインについてはよくわかりません。ペリフェラルの使用方法、SW または HW トリガーが利用される場所。BCTU は eMIOS からの HW によってトリガーされる可能性があるため、トリガーが失われることはありません。PIT には入力トリガーがなく、SW によって開始/停止できます。SO、SW 開始を行う場合は、SW レイテンシにも同じことが適用されます。 BR、ペトル Re: Periodic Interrupt Timer ナムステ@PetrS ご返信とご提案ありがとうございます。 ここでは、 Emios_Gpt を使用してこの問題を解決しようとしました。これにより、abc() 関数をより高い頻度でトリガーできるようになりました。 しかし、私は次の 1 つの新たな問題に遭遇しています: - Emios_Gpt モジュールを高頻度でトリガーすると、使用可能な BCTU モジュールと PIT モジュールがトリガーを受信しません。 しかし、EMIOS_Gpt の周波数が低いときは、BCTU と PIT は両方とも正常に動作します。 ここでは、BCTU と PIT に EMIOS_0 が使用されています。 EMIOS_1 は EMIOS_Gpt モジュールに使用されています。 ここで優先順位を変更しましたが、まだ効果はありません。 それをショートさせる何か方法はCANでしょうか? Re: Periodic Interrupt Timer こんにちは、 これはおそらく PIT 自体ではなく、CPU または割り込み処理の制限。周波数が高い場合、CPU が割り込みレートに追いつけない可能性があります。80 kHz では割り込み周期は12.5 μ s です。これにより、CPU が割り込みを処理する時間が長くなります。400kHz(2.5µs)では、CPUは 特に ISR が最適化されていない場合は、圧倒されてしまいます。 以下にいくつかの提案を示します。 - ISR を最適化します (短く保ちます)。 - 可能であれば、関数にハードウェア トリガー (DMA やタイマー出力など) を使用します。 - 割り込み優先度を確認します。 - プロジェクトのコード最適化レベルを高く設定する BR、ペトル
查看全文
S32G3 : 如何启用 SIUL2_0 的中断 (MSCR0 - MSCR101) 你好,每当 GPIO 有高脉冲时,我 能否为地址为 4009C278 的 GPIO 配置中断, 与参考手册中一样,它被称为 " SIUL2_0 没有中断或 DMA 请求 " Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) 嗨,加纳帕蒂 感谢您的回复。 某些焊盘可用于多路复用。PB_05 与 SIUL2_0 类似,但可以重复使用于 eirq,2 的 SIUL2_1。如下图所示。 1.在 S32DS IDE 中搜索 EIRQ,可以找到用于 PB_05 的 SIUL2_0 的 eirq 2。 2.可以设置 IRQ 边缘模式。 3.另外,PB_05 的信息可在 IOMUX 的附件文件中找到。 希望能帮到你。 BR 乔伊 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) 嗨,乔伊, ,那么我是否可以认为不能为 SUIL2_0 配置外部中断,特别是 MSCR0 -MSCR101 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) 嗨,加纳帕蒂 感谢您提供的信息。 您可以参阅 16.5.4 外部中断中的 RMS32G3.pdf,为 S32G3 设置外部中断。 此外,SIUL2_0 没有中断或 DMA 请求,这在手册中已有说明。 BR 乔伊 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) 嗨,Joey_z 是的,需要将 GPIO 配置为中断功能 ,我将使用 M-核,引脚信息如下 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) 嗨,加纳帕蒂 您能为我们提供更多信息吗? 您想将 GPIO 配置为具有外部中断功能吗?您想用哪个针脚?您使用的是 M 核心还是 A 核心? BR 乔伊
查看全文
S32G3 : SIUL2_0 (MSCR0 - MSCR101) の割り込みを有効にする方法 こんにちは、 GPIOにHighパルスがあるたびに、アドレス4009C278のGPIOに割り込みを設定することはできますか? リファレンスマニュアルには「 SIUL2_0には割り込みやDMA要求はありません」と記載されています。 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) こんにちは、ガナパティ ご返信よろしくお願いします。 一部のパッドは多重化に使用できます。PB_05 は SIUL2_0 と同じですが、eirq,2 の SIUL2_1 に再利用できます。下図の通りです。 1. S32DS IDE で EIRQ を検索すると、PB_05 の SIUL2_0 に使用される eirq 2 が見つかります。 2. IRQ エッジ モードを設定できます。 3. また、PB_05 の情報は IOMUX の添付ファイルにCAN見つけることができます。 お役に立てれば幸いです。 BR ジョーイ Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) こんにちは、ジョーイ。 SUIL2_0、特にMSCR0 -MSCR101では外部割り込みを設定できないとSO考えられます。 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) こんにちは、ガナパティ 情報をいただきありがとうございます。 S32G3 の外部割り込みを設定するには、RMS32G3.pdf の 16.5.4 外部割り込みを参照してください。 さらに、SIUL2_0 には割り込みや DMA 要求がないことがマニュアルに記載されています。 BR ジョーイ Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) こんにちは、Joey_z はい、GPIOを割り込み機能として設定する必要があります Mコアを使用する場合、ピン情報は以下のようにします。 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) こんにちは、ガナパティ さらに詳しい情報を教えていただけますか? GPIO を外部割り込み機能を持つように構成しますか?どのピンを使用しますか?MコアとAコアを使用していますか? BR ジョーイ
查看全文
带 iMX8M Plus 的 ADV7282-M 您好, 我在 i.MX8M Plus 上使用的是 kernel-6.6.52-2.2.0 映像。我已经配置了驱动程序和设备树。通过一个模块,我得到了输出结果,不过是另一种格式。 但是,当在不同的i.MX8M Plus模块上使用相同的驱动程序和设备树时,它不起作用。问题出在哪里? 当我尝试使用 GStreamer 捕获视频帧时,它会停止显示以下消息: 新时钟:GstSystemClock 此后不会再显示错误。到此为止,它的行为与工作模块相同,但不显示视频。 这个问题已经困扰我一个星期了。 请帮助查明可能导致该问题的原因。 , Kamalesh。 Re: ADV7282-M with iMX8M Plus 嗨, 感谢您的支持。 我已经解决了这个问题。现在我可以通过 adv7282-m 接收视频流了。 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 您好, ,是否有任何更新来确定问题? 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 你好, ,我正在使用 uuu 工具和 uuu.auto 脚本闪存图像。脚本如下。 uuu.auto uu_version 1.2.39 # 此命令将在 i.MX6/7 i.mx8MM、i.mx8MQ SDP 时运行:boot-f imx-boot-axon-imx8mp-sd.bin-flash_evk # 此命令将在 ROM 支持直播模式时运行 # i.mx8QXP,i.mx8QM SDPS:boot-f imx-boot-axon-imx8mp-imx8mp-sd.bin-flash_evk # 这些命令将在使用 SPL 时运行,如果不推荐使用 spl # SDPU,则将跳过这些命令。 请使用 SDPV 代替 SDPU # {SDPU:延迟 1000 S DPU:write-f imx-boot-axon-imx8mp- sd.bin-flash_evk-offset 0x57c00 SDPU:跳转} # 这些命令将在使用 SPL 时运行,如果没有 spl 则会被跳过 # if(SPL 支持 SDPV) # {SDPV:延迟 1000 SDPV:写入-f imx-boot-axon-imx8mp-sd.bin-flash_evk-skipspl SDPV:jump #} FB:ucmd setenv fastboot_dev mmc FB:ucmd setenv setenv mmcdev ${emmc_dev} FB:ucmd mmc dev ${emmc_dev} FB:flash-raw2sparse 所有 imx-image-full-axon-imx8mp.rootfs-20250611051821.wic FB:闪存引导加载程序 imx-boot-axon-imx8mp-sd.bin-flash_evk FB:ucmd 如果环境存在 emmc_ack;那么;否则 setenv emmc_ack 0;fi:ucmd mmc partconf ${emmc_dev} ${emmc_ack} 1 0 FB:完成我把这个文件放在 tmp/deploy/images/axon-images/axon-imx 8mp/ 下。 部件号:- MIMX8ML8CVNKZAB Regards, Kamalesh Re: ADV7282-M with iMX8M Plus 你好@kamalesh 你能分享一下你用来将图像加载到板的步骤/方法吗? 然后我就可以在我身边试一试,确认一下。 顺祝商祺! 萨拉斯 Re: ADV7282-M with iMX8M Plus 嗨,Manuel, 其实这两个模块的零件编号是一样的,它们的原理图也是一样的。 请回答下面的问题。 如果有其他软件引导程序或其他软件文件覆盖了我新上传的映像。有没有可能? 注:- 我检查了探针,这两个模块的 Mipi 信号相同。 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 你好 能否请您尝试联系您获得模块的供应商? 如果可能,请从两个模块"获取原理图,看看是否真的是同一个" 。 另外,检查模块中处理器(i.MX8MP)的部件号是否相同。 顺祝商祺! 萨拉斯 Re: ADV7282-M with iMX8M Plus 您好, ,有什么步骤或信息可以分享吗? , Kamalesh。 Re: ADV7282-M with iMX8M Plus 你好, ,有什么办法可以找出这里的问题吗? 这里是否有信息被覆盖? 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 您好, 很抱歉这么晚才回复您。 实际上,我是使用 UUU 闪存工具和 UUU 闪存脚本将相同的映像闪存到所有模块上的。 两个相同模块之间的设备树有何不同? 是否有可能有另一台设备树覆盖了我映像中的设备树?怎么会这样? 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 你好@kamalesh 看来这是设备树问题。 请提供两个模块的设备树。 从 clk_summary 的日志中,我可以看到 I2C1 的差异(如果 MIPI 连接到了 I2C1)。 顺祝商祺! 萨拉斯 Re: ADV7282-M with iMX8M Plus 您好, 是否有任何更新? 请告诉我任何解决问题的建议。 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 你好, 更新:- 事实上,我们已经对这个工作和非工作模块进行了 I2C 转储。 结果:- 在工作模块中注册正确。但每次重启后,非工作模块的寄存器都会发生变化,无法处于稳定状态。 这些模块仅为同一系列。为什么会出现这种沟通不畅的情况? 请帮我解决这个问题。 谢谢。 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 你好,Manuel, 更新, 我已获取工作和非工作模块的 clk_summary 文件详细信息。请您审查并提出意见,以解决问题。 请在驱动器中查看下面的文件。 https://drive.google.com/drive/folders/17sE6Zr-y0daN3xQ-vqKleOAQ_sKwBgmj?usp=sharing 谢谢。 Re: ADV7282-M with iMX8M Plus 注意:我们有 10 个载板。该工作模块可在所有 10 个板上运行,没有任何缺失。其他模块不起作用。 问候, kamalesh Re: ADV7282-M with iMX8M Plus 你好, ,请详细说明如何使用 i2c dump 检查 mipi 时钟信号? 这对调试问题是否有帮助? Re: ADV7282-M with iMX8M Plus 你好@kamalesh 从日志来看,我认为是硬件问题。 能否用示波器检查一下 CLK 信号? 另外,请尝试对 MIPI 设备执行 i2cdump-y,看看一切是否正常。 顺祝商祺! 萨拉斯 Re: ADV7282-M with iMX8M Plus 您好, ,请提供最新信息或诊断步骤。 , Kamalesh。 Re: ADV7282-M with iMX8M Plus 你好, 更新:- 工作模块和非工作模块都显示相同的内核信息。我在下面分享了内核日志。请告知我们。 [230.972349] 已输入枚举总线代码 [231.008440] isi-捕获 32e02000.isi: cap_device:向 mxc-mipi-csi2.1 请求格式:code=0x200f,720x576 [ 231.008465] isi-捕获 32e02000.isi: cap_device:收到来自 mxc-mipi-csi2.1 的格式:code=0x2006、720x576 [ 231.013476] 绕过 csc [ 231.013483] 输入 fmt YUV4 [ 231.013487] 输出 fmt YUYV [ 231.013496] isi-捕获 32e02000.isi:cap_device: ISI 已配置:src fmt=yuv32 (X-Y-U-V) 720x576,dst fmt=YUYV-16 720x576 [ 231.013507] isi-捕获 32e02000.isi:cap_device: 缓冲区已排队:index=0,size=829440 字节 [ 231.013513] isi-捕获 32e02000.isi:cap_device:缓冲区已排队:index=1,size=829440 字节 [ 231.013518] isi-捕获 32e02000.isi: cap_device:缓冲区已排队:index=2,size=829440 字节 [ 231.013526] isi-捕获 32e02000.isi:cap_device: 缓冲区已排队:index=3,size=829440 字节 [ 231.013531] isi-捕获 32e02000.isi:cap_device: 缓冲区已排队:index=4,size=829440 字节 [ 231.013536] isi-捕获 32e02000.isi:cap_device:缓冲区已排队:index=5,size=829440 字节 [ 231.013542] isi-捕获 32e02000.isi:cap_device: 开始直播,缓冲区计数 = 6 [231.014785] isi-捕获 32e02000.isi: cap_device:ISI 直播设置已完成 [231.014804] isi-捕获 32e02000.isi: cap_device:在 adv7282 4-0021 [231.014811] 上调用 s_stream (1) isi-捕获 32e02000.isi: cap_device:在 mxc-mipi-csi2.1 上调用 s_stream(1) [ 231.029721] isi-捕获 32e02000.isi:cap_device: 在 mxc_isi.1 上调用 s_stream(1) [ 232.574681] isi-捕获 32e02000.isi:cap_device: 在 adv7282 4-0021 [232.574703] 上调用 s_stream (0) isi-捕获 32e02000.isi: cap_device:在 mxc-mipi-csi2.1 上调用 s_stream(0) [ 232.574730] isi-捕获 32e02000.isi:cap_device:在 mxc_isi.1 上调用 s_stream(0) 问候, Kamalesh Re: ADV7282-M with iMX8M Plus 你好、 我们从 technexion 购买了 I.MX 8M PLUS 模块。 问题出在哪里? 谢谢! 谢谢、 卡姆莱什 Re: ADV7282-M with iMX8M Plus 你好@kamalesh 希望你一切都好。 您使用的是 i.MX8MP EVK 吗?或者,请解释一下"不同的 i.MX8M Plus 模块" 的含义。也许是其他供应商的 SOM? 顺祝商祺! 萨拉斯
查看全文
ADV7282-M with iMX8M Plus Hi, I am using the kernel-6.6.52-2.2.0 image on the i.MX8M Plus. I have configured both the driver and the device tree. With one module, I was able to get the output, although in an alternate format. However, when using the same driver and device tree on a different i.MX8M Plus module, it does not work. What could be the issue? When I try to capture a video frame using GStreamer, it stops at the message: New clock: GstSystemClock There are no errors shown after this point. It behaves the same way as the working module up to that point, but no video is displayed. I’ve been stuck with this issue for the past week. Could you please help identify what might be causing the problem? Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, Thank you for the support. I have resolved the issue. Now i can receive the video stream over adv7282-m. Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, Any updates to identify the issue? Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, I am flashing the image using uuu tool with uuu.auto script. Script given below. uuu.auto uuu_version 1.2.39 # This command will be run when i.MX6/7 i.MX8MM, i.MX8MQ SDP: boot -f imx-boot-axon-imx8mp-sd.bin-flash_evk # This command will be run when ROM support stream mode # i.MX8QXP, i.MX8QM SDPS: boot -f imx-boot-axon-imx8mp-sd.bin-flash_evk # These commands will be run when use SPL and will be skipped if no spl # SDPU will be deprecated. please use SDPV instead of SDPU # { SDPU: delay 1000 SDPU: write -f imx-boot-axon-imx8mp-sd.bin-flash_evk -offset 0x57c00 SDPU: jump # } # These commands will be run when use SPL and will be skipped if no spl # if (SPL support SDPV) # { SDPV: delay 1000 SDPV: write -f imx-boot-axon-imx8mp-sd.bin-flash_evk -skipspl SDPV: jump # } FB: ucmd setenv fastboot_dev mmc FB: ucmd setenv mmcdev ${emmc_dev} FB: ucmd mmc dev ${emmc_dev} FB: flash -raw2sparse all imx-image-full-axon-imx8mp.rootfs-20250611051821.wic FB: flash bootloader imx-boot-axon-imx8mp-sd.bin-flash_evk FB: ucmd if env exists emmc_ack; then ; else setenv emmc_ack 0; fi; FB: ucmd mmc partconf ${emmc_dev} ${emmc_ack} 1 0 FB: done I placed this file under tmp/deploy/images/axon-imx8mp/. Part No:- MIMX8ML8CVNKZAB Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hello @kamalesh  Could you please share the steps/method you used to load your images to the boards? Then I can try by my side and confirm. Best regards, Salas. Re: ADV7282-M with iMX8M Plus Hi Manuel, Actually Both Modules part numbers are same and they are having the same schematics. Please answer to this below question. If any other software bootloader or other software files are overwriting my new uploading image. Is there any possibility for these? Note:- I have checked the probe, getting Mipi signaling same in these two modules. Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hello,  Could you please try to contact to the vendor where you get the modules? If possible, get the schematics from both modules "to see if those are really the same". Also, check if the part number of the processor (i.MX8MP) is the same in the modules. Best regards, Salas. Re: ADV7282-M with iMX8M Plus Hi, Is there any steps or informations to share? Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, Is there are any way to find out the issue here? Any overwritten of information here? Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, Apologies for the late reply. Actually, I am flashing the same image to all modules using the UUU flashing tool along with a UUU flashing script. How can the device tree differ between two identical modules? Is it possible that there is another device tree present which is overwriting the one in my image? How could this be happening? Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hello @kamalesh  It appears it is a device tree issue. Please provide the device tree for both modules. From logs for clk_summary I could see the I2C1 is the difference (if MIPI is connected there).  Best regards, Salas. Re: ADV7282-M with iMX8M Plus Hi, Is there any update for us? Please tell me any suggestion to resolve the issue. Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, UPDATE:- Actually we have done the I2C dump on this working as well as non working module. Result:- register are proper in working module. But every reboot the register of non working module changing and it is not in a stable state. These modules are same series only. Why this miscommunication happening? Please help me to resolve this issue. Thanks. Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi Manuel, Update, I have taken the clk_summary file details of working and non-working module. Could you please review and give comments to resolve the issue. Please see this below files in drive. https://drive.google.com/drive/folders/17sE6Zr-y0daN3xQ-vqKleOAQ_sKwBgmj?usp=sharing Thank you. Re: ADV7282-M with iMX8M Plus Note: We have 10 carrier boards. That working module is worked in all the 10 boards without any missing. Other modules are not working. Regards, kamalesh Re: ADV7282-M with iMX8M Plus Hi, Could you please elaborate how to check the mipi clock signals using i2c dump? It will be helpful to debug the issue? Re: ADV7282-M with iMX8M Plus Hello @kamalesh  From logs, it make me think there is a hardware issue. Could you please check with scope that the CLK signal? Also, please try to do a i2cdump -y to the MIPI device and see if everything is working well. Best regards, Salas. Re: ADV7282-M with iMX8M Plus Hi, Could you please give any update or diagnosing steps to do? Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi, Update:- Both the working and non-working modules are showing the same kernel messages. I’ve shared the kernel log below. Please advise us. [ 230.972349] Entered enum bus code [ 231.008440] isi-capture 32e02000.isi:cap_device: Requesting format from mxc-mipi-csi2.1: code=0x200f, 720x576 [ 231.008465] isi-capture 32e02000.isi:cap_device: Received format from mxc-mipi-csi2.1: code=0x2006, 720x576 [ 231.013476] bypass csc [ 231.013483] input fmt YUV4 [ 231.013487] output fmt YUYV [ 231.013496] isi-capture 32e02000.isi:cap_device: ISI configured: src fmt=YUV32 (X-Y-U-V) 720x576, dst fmt=YUYV-16 720x576 [ 231.013507] isi-capture 32e02000.isi:cap_device: Buffer queued: index=0, size=829440 bytes [ 231.013513] isi-capture 32e02000.isi:cap_device: Buffer queued: index=1, size=829440 bytes [ 231.013518] isi-capture 32e02000.isi:cap_device: Buffer queued: index=2, size=829440 bytes [ 231.013526] isi-capture 32e02000.isi:cap_device: Buffer queued: index=3, size=829440 bytes [ 231.013531] isi-capture 32e02000.isi:cap_device: Buffer queued: index=4, size=829440 bytes [ 231.013536] isi-capture 32e02000.isi:cap_device: Buffer queued: index=5, size=829440 bytes [ 231.013542] isi-capture 32e02000.isi:cap_device: Starting streaming, buffer count=6 [ 231.014785] isi-capture 32e02000.isi:cap_device: ISI streaming setup complete [ 231.014804] isi-capture 32e02000.isi:cap_device: Calling s_stream(1) on adv7282 4-0021 [ 231.014811] isi-capture 32e02000.isi:cap_device: Calling s_stream(1) on mxc-mipi-csi2.1 [ 231.029721] isi-capture 32e02000.isi:cap_device: Calling s_stream(1) on mxc_isi.1 [ 232.574681] isi-capture 32e02000.isi:cap_device: Calling s_stream(0) on adv7282 4-0021 [ 232.574703] isi-capture 32e02000.isi:cap_device: Calling s_stream(0) on mxc-mipi-csi2.1 [ 232.574730] isi-capture 32e02000.isi:cap_device: Calling s_stream(0) on mxc_isi.1 Regards, Kamalesh Re: ADV7282-M with iMX8M Plus Hi,  We got I.MX 8M PLUS modules from technexion. What may be the issue?? Thank you. Regards,  Kamalesh Re: ADV7282-M with iMX8M Plus Hello @kamalesh  I hope you are doing very well. Are you using i.MX8MP EVK? Or, please, explain what do you refer with "different i.MX8M Plus module". Maybe a SOM from another vendor? Best regards, Salas.
查看全文
Periodic Interrupt Timer I am Using PIT  which has clock frequency of 40MHz and that PIT i am using for triggering some other function abc() which must get trigger at 400kHz, But when i am trying to set the frequency more than 80kHz the call back of PIT is not receiving the trigger and ultimately the function abc() is not receiving trigger. My question is this,  that is there limit that we can not go beyond around 80kHz with PIT or I need to activate something in the microcontroller for going beyond 80khz triggering frequency or something else? Microcontroller:- S32K344 T-172 Thank you. Re: Periodic Interrupt Timer Hi, I think I won’t provide any more input at this point. You have two peripherals, both generating interrupts. Within each interrupt callback, you perform some calculations. I suspect that interrupt priority, latency, and duration are contributing to the issues you're observing. Try measuring the duration of each interrupt using pin toggling, for example. Also, check the interrupt priorities. If both are set to the same level, keep in mind that eMIOS has a lower IRQ number than BCTU, which gives it a higher priority. Combined with its higher frequency and potentially longer ISR execution time, this could cause the BCTU interrupt to be delayed or even missed. BR, Petr  Re: Periodic Interrupt Timer Namste @PetrS  Yes I understood your point. But  Okay let me try it again. I am Using Emios_Gpt for triggering one calculation in my algorithm and BCTU is used for triggering another calculation in same algorithm. Now when I want to run the BCTU call back trigger at 20kHz frequency (50uSec) which I am able to do but when I am Triggering the Emios_Gpt back at 114kHz or Lesser. but when I am trying to Trigger the call back of Emios_Gpt at Higher frequency then the BCTU is receiving the trigger at lesser frequency. Same is happening with PIT when I am increasing the frequency of Emios_Gpt more than 80kHz.  Reason I am not able to understanding that when they are individual peripherals why they are interrupting one another. Thanks  petrS Re: Periodic Interrupt Timer Hi, not really sure of your application design. How peripherals are used, where SW or HW triggers are utilized. BCTU can be triggered by HW from eMIOS, so trigger should not be lost. PIT has no input triggers, can be started/stopped by SW. So if you do SW start then same applies for SW latency. BR, Petr Re: Periodic Interrupt Timer Namste @PetrS Thanks you for your reply and suggestions.  Here I tried to solve this problem by using Emios_Gpt , Where I am able to trigger the abc() function at higher frequency. But I am encountering one new problem that is:- When I am triggering Emios_Gpt module at higher frequency the Available BCTU and PIT modules are not receiving the triggers.  But When EMIOS_Gpt is at lower frequency that time BCTU and PIT Both are working fine.  Here EMIOS_0 has been used for BCTU and PIT. EMIOS_1  has been used for EMIOS_Gpt module. Here I Changed Priority but still there no effect of that.   Is there some way which I can follow and short it out? Re: Periodic Interrupt Timer Hi, seems this is likely due to CPU or interrupt handling limitations, not the PIT itself. At high frequencies, the CPU may not keep up with the interrupt rate.  At 80 kHz, the interrupt period is 12.5μs. This gives the CPU more time to handle the interrupt. At 400 kHz (2.5 µs), the CPU might be overwhelmed, especially if the ISR is not optimized. Here are some suggestions: - Optimize the ISR (keep it short). - Use hardware triggering (like DMA or timer output) for function, it this is possible. - Check interrupt priorities. - Try to set higher code optimization level for project  BR, Petr
查看全文
S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) Hi, Can i configure  interrupt for the GPIO with address 4009C278 whenever the GPIO has High pulse, As in the Reference manual it is mention as "SIUL2_0 has no interrupt or DMA requests" Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) hi,Ganapathi Thank you for your reply. Some pad can be used for multiplexing. The PB_05 is as the SIUL2_0, but it can be reuse for SIUL2_1 of eirq,2. It is as shown the following picture. 1. Search the EIRQ in the S32DS IDE, It can find the eirq 2 to be use for SIUL2_0 of PB_05. 2. There is can to set the IRQ Edge mode. 3.Also, the information of PB_05 can be find in the attachment file of IOMUX. Hope it can help you. BR Joey Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) Hi Joey, so can i consider that External Interrupt cannot be configured for the SUIL2_0 Especially from MSCR0 -MSCR101 Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) hi,Ganapathi Thank you for your information. You can refer to the RMS32G3.pdf of 16.5.4 External interrupts to set external interrupt for S32G3. In addition, The SIUL2_0 has no interrupt or DMA requests is descripted in the manual. BR Joey Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) Hi Joey_z Yes need to configure the GPIO as  Interrupt Function I will be using the Using the M-core, pin information as below Re: S32G3 : How Enable Interrupt for the SIUL2_0 (MSCR0 - MSCR101) hi,Ganapathi Could you share more information for us? Do you want to configure the GPIO to have an external interrupt function? Which pin do you want to use it? And are you using M core and A core? BR Joey
查看全文
ADV7282-MとiMX8M Plus こんにちは、 i.MX8M Plus で kernel-6.6.52-2.2.0 イメージを使用しています。ドライバとデバイス ツリーの両方を構成しました。1 つのモジュールを使用して、別の形式ではありますが、出力を取得できました。 ただし、異なる i.MX8M Plus モジュールで同じドライバとデバイス ツリーを使用すると、機能しません。何が問題なのでしょうか? GStreamer を使用してビデオ フレームをキャプチャしようとすると、次のメッセージで停止します。 新しい時計: GstSystemClock この時点以降はエラーは表示されません。動作はそれまでの動作モジュールと同じですが、ビデオは表示されません。 ここ一週間、この問題に悩まされています。 問題の原因を特定するのにご協力いただけますでしょうか? よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 サポートありがとうございます。 問題は解決しました。これで、adv7282-m 経由でビデオ ストリームを受信できるようになりました。 よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 問題を特定するための更新はありますか? よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 uuu.auto スクリプトを使用して uuu ツールを使用してイメージをフラッシュしています。スクリプトは以下に記載されています。 車載 uuu_バージョン 1.2.39 # このコマンドは、i.MX6/7、i.MX8MM、i.MX8MQの場合に実行されます。 SDP: ブート -f imx-boot-axon-imx8mp-sd.bin-flash_evk # このコマンドはROMがストリームモードをサポートしているときに実行されます # i.MX8QXP、i.MX8QM SDPS: ブート -f imx-boot-axon-imx8mp-sd.bin-flash_evk # これらのコマンドはSPLを使用するときに実行され、SPLがない場合はスキップされます # SDPU は廃止されます。SDPUの代わりにSDPVを使用してください # { SDPU: 遅延1000 SDPU: -f imx-boot-axon-imx8mp-sd.bin-flash_evk -offset 0x57c00 を書き込みます SDPU: ジャンプ # } # これらのコマンドはSPLを使用するときに実行され、SPLがない場合はスキップされます # if (SPL は SDPV をサポート) # { SDPV: 遅延1000 SDPV: -f imx-boot-axon-imx8mp-sd.bin-flash_evk -skipspl を書き込みます SDPV: ジャンプ # } FB: ucmd setenv fastboot_dev mmc FB: ucmd setenv mmcdev ${emmc_dev} FB: ucmd mmc dev ${emmc_dev} FB: flash -raw2sparse all imx-image-full-axon-imx8mp.rootfs-20250611051821.wic FB: フラッシュブートローダー imx-boot-axon-imx8mp-sd.bin-flash_evk FB: ucmd 環境が存在する場合は emmc_ack; then ; それ以外の場合は setenv emmc_ack 0; fi; FB: ucmd mmc パートコンファレンス${emmc_dev} ${emmc_ack} 1 0 FB: 完了 このファイルをtmp/deploy/images/axon-imx8mp/ の下に配置しました。 部品番号: MIMX8ML8CVNKZAB よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは@kamalesh ボードに画像を読み込む際に使用した手順や方法を共有していただけますか? そうすれば、私の側で試してCAN確認します。 よろしくお願いいたします。 サラス。 Re: ADV7282-M with iMX8M Plus こんにちは、マヌエルさん。 実際、両方のモジュールの部品番号は同じで、回路図も同じです。 以下の質問にお答えください。 他のソフトウェア ブートローダーまたは他のソフトウェア ファイルが新しいアップロード イメージを上書きしている場合。これらには可能性はあるでしょうか? 注: プローブをチェックしたところ、これら 2 つのモジュールで Mipi 信号が同じであることが確認されました。 よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 モジュールを入手したベンダーにお問い合わせいただけますか? 可能であれば、両方のモジュールから回路図を入手して、「それらが本当に同じであるかどうか」を確認してください。 また、プロセッサの部品番号 (i.MX8MP) がモジュール内で同じであるかどうかも確認してください。 よろしくお願いいたします。 サラス。 Re: ADV7282-M with iMX8M Plus こんにちは、 共有できる手順や情報はありますか? よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 ここで問題を見つける方法はありますか? ここで情報が上書きされていますか? よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 返信が遅くなり申し訳ありません。 実際、私は UUU フラッシュ ツールと UUU フラッシュ スクリプトを使用して、すべてのモジュールに同じイメージをフラッシュしています。 2 つの同一モジュール間でデバイス ツリーが異なるのはなぜですか? イメージ内のデバイス ツリーを上書きする別のデバイス ツリーが存在する可能性はありますか?どうしてこんなことが起こるのでしょうか? よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは@kamalesh デバイス ツリーの問題であるようです。 両方のモジュールのデバイス ツリーを提供してください。 clk_summary のログから、I2C1 が異なっていることがわかりました (MIPI がそこにコネクテッドされている場合は)。 よろしくお願いいたします。 サラス。 Re: ADV7282-M with iMX8M Plus こんにちは、 何かアップデートはありますか? 問題を解決するための提案があれば教えてください。 よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 アップデート:- 実際に、この動作中のモジュールと動作していないモジュールの I2C ダンプを実行しました。 結果: 動作モジュール内のレジスタは適切です。しかし、再起動するたびに動作していないモジュールのレジスタが変更され、安定した状態になりません。 これらのモジュールは同じシリーズのみです。なぜこのような誤解が起こるのでしょうか? この問題の解決にご協力ください。 ありがとう。 よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、マヌエルさん。 アップデート、 動作中のモジュールと動作していないモジュールの clk_summary ファイルの詳細を取得しました。問題を解決するために、確認してコメントをいただけませんか。 ドライブ内の以下のファイルを参照してください。 https://drive.google.com/drive/folders/17sE6Zr-y0daN3xQ-vqKleOAQ_sKwBgmj?usp=sharing ありがとう。 Re: ADV7282-M with iMX8M Plus 注: キャリア ボードは 10 個あります。その動作モジュールは、欠落することなく 10 個のボードすべてで動作します。他のモジュールは動作していません。 よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 i2c ダンプを使用して mipi クロック信号を確認する方法を詳しく説明していただけますか? 問題をデバッグするのに役立ちますか? Re: ADV7282-M with iMX8M Plus こんにちは@kamalesh ログから判断すると、ハードウェアに問題があると思われます。 CLK信号をスコープで確認していただけますか? また、MIPI デバイスに対して i2cdump -y を実行して、すべてが正常に動作しているかどうかを確認してください。 よろしくお願いいたします。 サラス。 Re: ADV7282-M with iMX8M Plus こんにちは、 更新や診断の手順を教えていただけますか? よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 アップデート:- 動作中のモジュールと動作していないモジュールの両方に同じカーネル メッセージが表示されます。以下にカーネルログを共有します。アドバイスをお願いします。 [ 230.972349] 列挙バスコードを入力しました [ 231.008440] isi-capture 32e02000.isi:cap_device:mxc-mipi-csi2.1 からのフォーマットを要求しています: コード = 0x200f、720x576 [ 231.008465] isi-capture 32e02000.isi:cap_device:mxc-mipi-csi2.1から受信したフォーマット: コード=0x2006、720x576 [ 231.013476] バイパスCSC [ 231.013483] 入力形式 YUV4 [ 231.013487] 出力形式 YUYV [ 231.013496] isi-capture 32e02000.isi:cap_device:ISI 構成: src fmt=YUV32 (XYUV) 720x576、dst fmt=YUYV-16 720x576 [ 231.013507] isi-capture 32e02000.isi:cap_device:バッファキュー: インデックス=0、サイズ=829440 バイト [ 231.013513] isi-capture 32e02000.isi:cap_device:バッファキュー: インデックス=1、サイズ=829440 バイト [ 231.013518] isi-capture 32e02000.isi:cap_device:バッファキュー: インデックス=2、サイズ=829440 バイト [ 231.013526] isi-capture 32e02000.isi:cap_device:バッファキュー: インデックス=3、サイズ=829440 バイト [ 231.013531] isi-capture 32e02000.isi:cap_device:バッファキュー: インデックス=4、サイズ=829440 バイト [ 231.013536] isi-capture 32e02000.isi:cap_device:バッファキュー: インデックス=5、サイズ=829440 バイト [ 231.013542] isi-capture 32e02000.isi:cap_device:ストリーミング開始、バッファ数=6 [ 231.014785] isi-capture 32e02000.isi:cap_device:ISIストリーミングのセットアップが完了しました [ 231.014804] isi-capture 32e02000.isi:cap_device:adv7282 4-0021でs_stream(1)を呼び出す [ 231.014811] isi-capture 32e02000.isi:cap_device:mxc-mipi-csi2.1でs_stream(1)を呼び出す [ 231.029721] isi-capture 32e02000.isi:cap_device:mxc_isi.1でs_stream(1)を呼び出す [ 232.574681] isi-capture 32e02000.isi:cap_device:adv7282 4-0021でs_stream(0)を呼び出す [ 232.574703] isi-capture 32e02000.isi:cap_device:mxc-mipi-csi2.1でs_stream(0)を呼び出す [ 232.574730] isi-capture 32e02000.isi:cap_device:mxc_isi.1でs_stream(0)を呼び出す よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは、 テクネクシオンからI.MX 8M PLUSモジュールを入手しました。 何が問題なのでしょうか?? よろしくお願いします。 よろしくお願いいたします。 カマレシュ Re: ADV7282-M with iMX8M Plus こんにちは@kamalesh お元気でお過ごしのことと思います。 i.MX8MP EVKをお使いですか? それとも、「別のi.MX8M Plusモジュール」とは一体何を指すのでしょうか?別のベンダーの SOM でしょうか? よろしくお願いいたします。 サラス。
查看全文
i.MX8MQ – USB/UUUを使わずに初期コードをロード こんにちは、 NXP i.MX8MQ プロセッサを使用したカスタム組み込みシステムを開発しています。ハードウェア設計における厳しいスペース制約のため、最終製品に USB ポートを公開することはできません。 システム概要: プロセッサ: i.MX8MQ メモリ: 4GB DDR4 ストレージ: 外付けeMMC 対象OS: Cortex-A53上で動作するYocto Linux 初期ブートローダーやソフトウェアがまだフラッシュされていない(完全に空のシステム) 利用可能なデバッグインターフェース: JTAG (SEGGER J-Link) 私たちの主な質問は次のとおりです。 CAN USB または内部ブート ROM ブート プロセス (つまり、UUU ツールをバイパス) を使用せずに、JTAG (J-Link 経由) を使用して DDR を初期化し、RAM にコード (U-Boot など) をロードして実行できますか? または、eMMC から起動する前に、USB OTG + UUU シリアル ダウンローダーを少なくとも 1 回使用してシステムに初期コードをロードする必要がありますか? ご協力誠にありがとうございました。 Re: i.MX8MQ – Initial code loading without USB/UUU using こんにちは、 Cortex-A53 をサポートする JTAG および JLink スクリプトの場合、segger に直接適用することが推奨される場合があります。 https://forum.segger.com/index.php/Thread/4447-SOLVED-Cortex-A53-support/ NXP は、Cortex-A53 コアのデバッガー ツールとして Lauterbach Trace32 を使用しています。 よろしくお願いします。 Re: i.MX8MQ – Initial code loading without USB/UUU using こんにちは、 参考資料をありがとうございます。 あなたが言及した SDK とツールチェーンのパッチ リンク、および OpenOCD のドキュメントを確認しましたが、次の方法を示す明確で完全な例やガイドは見つかりませんでした。 * i.MX8MQ (Cortex-A53)上のJTAGからDDRを初期化します。 * JTAG(例:SEGGER J-Linkを使用)経由でU-Bootまたは任意のカスタムバイナリをA53 RAMに直接ロードして実行する。 * 内部ブート ROM メカニズムを使用せずに (つまり、USB/シリアル ダウンローダー モードを使用せずに) これを完全に実行します。 入手可能なドキュメントのほとんどは次のいずれかのようです。 * Cortex-M4コアをターゲットとし、 * ブートローダーがすでに存在すると仮定、または * 提供されたリファレンスにあるように、空のデバイスから完全な起動を実行するのではなく、USB と UUU ツールを介してロードされた後にのみ、JTAG 経由で U-Boot とカーネルをデバッグする方法を示します。 Cortex-A53 コードを JTAG (USB なし) 経由で起動することが公式にサポートされているかどうかを明確にしていただけますか。サポートされている場合は、以下の情報を提供していただけますか。 * 直接的なアプリケーションノート、アプリガイド、またはサンプルスクリプト(J-Link、Lauterbach、DS-5、またはOpenOCD) * または、DDR トレーニング、コードのアップロード、JTAG 経由の A53 起動に関する手順はありますか? これは、現在、プリフラッシュされたブートローダーがなく、USB アクセスもないカスタム ハードウェアを起動するのに非常に役立ちます。 改めましてサポートありがとうございます。 よろしくお願いいたします。 Re: i.MX8MQ – Initial code loading without USB/UUU using こんにちは、 見ることができる IDEs - デバッグ、コンパイル、ビルドツール (2) SDK_2.3_MX8MQ_ベータ_パッチ(REVSDK2.3_MX8MQ_ベータ版) (NXPはi.MX8MQuadデバイスをサポートするためにIARとSeggerツールパッチを提供しました) i.MX 8M 評価キット|NXP A53をサポートするLauterbachとArm DS-5については、OpenOCDではa53のサポートを見ることができます。 プログラミングガイド: OpenOCD + Eclipse + JTAG デバッグ (Uboot および Linux) よろしくお願いします。 Re: i.MX8MQ – Initial code loading without USB/UUU using こんにちは、 再開まで今しばらくお待ちください。 M4 コアで JTAG 経由でファームウェアをロードすることに関するドキュメントは見つかりましたが、Cortex-A53 コアに関する同様のドキュメントは見つかりませんでした。 JTAG (SEGGER J-Link など) を使用して Cortex-A53 コア (i.MX8MQ) にコードをロードして実行することに関する公式ドキュメントまたはリソースを提供または紹介していただけますか? よろしくお願いいたします。 Re: i.MX8MQ – Initial code loading without USB/UUU using こんにちは、 はい、JTAG を使用することも、eMMC または SD カードを個別にプログラムすることも CAN。 よろしくお願いします。
查看全文
Signature discrepancy for SCST library ( SCST_M0_S32K11X_RTM_1.0.3 ) Hi, I have been trying to use this SCST library (SCST_M0_S32K11X_RTM_1.0.3) for S32K118 chip. I noticed a discrepancy between the user manual provided and the code.  Please refer to the attached images. @john_floros  Re: Signature discrepancy for SCST library ( SCST_M0_S32K11X_RTM_1.0.3 ) I have checked with expert telling both signatures are correct, but different ones: "This is correct: User manual contains signatures, that are returned by individual atomic tests. File m0_scst_data.c contains converted signatures of individual atomic tests. Converted signatures are used for internal signature check in m0_execute_core_tests function. Signatures, documented in SCST UM, shall be used by User Application to evaluate SCST result."
查看全文
为运行 Zephyr 的 MIMXRT1180-EVK 版本 Gen AVB TSN 堆栈 目标: 我正在尝试在运行 Zephyr 的 CM7 目标上为 MIMXRT1180-EVK 板构建 AVB TSN 堆栈。 https://github.com/NXP/GenAVB_TSN 它有 FreeRTOS 的配置文件:config_freertos_rt1189_cm7.cmake 但泽菲尔不一样。它为 Zephyr 提供了以下内容: config_zephyr_imx8mm_ca53.cmake config_zephyr_imx8mn_ca53.cmake config_zephyr_imx8mp_ca53.cmake config_zephyr_imx93_ca55.cmake 需要在以下位置输入内容: 有人能分享如何为上面提到的 Zephyr 目标之一构建它以供我作为参考。 另外,如果有人能看看我的方法是否正确,那就太好了。 我尝试过的: 我正在采取的方法是尝试版本包括GEN AVB TSN堆栈在内的Zephyr应用程序作为库。在我的工作空间里我从 github 中提取了源代码: |-工作空间 | |-genavb_TSN | |-rtos-抽象层 | |-zephyrproject | |-mcux_sdk_main | |-zephyr-genavb-demo--> — > Zephyr 应用程序 | | |-local_config_mimxr t1189_evk_mimxrt1189 _cm 7.cmake CMakeLists.txt | |- src | | | |- main.c 请注意,Zephyr 设置已经完成,我可以使用以下命令为 CM7 目标版本 hello_world 应用程序:cd ~/ zephyrproject/zephyr west 版本-p-b mimxrt1180_evk/mimxrt1189/cm7 samples/hello_worl d GenAVB_TSN 位于 7_1 分支,我添加了 config_zephyr_imxrt1189_cm7.cmake: Zephyr 应用程序有两个主要文件。CMakeLists.txt 和 local_config_mimxrt1180_evk_mimxrt1189_cm7.cmake 我用来版本化的命令: cd ~/zephyrproject/zephyr west build -p -b mimxrt1180_evk/mimxrt1189/cm7 ~/zephyr-genavb-demo/ --sysbuild Re: Build Gen AVB TSN stack for MIMXRT1180-EVK running Zephyr 你好@SDC 感谢您的耐心等待,我已经在内部进行了咨询,请允许我在下面分享我们的意见。 目前:我们还没有任何正式的、经过测试的方法,可以在 Zephyr 下编译针对任何 MCU 的 GenAVB/TSN 堆栈。 如 README 中的表格所示,目前只支持 i.MX 8M 变体和 i.MX 93。(支持的硬件目标和配置)恩智浦指南既不支持您的开发流程,也不支持从我方添加支持的时间表。 我们无法准确区分为 FreeRTOS 和 Zephyr 编译的 i.MX 93 栈之间的差异。也许用户自己成功编译 i.MX RT1180 在技术上是可行的(需要付出很大努力),但我们强烈建议不要这样做。 我们很抱歉这次不能为您提供支持。 迪亚戈 Re: Build Gen AVB TSN stack for MIMXRT1180-EVK running Zephyr 你好@SDC 感谢您的联系。 对于 i.MX MPU 目标来说,唯一的参考可以在 Harpoon 项目中看到 https://github.com/NXP/GenAVB_TSN?tab=readme-ov-file#zephyr 关于 i.MX RT1180 的 AVB TSN Zephyr 集成,我正在检查这个问题,请允许我给您回复。 迪亚戈
查看全文
flash.bin FRDM IMX93 こんにちは、皆さん。 FRDM iMX93を使用しています。解凍後、 https://www.nxp.com/document/guide/getting-started-with-frdm-imx93 :GS-FRDM-IMX93?section=build-and-run に従ってみましたが、すべて完璧に動作しました。 今、私はカスタムの U-Boot、ATF、OPTEE が欲しいです。yocto と同じハッシュを使用しましたが、完璧にビルドできました。私は mkimage を使用して flash.bin を作成しましたが、この時点まではすべて正常です。 しかし、この flash.bin をフラッシュしようとすると (Balena を使用)、コンソールに何も起こりません。 動作中の yocto からフラッシュ、bin を使用しようとしましたが、同じで、起動しません。 flash.bin のみを使用して起動可能なイメージを作成するにはどうすればCANますか? u-boot を見ると、ブートによってカーネルの rootfs が後で追加されることがわかります。 よろしくお願いいたします。 あんぱ Re: flash.bin FRDM IMX93 SO 私にとってはこれが解決策でした: dd if=iMX93/flash.bin of=bootable.img bs=1K seek=32 conv=fsync Balena bootable.img が起動する場合よりも優れています。なぜエラーが発生するのかを解明する必要がありますが、少なくともコンソール出力は確認できます。 U-Boot SPL 2024.04-00003-g7e135e087e8(2025年7月19日 - 19:10:15 +0000) SOC: 0xa1009300 LC: 0x40010 パワーマネジメントIC: PCA9451A PMIC: オーバードライブ電圧モード エラー: ele_volt_change_start_req: ret -5、応答 0xf429 エラー: ele_volt_change_finish_req: ret -5、応答 0xf429 DDR: 3733MTS DDR: 3733MTS DRAM 2GB DRAMが一致しました M33準備OK 通常のブート BOOTROMから起動しようとしています ブートステージ: プライマリブート イメージオフセット 0x8000、ページサイズ 0x200、ivt オフセット 0x0 ROM_APIで0x40400からイメージをロードする 「同期中止」ハンドラ、ESR 0x02000000 elr: 00000000204e0000 lr: 000000002049dafc x 0: 00000000204e0000 x 1: 0000000020501ba0 x 2: 0000000000000fc0 x 3: 0000000083200040 x 4: 00000000204b6958 x 5: 0000000083200450 x 6: 0000000000000001 x 7: 0000000083200450 x 8: 000000000000000f0 x 9: 00000000796d7959 x10: 00000000796d7959 x11: 0000000000000001 x12: 0000000000000001 x13: 00000000000000012 x14: 0000000000000001 x15: 00000000000000003 x16: 00000000204a5ef4 x17: 0000000000000000 x18: 0000000020501c10 x19: 00000000204b9af8 x20: 00000000204b9ae0 x21: 0000000020501bb0 x22: 00000000デッドビーフ x23: 00000000204b9ae0 x24: 000000000000000f x25: 0000000000000000 x26: 00000000204ad81c x27: 00000000204ad000 x28: 00000000204ad804 x29: 0000000020501b30 コード: 00000000 00000000 00000000 00000000 (00000004) CPU をリセットしています... リセットしています... Re: flash.bin FRDM IMX93 返信ありがとうございます。試してみます。これが機能する場合、uuu ツールが ROM ブートによって認識されるヘッダーを挿入することを意味しますか?ブートシーケンスに関する詳細なドキュメントはありますか? Re: flash.bin FRDM IMX93 こんにちは、 Balena の代わりに UUU を使用することをお勧めします。 次のコマンドを試してください: uuu -b flash.bin よろしくお願いいたします。
查看全文
FRDM-MCXN947ボードでのSCTIMER割り込みの使用 NXPコミュニティの皆様 現在、搭載 SCTIMER ペリフェラルを使用したプログラムを開発しています。SCTIMER を使用して状態実装の 3 番目の状態で CTIMER0 ペリフェラルを起動し、PWM 信号を生成するように試みています。この PWM 信号は GPIO ピンにルーティングされます。これを実現するには、3 番目の状態に割り込みを実装して、その状態で CTIMER0 を具体的に開始する必要があります。しかし、私はあまり経験がないので、このような割り込みのプログラミングには苦労します。助けてくれませんか? 現在作業中のコードは以下の通りです。 void SCT0_IRQHandler ( void ) { SCTIMER_EventHandleIRQ(SCT0_PERIPHERAL); // SCTIMERが状態2に達したときのみCTIMERを開始する CTIMER_StartTimer(CTIMER0_PERIPHERAL); PRINTF( "CTIMER は SCTIMER 状態 2 イベント情報から開始されました。\r\n" ); } 静的void SCT0_init ( void ) { CTIMER0_init(); SCTIMER_Init(SCT0_PERIPHERAL、&SCT0_initConfig); /* NVICで割り込みSCT0_IRQN要求を有効にする */ /* 状態0の初期化 */ SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[0]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[0]); SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[2]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[2]); SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 、 kSCTIMER_Counter_U 、&SCT0_event[0]); SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、1、SCT0_イベント[0]); SCTIMER_IncreaseState(SCT0_PERIPHERAL); /* 状態1の初期化 */ /* PWMの周期イベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]); /* PWMのパルスイベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1); SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[1]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[1]); SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 、 kSCTIMER_Counter_U 、&SCT0_event[1]); SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、2、SCT0_イベント[1]); SCTIMER_IncreaseState(SCT0_PERIPHERAL); /* 状態2の初期化 */ /* PWMの周期イベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]); /* PWMのパルスイベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1); SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[3]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[3]); SCTIMER_CreateAndScheduleEvent(SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 、 kSCTIMER_Counter_U 、&SCT0_event_startCTimer); SCTIMER_SetCallback(SCT0_PERIPHERAL、SCT0_IRQHandler、SCT0_event_startCTimer); IRQを有効にする( SCT0_IRQn ); } 下の図は開始時の波形を示しています。目標は、黄色の PWM 信号の 4 番目の立ち上がりエッジで青色の PWM 信号を開始することです。 クロック|タイマー 開発ボード MCX N Re: SCTIMER Interupt Usage on FRDM-MCXN947 board こんにちは@Kevin_Pang 、 あなたが経験している問題は次のThreadで議論されているようです。ZhangJennie が提供した提案に従って、問題の解決に役立つかどうかを確認することをお勧めします。 BR ハビブ Re: SCTIMER Interupt Usage on FRDM-MCXN947 board 親愛なるハビブ様 基本的な SDK の例を実行しようとしましたが、同じエラーが発生します。 敬具、 ケビン Re: SCTIMER Interupt Usage on FRDM-MCXN947 board こんにちは@Kevin_Pang 、 「hello_world」などの SDKs サンプルの 1 つを実行して、例外がコードによって発生したのか、ボード固有のものなのかを判断していただけますか? BR ハビブ Re: SCTIMER Interupt Usage on FRDM-MCXN947 board 親愛なるハビブ様 お問い合わせいただきありがとうございます。 現在、開発ボードに問題が発生しています。その結果、プロジェクトをデバッグしようとすると、「プローブが開いていません」というエラーとともに「プローブ インデックス 1 を開けません」という例外が発生します。その後、コアとの接続に失敗します。これは、私の設定に何の変更もないのに突然起こりました。この問題の解決を手伝ってもらえますか? 敬具、 ケビン・パン Re: SCTIMER Interupt Usage on FRDM-MCXN947 board こんにちは@Kevin_Pang 、 問題が解決してよかったです。何かお手伝いできることがございましたら、お知らせください。 BR ハビブ Re: SCTIMER Interupt Usage on FRDM-MCXN947 board 問題解決: 割り込みを正しくプログラムするための解決策はすでに見つけました。コードの実装を以下に示します (CTIMER init は示されていません)。 void SCT0_IRQHandler ( void ) { SCTIMER_EventHandleIRQ(SCT0_PERIPHERAL); } void Start_CTIMER ( void ) { // SCTIMERが状態2に達したときのみCTIMERを開始する CTIMER_StartTimer(CTIMER0_PERIPHERAL); PRINTF( "CTIMER は SCTIMER 状態 2 イベント情報から開始されました。\r\n" ); } const sctimer_config_t SCT0_initConfig = { .enableCounterUnify = true、 .clockMode = kSCTIMER_System_ClockMode 、 .clockSelect = kSCTIMER_Clock_On_Rise_Input_0 、 .enableBidirection_l = false、 .enableBidirection_h = false、 .prescale_l = 0U、 .prescale_h = 0U、 .outInitState = 0U、 .inputsync = 0U }; const sctimer_pwm_signal_param_t SCT0_pwmSignalsConfig[4] = { { .出力 = kSCTIMER_Out_0 、 .level = kSCTIMER_HighTrue 、 .dutyCyclePercent = 50U }, { .出力 = kSCTIMER_Out_1 、 .level = kSCTIMER_HighTrue 、 .dutyCyclePercent = 100U }, { .出力 = kSCTIMER_Out_1 、 .level = kSCTIMER_HighTrue 、 .dutyCyclePercent = 0U }, { .出力 = kSCTIMER_Out_1 、 .level = kSCTIMER_HighTrue 、 .dutyCyclePercent = 0U } }; uint32_t SCT0_pwmイベント[4]; uint32_t SCT0_イベント[4]; uint32_t SCT0_event_startCTimer; 静的void SCT0_init ( void ) { SCTIMER_Init(SCT0_PERIPHERAL、&SCT0_initConfig); /* NVICで割り込みSCT0_IRQN要求を有効にする */ /* 状態0の初期化 */ SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[0]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[0]); SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[2]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[2]); SCTIMER_CreateAndScheduleEvent (SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 、 kSCTIMER_Counter_U 、&SCT0_event[0]); SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、1、SCT0_イベント[0]); SCTIMER_IncreaseState(SCT0_PERIPHERAL); /* 状態1の初期化 */ /* PWMの周期イベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]); /* PWMのパルスイベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1); SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[1]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[1]); SCTIMER_CreateAndScheduleEvent (SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 、 kSCTIMER_Counter_U 、&SCT0_event[1]); SCTIMER_SetupNextStateAction(SCT0_PERIPHERAL、2、SCT0_イベント[1]); SCTIMER_IncreaseState(SCT0_PERIPHERAL); /* 状態2の初期化 */ /* PWMの周期イベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0]); /* PWMのパルスイベント情報をスケジュールする */ SCTIMER_スケジュールイベント(SCT0、SCT0_pwmイベント[0] + 1); SCTIMER_SetupPwm(SCT0_PERIPHERAL、&SCT0_pwmSignalsConfig[3]、 kSCTIMER_EdgeAlignedPwm 、100U、SCT0_CLOCK_FREQ、&SCT0_pwmEvent[3]); SCTIMER_CreateAndScheduleEvent (SCT0_PERIPHERAL、 kSCTIMER_OutputRiseEvent 、0、 kSCTIMER_Out_0 、 kSCTIMER_Counter_U 、&SCT0_event_startCTimer); SCTIMER_SetCallback(SCT0_PERIPHERAL、Start_CTIMER、SCT0_event_startCTimer); SCTIMER_EnableInterrupts(SCT0、(1U << SCT0_event_startCTimer)); IRQを有効にする( SCT0_IRQn ); }  
查看全文
NHS3152 Passive Measurement Hi everyone I have an NHS3152 on a custom PCB. The PCB is very simple, with an SWD connector for my MCU-Link Pro and some traces to a connector to attach to a screen-printed antenna. For power stability, there are 2x 100nF capacitors in parallel for both pin 3 & pin 7 (4 capacitors total). I am having an issue regarding the resistive measurements. I have two channels for resistive measurements (channel0 = pins 0,1; channel1 = pins 4,5;). When I perform a resistive measurement when the board is running passively (no power from the debugger), my NFC scanner (Adafruit PN532 shield for Arduino Uno) does not receive any data. However, it does receive the correct data from the measurements when the NHS3152 is receiving power from my debugger. If I disable the sections of the code relating to taking resistive measurements, I can successfully read the NFC contents, so I suspect the ADC is consuming too much power? Any help on this is greatly appreciated. IDE: MCUXpresso v24.9.25 SDK: release_mra2_12_6_nhs3152 Output from scanner on unsuccessful read (running in passive mode): ================================================= Tag Found and Activated! Preparing to read data. UID Length: 7 bytes UID Value: 0x04 0x8E 0xE6 0x00 0xA8 0x00 0x10 ---------------------------------------- Reading data from pages 8-12 Failed to read page 8 ================================================= Tag lost or communication failed. Resetting... ================================================= Output from scanner when NHS3152 is powered via debugger: ================================================= Tag Found and Activated! Preparing to read data. UID Length: 7 bytes UID Value: 0x04 0x8E 0xE6 0x00 0xA8 0x00 0x10 ---------------------------------------- Reading data from pages 8-12 Page 08: 6E 52 31 3A nR1: Page 09: 34 2C 52 32 4,R2 Page 10: 3A 2D 31 FE :-1 Page 11: 86 56 4D 3D VM= Page 12: 84 28 57 0C (W. Data read successfully. Tag is still present. ---------------------------------------- NHS3152  main.c: /* * James Harold, 2025, Scion * * This program measures resistance on two separate analog channels * and writes the results to an NFC tag for wireless reading. * */ // 1. Library Imports #include "board.h" #include "ndeft2t/ndeft2t.h" #include #include "pmu_nss.h" #include "gpio_nss.h" #include #include #include // 2. Defines #define CHANNEL_0 0 // Capacitive & resistive channel #define CHANNEL_1 1 // Resistive channel #define NUM_CHANNELS 2 // Number of total measurement channels // 3. Global Variables // Buffers for NDEF message creation (for NFC) static uint8_t g_ndeft2tInstanceBuffer[NDEFT2T_INSTANCE_SIZE] __attribute__((aligned (4))); static uint8_t g_nfcMessageBuffer[NFC_SHARED_MEM_BYTE_SIZE] __attribute__((aligned (4))); // Array to store the results for each measurement channel volatile int32_t measuredResistance[NUM_CHANNELS] = {0, 0}; // 4. NFC Callbacks (Required by the library, but unused) void NDEFT2T_FieldStatus_Cb(bool status) { (void)status; } void NDEFT2T_MsgAvailable_Cb(void) { /* Unused */ } // 5. Function Prototypes void SetupPowerStabilisation(void); void SetupResistiveMeasurement(int channel); int32_t PerformAndCalculateResistance(int channel); void WriteMeasurementsToNFC(int32_t res1, int32_t res2); void WriteHelloMessageToNFC(void); // 6. Main Code int main(void) { // Step 1: Perform minimal board and power setup Board_Init(); SetupPowerStabilisation(); // Must be performed early for energy harvesting from NFC tag // --- Enable Clocks and Power for peripherals that will be used --- Chip_Clock_Peripheral_EnableClock(CLOCK_PERIPHERAL_ADCDAC | CLOCK_PERIPHERAL_I2D); Chip_SysCon_Peripheral_EnablePower(SYSCON_PERIPHERAL_POWER_ADCDAC | SYSCON_PERIPHERAL_POWER_I2D); // A small delay for power and clocks to stabilise Chip_Clock_System_BusyWait_us(100); // --- Resistance Measurement Initialisation --- // Initialise the peripherals and configure the analog pins Chip_ADCDAC_Init(NSS_ADCDAC0); Chip_I2D_Init(NSS_I2D); // Configure analog pins for Channel 0 (ANA0_0, ANA0_1) Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_ANA0_0, IOCON_FUNC_1); Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_ANA0_1, IOCON_FUNC_1); // Configure analog pins for Channel 1 (ANA0_4, ANA0_5) Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_ANA0_4, IOCON_FUNC_1); Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_ANA0_5, IOCON_FUNC_1); // Set the ADC to a narrow voltage range (1.0V) Chip_ADCDAC_SetInputRangeADC(NSS_ADCDAC0, ADCDAC_INPUTRANGE_NARROW); // Step 2: Initialise NFC communication Chip_NFC_Init(NSS_NFC); NDEFT2T_Init(); // Step 3: Perform resistive measurements SetupResistiveMeasurement(CHANNEL_0); measuredResistance[CHANNEL_0] = PerformAndCalculateResistance(CHANNEL_0); SetupResistiveMeasurement(CHANNEL_1); measuredResistance[CHANNEL_1] = PerformAndCalculateResistance(CHANNEL_1); // Step 4: Write measurements to the NFC tag WriteMeasurementsToNFC(measuredResistance[CHANNEL_0], measuredResistance[CHANNEL_1]); //WriteHelloMessageToNFC(); // --- Power down peripherals after use to save energy --- Chip_SysCon_Peripheral_DisablePower(SYSCON_PERIPHERAL_POWER_ADCDAC | SYSCON_PERIPHERAL_POWER_I2D); Chip_Clock_Peripheral_DisableClock(CLOCK_PERIPHERAL_ADCDAC | CLOCK_PERIPHERAL_I2D); // Step 5: Wait for NFC peripheral interrupt while(1) { __WFI(); } return 0; // Should never be reached } // 7. Function Declarations /** * @brief Configures hardware for a resistive measurement on a specific channel. * @param channel : The measurement channel to set up (CHANNEL_0 or CHANNEL_1) * @return Nothing */ void SetupResistiveMeasurement(int channel) { ADCDAC_IO_T dac_pin; I2D_INPUT_T i2d_pin; if (channel == CHANNEL_1) { dac_pin = ADCDAC_IO_ANA0_4; i2d_pin = I2D_INPUT_ANA0_5; } else { dac_pin = ADCDAC_IO_ANA0_0; i2d_pin = I2D_INPUT_ANA0_1; } Chip_ADCDAC_SetMuxDAC(NSS_ADCDAC0, dac_pin); Chip_ADCDAC_WriteOutputDAC(NSS_ADCDAC0, 0xFFF); // Changed from 0xFFF to 0x800 to lower DAC output voltage Chip_I2D_SetMuxInput(NSS_I2D, i2d_pin); if (channel == CHANNEL_0) { Chip_I2D_Setup(NSS_I2D, I2D_SINGLE_SHOT, I2D_SCALER_GAIN_100_1, I2D_CONVERTER_GAIN_LOW, 10); // Changed I2D conversion period from 100 to 10 (power save) } else { Chip_I2D_Setup(NSS_I2D, I2D_SINGLE_SHOT, I2D_SCALER_GAIN_100_1, I2D_CONVERTER_GAIN_LOW, 10); // Changed I2D conversion period from 100 to 10 (power save) } // Wait a moment for the voltage and current to stabilise. Chip_Clock_System_BusyWait_ms(1); } /** * @brief Initialises GPIOs to enable the capacitor bank for power stability. * @return Nothing * @note This is the most critical initialisation for passive operation. */ void SetupPowerStabilisation(void) { Chip_IOCON_Init(NSS_IOCON); Chip_GPIO_Init(NSS_GPIO); // --- Phase 1: PRECHARGE --- // Configure pins as INPUTS with internal pull-up resistors enabled. // This allows the external caps to charge slowly without causing a voltage drop. Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_PIO0_3, IOCON_FUNC_0 | IOCON_RMODE_PULLUP); // Configure pin 3 as GPIO and enable pull-up Chip_GPIO_SetPinDIRInput(NSS_GPIO, 0, 3); // Configure pin 3 as input Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_PIO0_7, IOCON_FUNC_0 | IOCON_RMODE_PULLUP); // Configure pin 7 as GPIO and enable pull-up Chip_GPIO_SetPinDIRInput(NSS_GPIO, 0, 7); // Configure pin 7 as input // Wait for a short time to allow the capacitors to charge. Chip_Clock_System_BusyWait_ms(60); // Approx. 60ms for 4 time constants (each pin has 200nF attached) // --- Phase 2: ENGAGE --- // Now that the caps are charged, we can safely connect them to the power rail // by setting the pins to OUTPUT and driving them HIGH. Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_PIO0_3, IOCON_FUNC_0 | IOCON_RMODE_INACT); // Configure pin 3 as GPIO and disable pull-up Chip_GPIO_SetPinDIROutput(NSS_GPIO, 0, 3); // Configure pin 3 as output Chip_GPIO_SetPinOutHigh(NSS_GPIO, 0, 3); // Connect pin 3 to VDD rail by setting it high Chip_IOCON_SetPinConfig(NSS_IOCON, IOCON_PIO0_7, IOCON_FUNC_0 | IOCON_RMODE_INACT); // Configure pin 7 as GPIO and disable pull-up Chip_GPIO_SetPinDIROutput(NSS_GPIO, 0, 7); // Configure pin 7 as output Chip_GPIO_SetPinOutHigh(NSS_GPIO, 0, 7); // Connect pin 7 to VDD rail by setting it high } /** * @brief Creates an NDEF message with the two resistance values and writes it to memory. * @param res1 : The raw resistance value from the first channel. * @param res2 : The raw resistance value from the second channel. * @return Nothing */ void WriteMeasurementsToNFC(int32_t res1, int32_t res2) { char payloadText[64]; NDEFT2T_CREATE_RECORD_INFO_T createRecordInfo; uint8_t locale[] = "en"; snprintf(payloadText, sizeof(payloadText), "R1:%ld,R2:%ld", res1, res2); NDEFT2T_CreateMessage(g_ndeft2tInstanceBuffer, g_nfcMessageBuffer, NFC_SHARED_MEM_BYTE_SIZE, true); createRecordInfo.shortRecord = 1; createRecordInfo.pString = locale; if (NDEFT2T_CreateTextRecord(g_ndeft2tInstanceBuffer, &createRecordInfo)) { if (NDEFT2T_WriteRecordPayload(g_ndeft2tInstanceBuffer, (uint8_t*)payloadText, strlen(payloadText))) { NDEFT2T_CommitRecord(g_ndeft2tInstanceBuffer); } } NDEFT2T_CommitMessage(g_ndeft2tInstanceBuffer); } /** * @brief Creates a simple NDEF text message "hello" and writes it to NFC memory. * @return Nothing */ void WriteHelloMessageToNFC(void) { char payloadText[] = "bananas"; NDEFT2T_CREATE_RECORD_INFO_T createRecordInfo; uint8_t locale[] = "en"; // 1. Start creating a new NDEF message in our buffer. NDEFT2T_CreateMessage(g_ndeft2tInstanceBuffer, g_nfcMessageBuffer, NFC_SHARED_MEM_BYTE_SIZE, true /* isFirstMessage */); // 2. Prepare information for a new NDEF Text Record. createRecordInfo.shortRecord = 1; createRecordInfo.pString = locale; // 3. Create the Text Record structure within the message. if (NDEFT2T_CreateTextRecord(g_ndeft2tInstanceBuffer, &createRecordInfo)) { // 4. Write the actual "hello" string into the record's payload. if (NDEFT2T_WriteRecordPayload(g_ndeft2tInstanceBuffer, (uint8_t*)payloadText, strlen(payloadText))) { // 5. Finalise this specific record. NDEFT2T_CommitRecord(g_ndeft2tInstanceBuffer); } } // 6. Finalize the entire message, making it available to the NFC hardware. NDEFT2T_CommitMessage(g_ndeft2tInstanceBuffer); } /** * @brief Performs ADC and I2D conversions and calculates the resistance for a specific channel. * @param channel : The measurement channel to measure (CHANNEL_0 or CHANNEL_1) * @return A raw, scaled resistance value, or -1 if an error occurs (e.g., open circuit). * @note Uses low-power __WFE() to wait for conversions, essential for passive mode. */ int32_t PerformAndCalculateResistance(int channel) { int32_t v_drive, v_sense, i2d_val, adc_diff, resistance_result; ADCDAC_IO_T drive_pin_adc, sense_pin_adc; /* * NOTE: Peripheral clocks and power are assumed to be enabled in main(). * If this function were called from multiple places, you might enable/disable * them here instead. For this application, enabling in main() is more efficient. */ if (channel == CHANNEL_1) { drive_pin_adc = ADCDAC_IO_ANA0_4; sense_pin_adc = ADCDAC_IO_ANA0_5; } else { drive_pin_adc = ADCDAC_IO_ANA0_0; sense_pin_adc = ADCDAC_IO_ANA0_1; } // --- V_DRIVE ADC Measurement --- Chip_ADCDAC_SetMuxADC(NSS_ADCDAC0, drive_pin_adc); Chip_ADCDAC_StartADC(NSS_ADCDAC0); // NEW, LOW-POWER WAY: Sleep until the ADC conversion is done. while (!(Chip_ADCDAC_ReadStatus(NSS_ADCDAC0) & ADCDAC_STATUS_ADC_DONE)) { { /* wait */ } } v_drive = Chip_ADCDAC_GetValueADC(NSS_ADCDAC0); // --- V_SENSE ADC Measurement --- Chip_ADCDAC_SetMuxADC(NSS_ADCDAC0, sense_pin_adc); Chip_ADCDAC_StartADC(NSS_ADCDAC0); // Sleep until the ADC conversion is done. while (!(Chip_ADCDAC_ReadStatus(NSS_ADCDAC0) & ADCDAC_STATUS_ADC_DONE)) { { /* wait */ } } v_sense = Chip_ADCDAC_GetValueADC(NSS_ADCDAC0); // --- I2D Measurement --- Chip_I2D_Start(NSS_I2D); // Sleep until the I2D conversion is done. while (!(Chip_I2D_ReadStatus(NSS_I2D) & I2D_STATUS_CONVERSION_DONE)) { { /* wait */ } // Wait For Event - wakes up on ADC_DONE event --> Replaced __WFE() with busy waits {} } i2d_val = Chip_I2D_GetValue(NSS_I2D); /* * NOTE: Peripherals are left powered on for the next measurement. * They will be powered down at the end of main(). */ // --- Calculation --- adc_diff = v_drive - v_sense; if (adc_diff < 1) { adc_diff = 1; } if (i2d_val > 0) { resistance_result = ((uint32_t)adc_diff * 10000) / i2d_val; } else { resistance_result = -1; // Indicates open circuit or error } return resistance_result; } ntag2xx_read.ino: /**************************************************************************/ /*!     @file     readntag_continuous_power_and_data.ino     @author   KTOWN (Adafruit Industries) / Modified for continuous power and data read     @license  BSD (see license.txt)     This version keeps a passive NFC tag continuously powered, and on each     loop, it reads and displays the data from a specific range of pages (8-13).     It resets when the tag is removed. */ /**************************************************************************/ #include #include #include // If using the breakout with SPI, define the pins for SPI communication. #define PN532_SCK  (SCK) #define PN532_MISO (MISO) #define PN532_MOSI (MOSI) #define PN532_SS   (10) // Or whatever SPI CS pin you're using // If using the breakout or shield with I2C, define the pins for I2C // and comment out the SPI definitions. #define PN532_IRQ   (2) #define PN532_RESET (3) // Use this line for I2C Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET); // Or use this line for SPI // Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS); // Global state variables to track if a tag is currently selected bool tagIsPresent = false; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; uint8_t uidLength; int pageStart = 8; int pageEnd = 12; void setup(void) {   Serial.begin(115200);   while (!Serial) delay(10); // For Leonardo/Micro/Zero   nfc.begin();   uint32_t versiondata = nfc.getFirmwareVersion();   if (!versiondata) {     Serial.print("Didn't find PN53x board");     while (1); // halt   }   Serial.print("Found chip PN5"); Serial.print((versiondata >> 24) & 0xFF, HEX);   Serial.print(", Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC);   Serial.print('.'); Serial.println((versiondata >> 8) & 0xFF, DEC);   // Configure the board to listen for ISO14443A cards   nfc.SAMConfig();   Serial.println("Waiting for an ISO14443A Card to power and read..."); } void loop(void) {   // === STATE 1: NO TAG IS SELECTED ===   // If we don't have a tag, try to find one.   if (!tagIsPresent) {     Serial.print("."); // Print a dot to show we are waiting     // Wait for a card to enter the field. This also provides power.     bool success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength, 500);     if (success) {       tagIsPresent = true;       Serial.println("\n=================================================");       Serial.println("Tag Found and Activated! Preparing to read data.");       Serial.print("  UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");       Serial.print("  UID Value: ");       nfc.PrintHex(uid, uidLength);             // OPTIONAL DELAY: If your tag is a sensor that needs time to       // perform a measurement after power-up, add a delay here.       // 200ms is a good starting point for many sensor tags.       delay(200);     }     // If it fails or times out, the loop will just restart and try again.     return;   }   // === STATE 2: TAG IS SELECTED AND POWERED ===   // If we have a tag, attempt to read the data from pages 8 to 13.   if (tagIsPresent) {     Serial.println("----------------------------------------");     Serial.print("Reading data from pages ");     Serial.print(pageStart);     Serial.print("-");     Serial.print(pageEnd);     Serial.println();         bool all_reads_succeeded = true;         for (int page = pageStart; page <= pageEnd; page++) {       uint8_t page_data[4]; // NTAG pages are 4 bytes long             // Attempt to read the current page       if (nfc.ntag2xx_ReadPage(page, page_data)) {         // Success! Print the data.         Serial.print("  Page ");         if (page < 10) Serial.print("0"); // for nice alignment         Serial.print(page);         Serial.print(": ");         // nfc.PrintHexChar is a great helper function that prints hex and ASCII         nfc.PrintHexChar(page_data, 4);       } else {         // FAILED TO READ! This is our signal that the tag has been removed.         Serial.print("  Failed to read page "); Serial.println(page);         all_reads_succeeded = false;         break; // Exit the for loop immediately       }     }     if (all_reads_succeeded) {       Serial.println("Data read successfully. Tag is still present.");     } else {       // If any read failed, we reset the system state.       Serial.println("\n=================================================");       Serial.println("Tag lost or communication failed. Resetting...");       Serial.println("=================================================");       tagIsPresent = false; // Reset the state       nfc.SAMConfig(); // Re-configure the reader to listen for a new tag     }         // Wait a bit before the next read cycle.     delay(2000);   } } Re: NHS3152 Passive Measurement FYI. NHS3152 power only from NFC field and load Capacitor - NXP Community Re: NHS3152 Passive Measurement Hi Jimmy, thank you for replying. Do you think adding more capacitance to the capacitor bank could possibly enable ADC operation in passive mode? If so, what would be a safe amount of total capacitance to have to perform these operations. Re: NHS3152 Passive Measurement when the board running passively, the power may not stable enough for the ADC operation.
查看全文