Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
i.MX8MP 允许 HDMI 输出 1920x1080-59.94Hz 的频率 你好 我目前正在使用 i.MX8MP 处理器进行一个视频播放项目,但遇到了一个问题:我无法让 HDMI 以1920x1080-59.95Hz 的频率输出。我不需要动态刷新率切换 - 我只需要在固定刷新率下的稳定输出。 我正在使用的硬件平台基于 SolidRun 的 HummingBoard Pulse: https://developer.solid-run.com/knowledge-base/hummingboard-pulse-getting-started/ 我运行的是Yocto 4.0 Kirkstone,使用的是 NXP Embedded Linux 5.15.71-2.2.0。 我以前在 SolidRun 论坛上发过帖子,但没有成功解决这个问题。 我还发现了与此话题相关的类似讨论,例如: https://community.nxp.com/t5/i-MX-Processors/imx8mp-programming-hdmi-phy-pll-timings/td-p/1498162 如果有人在此平台上配置固定的 HDMI 输出时序方面有经验,或者可以向我推荐相关的设备树修改或驱动程序更改,我将不胜感激。 谢谢! i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 你好@RU_Callum imx8MP HDMI 像素时钟的时钟源是 IMX8MP_CLK_24M。 B.R Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz @pengyong_zhang 你好、 感谢您的帮助。作为实现这个时钟速率的最后一次尝试,你能否告诉我使用哪个特定的时钟作为创建 HDMI 输出的参考。 我们正在考虑在PCB设计中用慢0.1%的时钟参考来代替这个时钟,这将允许148.352MHz的输出 顺祝商祺! Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz hI@RU_Callum 很抱歉,i.MX8MP 不支持 148.352MHz。像素时钟输出。 B.R Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz @pengyong_zhang 你好、 感谢您的回复,有没有办法在 i.MX8MP 上强制使用 148.352MHz 像素时钟频率? 我之所以需要这种模式,是为了符合 NTSC(国家电视系统委员会)标准。 如能得到任何帮助,我们将不胜感激。 非常感谢! Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 你好@RU_Callum 我已经在我的 i.MX8MP evk 板上测试了大约 [email protected],我们不支持148.352MHz 像素时钟。而且我无法通过您的链接获取面板像素时钟。您需要查看数据表文件。我们可以支持 148.5MHz 的像素时钟。 B.R Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz @pengyong_zhang 你好、 我很感激你已经问了两次这个问题,我之所以回避这个问题,是因为它已经在几台不同的广播监测上进行了测试。 以下是我目前正在使用的监测的规格: 监测:https://lilliputdirect.com/A11 规格表: https://drive.google.com/file/d/1fhSdyPbVu6ukpm33yqDd64ruyZZABC1y/view 信号格式表: https://drive.google.com/file/d/1th2s5CekSFQxn5pyLvvqshyA9tPOu_ut/view 非常感谢。 Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz hI@RU_Callum 我已经问了你两次问题,你的面板像素时钟是多少? 请提供面板的数据表文件。 如果我们不支持您的面板像素时钟,您的面板将无法正常显示 B.R Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz @pengyong_zhang 你好、 我修改了 weston.ini 文件,但默认频率似乎仍然是 60Hz。 HDMI 输出正被馈入 HDMI 转 3G/HD-SDI 变流器:https://aivion.com/wp-content/uploads/DS_A_NA1012B_ET_V1.0.2.pdf 该变流器预计将通过 HDMI 连接向其提供以下时钟速率: HDMI/DVI TMDS 输入时钟要求为: 3G 模式: 148.5MHz 或 148.5 MHz/1.001 +/- 60ppm 高清模式: 74.25MHz 或 74.25MHz/1.001+/-80 ppm 我们已经测试了变流器,以及它何时接收 148.5/ 的时钟速率MHz/1.001 时,播放频率为 59.94Hz。这表明 i.MX8MP 并没有以这种速率输出,即使更改 weston.ini 也是如此。 有没有办法在 i.MX8MP 上强制使用这种时钟频率? 非常感谢 Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 你好@RU_Callum 更改 /etc/xdg/weston 位置的 westom.ini 文件、 在 [output] 部分中更改您想要的分辨率输出]部分。 顺便问一下:您的面板像素时钟是多少?共享面板的数据表文件。 B.R Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 你好@pengyong_zhang 这些补丁说明似乎解决了这个问题,但我一直无法对我的板进行任何更改来解决这个问题。希望对您有所帮助: https://lore.kernel.org/linux-arm-kernel/[email protected]/ 谢谢! Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 完整日志: root @imx8mpsolidrun:~# 模式测试 尝试打开设备 “i915”... 尝试打开设备 “amdgpu” 失败... 尝试打开设备 “radeon” 失败... 尝试打开设备 “nouveau” 失败... 尝试打开设备 “vmwgfx” 失败... 尝试打开设备 “omapdrm” 失败... 尝试打开设备 “exynos” 失败... 尝试打开设备 “exynos” 失败... 尝试打开设备 “exynos” 失败... 尝试打开设备 “exynos” 失败 ccd '... 尝试打开设备' msm '失败... 尝试打开设备' sti '失败... 尝试打开设备' tegra '失败... 尝试打开设备' tegra '失败... 尝试打开设备失败' imx-drm'... done 编码器: id crtc 类型可能的 crtc 可能的克隆 40 0 DSI 0x00000001 0x00000001 42 39 TMDS 0x00000004 0x00000002 连接器: id 编码器状态 名称 尺寸 (mm) 模式 编码器 41 0 断开 HDMI-A-1 0x0 0 40 props: 1 EDID: flags: immutable blob blobs: value: 2 DPMS: flags: enum enums:On=0 Standby=1 Suspend=2 Off=3 value: 0 5 link-status: flags: enum enums:Good=0 Bad=1 value: 0 6 non-desktop: flags: immutable range values:0 1 value: 0 4 TILE: flags: immutable blob blobs: 值: 43 42 连接的 HDMI-A-2 710x400 14 42 模式: 索引名称 刷新 (Hz) hdisp hss hse htot vdisp vss vse vtot #0 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver #1 1920x1080 59.94 1920 2008 2052 2200 1080 1084 1089 1125 148352 flags: phsync, pvsync; type: driver #2 1920x1080 50.00 1920 2448 2492 2640 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver #3 1920x1080 30.00 1920 2008 2052 2200 1080 1084 1089 1125 74250 flags: phsync, pvsync; type: driver #4 1920x1080 29.97 1920 2008 2052 2200 1080 1084 1089 1125 74176 flags: phsync, pvsync; type: driver #5 1920x1080 25.00 1920 2448 2492 2640 1080 1084 1089 1125 74250 flags: phsync, pvsync; type: driver #6 1920x1080 24.00 1920 2558 2602 2750 1080 1084 1089 1125 74250 flags: phsync, pvsync; type: driver #7 1920x1080 23.98 1920 2558 2602 2750 1080 1084 1089 1125 74176 flags: phsync, pvsync; type: driver #8 1280x720 60.00 1280 1390 1430 1650 720 725 730 750 74250 flags: phsync, pvsync; type: driver #9 1280x720 59.94 1280 1390 1430 1650 720 725 730 750 74176 flags: phsync, pvsync; type: driver #10 1280x720 50.00 1280 1720 1760 1980 720 725 730 750 74250 flags: phsync, pvsync; type: driver #11 720x576 50.00 720 732 796 864 576 581 586 625 27000 标志:nhsync、nvsync;类型:驱动程序 #12 720x480 60.00 720 736 798 858 480 489 495 525 27027 标志: nhsync、nvsync;类型:驱动程序 #13 720x480 59.94 720 736 798 858 480 489 495 525 27000 标志:nhsync、nvsync;类型:驱动程序 props: 1 EDID: 标志:不可变 blob blobs: 值: 00ffffffffffff002301000001000000 0a190103804728960adaffa3584aa229 17494b00000001010101010101010101 010101010101011d8018711c1620582c 2500c48e2100009e011d007251d01e20 6e285500c48e2100001e000000fc0042 4d442048444d490a20202020000000fd 00173c1f440f000a20202020202001c1 020321774d858487949396a0a1a29f90 0312230f040783ff000066030c000000 008c0aa01451f01600267c4300138e21 000098011d80d0721c1620102c2580c4 8e2100009e011d00bc52d01e20b82855 40c48e2100001e8c0aa0205120181018 7e2300138e21000098011d803e73382d 407e2c4580c48e2100001e0000000034 2DPMS: flags: enum enums:On=0 Standby=1 Suspend=2 Off=3 value: 0 5 link-status: flags: enum enums:Good=0 Bad=1 value: 0 6 non-desktop: flags: immutable range values:0 1 value: 0 4 TILE: flags: immutable blob blobs: 值: 44 max bpc: 标志: 范围 值:8 16 值:0 CRTCs: id fb pos size 33 0 (0,0) (0x0) #0 nan 0 0 0 0 0 0 0 0 flags: ; type: props: 24 VRR_ENABLED: flags: range values:0 1 value: 0 36 0 (0,0) (0x0) #0 nan 0 0 0 0 0 0 0 0 flags: ; type: props: 24 VRR_ENABLED: flags: range values:0 1 value: 0 39 49 (0,0) (1920x1080) #0 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver props: 24 VRR_ENABLED: flags: range values:0 1 值:0 平面: id crtc fb CRTC x,y x,y gamma size possible crtcs 31 0 0 0,0 0,0 0 0 0x00000001 formats:XR24 AR24 RG16 XB24 AB24 AR15 XR15 props: 8 type: flags: immutable enum enums:Overlay=0 Primary=1 Cursor=2 value: 1 32 zpos: flags: immutable range values:0 0 值:0 34 0 0,0,0 0 0 0x00000002 格式:XR24 AR24 RG16 XB24 AB24 AR15 XR15 props: 8 type: flags: immutable enum enums:Overlay=0 Primary=1 Cursor=2 value: 1 35 zpos: flags: immutable range values:0 0 值:0 37 39 49 0,0,0 0 0 0x00000004 格式:XR24 AR24 RG16 XB24 AB24 AR15 XR15 props: 8 type: flags: immutable enum enums:Overlay=0 Primary=1 Cursor=2 value: 1 38 zpos: flags: immutable range values:0 0 值:0 帧缓冲区: id 大小引脚间距 使用 Weston,我可以获取以下信息: [13:12:40.811]输出 HDMI-A-2(CRTC 39)视频模式: [email protected]:9,电流,148.5 MHz [email protected]:9、148.4 MHz [email protected]:9、148.5 MHz [email protected]:9、74.2 MHz [email protected]:9、74.2 MHz [email protected]、74.2 MHz [email protected]:9、74.2 MHz [email protected]、74.2 MHz [email protected]:9、74.2 MHz [email protected]:9、74.2 MHz [email protected]、74.2 MHz [email protected]:9, 74.2 MHz [email protected] 16:9, 27.0 MHz [email protected] 16:9, 27.0 MHz [email protected] 16:9, 27.0 MHz 但是,当我将 Weston 设置为以[email protected]的频率输出时,它又默认为 60Hz 非常感谢。 Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 你好@RU_Callum 请共享完整的结果日志文件。另外,您的 Panle 像素时钟是多少?如果是,请共享您的 Panle 数据表文件。 B.R Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 嗨 @pengyong_zhang, 感谢您的快速回复, root @imx8mpsolidrun:~# modetest-C 尝试打开设备 “i915”... 尝试打开设备 “amdgpu” 失败... 尝试打开设备 “radeon” 失败... 尝试打开设备 “nouveau” 失败... 尝试打开设备 “vmwgfx” 失败... 尝试打开设备 “omapdrm” 失败... 尝试打开设备 “exynos” 失败... 尝试打开设备 “tilcdc” 失败... 尝试打开设备 “msm” 失败... 尝试打开设备 “sti” 失败... 失败 尝试打开设备 “tegra”... 尝试打开设备 “imx-drm” 失败... 完成了 我不知道这是否有帮助,但我正在使用 Weston 合成器来显示视频回放。 Re: i.MX8MP allow HDMI to output 1920x1080-59.94Hz 你好@RU_Callum 请输入 modetest -C 命令并分享结果? B.R
View full article
FRDM-RW612 プロジェクトで Wi-Fi と イーサネット インターフェース を統合できない Wi-Fi と イーサネット インターフェース間の通信を同時に処理する必要があるテストに FRDM-RW612 ボードを使用しています。 新しいプロジェクトを作成し、SDK マネージャで適切なオプションを有効にしてみましたが、その後ビルド エラーが発生します。 それがうまくいかなかったので、Wi-Fi が有効になっている SDK の例 ( wifi_test_mode ) をコピーし、次に イーサネット が有効になっている SDK の例 ( enet_txrx_transfer ) から SDK コンポーネントを有効にして、構成をマージしようとしています。これにより、コードをビルドして実行することはできますが、イーサネット インターフェースで読み取り/書き込みを行うことはできません。 何か見落としている手順はありますか?イーサネットと Wi-Fi を同時に動作させるサンプル コードはどこかで見つかりますか? Re: Not able to integrate Wi-Fi and Ethernet Interfaces in an FRDM-RW612 Project こんにちは、 イーサネットの例と、両方の例の統合で同じ動作が見られるかどうかを明確にしていただけますか? よろしくお願いいたします。 リカルド Re: Not able to integrate Wi-Fi and Ethernet Interfaces in an FRDM-RW612 Project ご返信ありがとうございます。 >「wifi_test_mode」の例を使用している特別な理由はありますか?この例は認証プロセスを対象としています。これがあなたのCASEではない場合で、WiFiインターフェースのみで作業する必要がある場合は、「wifi_cli」の例を使用して「enet_txrx_transfer」と統合することをお勧めします。 最初はwifi_cliを試しましたが、より簡単な例なのでwifi_test_mode の方が良いと思いました。CASE、Wi-Fi をモニター モードで構成し、関数にコールバックを設定するロジックの部分を実装することができ、この部分は正常に動作します。 ethernet_txrx_transferプロジェクトのマージに関しては、以下の手順でコードを統合しました。 SDKマネージャのethernet_txrx_transferから追加コンポーネントを選択します。 app.c 、 hardware_init.cのファイルをマージします。mcux_config.cおよびpin_mux.c両方の例とSDKマネージャによって生成されたファイルを比較することによって lwiopts.hを修正し、wifi_config.hFreeRTOSConfig.hにビルドエラーを修正するための特定のプリプロセッサ定義を追加します これらの変更後、コードをビルドして実行することができ、 ENET_SendFrame()関数呼び出しは成功を返しますが、反対側のイーサネット接続には何も表示されません。 また、生のイーサネット フレームでテストする代わりに、LwIP の etherIF コンポーネントを統合してみることも試みましたが、 ethernetif_wait_linkup_array()呼び出しは常にタイムアウトします。 OSA/FreeRTOS 部分は正常に動作しており、Wi-Fi と イーサネット ロジックの両方を別々のタスクで実行しています。 正しいタイマー/ピン構成で Wi-Fi とイーサネットが有効になっている基本プロジェクトを入手できれば便利です。アプリケーション ロジックは必要ありません。 Re: Not able to integrate Wi-Fi and Ethernet Interfaces in an FRDM-RW612 Project こんにちは、 「wifi_test_mode」の例を使用する特別な理由はありますか?この例は認証プロセスを対象としています。これがあなたのCASEではない場合で、WiFiインターフェースのみで作業する必要がある場合は、「wifi_cli」の例を使用して「enet_txrx_transfer」と統合することをお勧めします。 これらの例を統合するには: まず、「wifi_cli」をベース プロジェクトとして使用して統合を行うことをお勧めします。また、イーサネットの例から必要なプリプロセッサ シンボルを比較して追加する必要もあります。 さらに、イーサネットの例で必要なクロックを考慮し、その初期化と構成されたピンをベース プロジェクトに追加する必要があります。 また、イーサネット PHY 専用の関連ソース ファイルをベース プロジェクトに追加する必要があります。そのためには、イーサネットの例から不足しているファイルを比較して追加し、そのパスをコンパイラのインクルード パスに追加するだけです。 最後に、「wifi_cli」の例では FreeRTOS で OSA (オペレーティング システム抽象化レイヤー) を使用しているため、イーサネット部分を管理するためのタスクを作成する必要がある場合があります。 よろしくお願いいたします。 リカルド
View full article
SWT の Window WDG を使用するにはどうすればいいですか? 100msTask で Swt_Ip_Service を呼び出しますが、これはタイムアウト モードでは問題ありません。Windows の WDG モードを使用するには、swt 構成を次のように変更します。 Snipaste_2024-06-05_19-59-37.png ソフトウェアが期待どおりに動作しなかったため、ウォッチドッグがリセットされました。 設定に問題がありますか?どうすれば変更CANますか? デバッグを試みましたが、Windows WDG モードでは CO レジスタが常に 0 であることがわかりました。 現在の時点からタイムアウトまでの時間を知るためのより良い方法はありますか? Re: How to use Window WDG of SWT? 同じ問題に直面して何か解決策を見つけましたか。 Re: How to use Window WDG of SWT? こんにちは@ Janeting123 SWTをオフにしないと、COレジスタの値を確認する方法はありません。 Senlent_0-1717666639226.png Re: How to use Window WDG of SWT? 通常の犬モードで100msTaskの精度が検証されています。特定のサイクルで特別な状況が発生した場合は、デバッグする必要があります。 CR[WEN]=1のときのみ、SWTはウィンドウドッグモードになります。このとき、CO レジスタは常に 0 になります。適切なデバッグ方法が見つかりません。 Re: How to use Window WDG of SWT? こんにちは@ Janeting123 100 ミリ秒のタスク時間が完全に正確であるかどうか、または割り込みによって占有される可能性があるかどうかを確認する必要があります。 COレジスタの場合、まずSWを無効にしてから値を確認する必要があります。 SWTが無効(CR[WEN]が0)の場合、CNTは内部タイマーの値を表示します。SWTが有効(CR[WEN]が1)の場合、CNTに0を書き込みます。このフィールドの値は、内部タイマー値より最大 6 システム クロック サイクル + 8 カウンター クロック サイクル遅れる CAN があります。したがって、SWT を無効にした直後に読み取られる CNT 値は、内部タイマーの実際の値よりも高くなる可能性があります。 Re: How to use Window WDG of SWT? 最初の文で説明したように、関数は 100msTask で呼び出されます。 この構成は、この 100 ミリ秒サイクル用に特別に用意されています。 SO、何が問題なのか分かりません。 さらに私を混乱させるのは、チップにウォッチドッグカウントを示すレジスタがないように見えることです。 Re: How to use Window WDG of SWT? こんにちは@ Janeting123 ウィンドウモードが有効になっている場合、サービスSWTは[タイムアウト期間 - ウィンドウ期間、タイムアウト期間]である必要があります。 例: タイムアウト期間を150msに設定し、ウィンドウ期間を75msに設定しました 次にSWTを「0.15-0.075」でサービスする必要があります。〜「0.15」S は 75 ~ 150 ミリ秒の範囲です。
View full article
MPC5xxx监视模式开启后,用codewarrior 11.1调试时不会弹窗输入密码 我在PE网站中看到他们说11.1的版本中该功能未放入,会在2022年的codewarrior v11.2中加入,但是我在官网没有找到能用于MPC5xxx的codewarrior v11.2   60441BEB-783D-425a-87D0-61648BD7642C.png D6646B72-77B4-4579-8168-944078A24589.png NXP官方pdf中有类似输入密码的弹窗 屏幕截图 2025-03-13 093737.png Re: MPC5xxx监视模式开启后,用codewarrior 11.1调试时不会弹窗输入密码 你好   作为一种变通办法,您可以用 CW 10.6 版本替换 PEmicro DLL 文件。 步骤如下:   - 备份或重命名位于以下位置的现有 EPPC gdi 文件夹 C:\Freescale\CW MCU v11.1\MCU\bin\plugins\support\EPPC\gdi   - 从 https://www.pemicro.com/fixedlinks/eppc_gdi_10.6.zip下载 CW 10.6 gdi 文件夹   - 用下载的压缩文件中的内容替换 gdi 文件夹   希望对你有所帮助。 Stan Re: MPC5xxx监视模式开启后,用codewarrior 11.1调试时不会弹窗输入密码 您好, 不幸的是,路线图上没有发布适用于 MCU v11.2 的 CodeWarrior 版本。我们目前正在与Pemicro讨论如何在现有版本v11.1中使用此功能。 此致, Stan
View full article
MCXN947 外部直流供电 大家好, 尽管 mcu 集成了 ldo 和 dcdc 转换器来为内核提供电源。关于如何绕过两个集成变流器而仅使用外部变流器来提供电源,是否有任何指南?我知道数据表和HDG都提到可以绕过DCDC或低压差线性稳压器(LDO),但是HDG没有提到完全使用外部电源为微控制器供电。此外,这种特定的微控制器有电源顺序吗? 电路板设计 MCX N 电源 Re: mcxn947 external dcdc powered 如何在 MCXN947VNLT(100 引脚设备)上使用 DCDC 和禁用 LDO 稳压器 如 [UG10101/ 图 8] 所述,当我们将 VDD_LDO_CORE 引脚 (13) 连接到 VDD_Core (12) 时,将会破坏磁芯! 原因引脚 13 具有多功能用途:VDD_LDO_CORE/VDD/VDD_P2 DCDC 将无法工作,因为核心电压将超出限制! 当我们让引脚 13 保持浮空时,DCDC 工作正常,但问题是: 如何正确连接该引脚:OPEN/VDD/GND? 赫尔穆特-诺伊马克(Helmut Neumark),敬上 Re: mcxn947 external dcdc powered 你好@TomC818 您可以直接提供 VDDCORE(没有低压差线性稳压器(LDO) 或 DC-DC) Harry_Zhang_0-1750511493399.png BR 哈利 Re: mcxn947 external dcdc powered 我还想问如何在代码中禁用内部调节器?设计指南中提到,如果内部调节器被旁路,则应禁用调节器。 Re: mcxn947 external dcdc powered 我也有同样的问题,后来意识到在 100 引脚的设备上,它是 VDD 引脚。因此,将其连接至 VDD
View full article
LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Hi, I am testing the SFP+ port with 1G Modules since it does have backward compatability but I am unable to make it work in LS1056ARDB. Does it work? or do we need to modify any RCW values, if we need to modify then please let me know the information. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver This works, I see so many people asking about 1G, here the solution from vladimir worked for me, now the 1G 10G switching is happening dynamically based on SFP modules.. That's a great thing.. Thank you vladimir and yipiwang.. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Thank you vladimir and yiping, the upstream driver has everything in it, everything is working fine Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver > In order to use 1G SFP, you need to use backplane driver, the serdes needs to be configured as 1000base-x This is not correct, you do not need to use the backplane driver (described here https://docs.nxp.com/bundle/UG10143/page/AN14142_topics/AN14142_overview.html) for 1G SFP modules. The 1G link mode which is negotiated using clause 73 over copper backplanes is called 1000Base-KX, notice the K (bacKplane). Whereas SFP modules typically use 1000Base-SX (short range fiber optics), 1000Base-LX (long range fiber optics) or SGMII (modules with PHY inside, for conversion to RJ45). The selection among these operating modes is done by phylink once it is determined which module was inserted, by reading the EEPROM. At the PCS layer, 1000Base-SX and 1000Base-LX are the same and are simply called 1000Base-X. The same PCS handles 1000Base-X and SGMII, there is just one setting denoting whether to use SGMII format for auto-negotiation (with PHYs inside RJ45 SFP modules, or with on-board PHYs) or the 1000Base-X format (with the link partner from the remote end of the fiber). The only requirement which has to be fulfilled by the device driver is to use the phylink framework. DPAA1 has 2 Ethernet driver variants as explained here: https://docs.nxp.com/bundle/UG10143/page/topics/introduction_019.html The "private"/"SDK" version of the DPAA1 Ethernet driver does not use phylink, thus it does not support the CONFIG_SFP framework and cannot reconfigure in response to the insertion of SFP modules. The "upstream" version of the DPAA1 Ethernet driver, also distributed with Linux Factory, supports this capability. But it is further limited by board support. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Hi Yipingwang, I got your info, we have got the custom board in bring up, I would not need auto negotiation still do I need backplane drive for this setup which I explained because I got to know the backplane driver needed incase of autonegotiation. Please confirm and also your document described about 10G not 1G. If there is any similar dts available in the already got repo, please point it. As of now we enabled RCW serdes as sgmii interface and the necessary clock like 1.25M. Then in the dts, physical connection as sgmii and fixed link with 1000. The interface seems up, I got that the TX bytes increase even in ethtool but I don't see any packets really coming out of that. Fixed speed link is enough for us, pls confirm still backplane driver needed or not and also the dts changes if required. Thanks, Gopi Krishna M Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver No backplane driver for u-boot. Please refer to  https://www.nxp.com.cn/docs/en/application-note/AN12572.pdf Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Hi, Thank you for the source, one final thing is whether it can be tested through u-boot cli apart from kernel back plane driver? Please let me know, because in the bring up stage we will we be having only u-boot, We would like to make sure. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver The latest Backplane Linux Kernel 6.1 is provided in tag BACKPLANE-V6.1-R2.0(https://github.com/nxp-qoriq/linux-extras/releases/tag/BACKPLANE-V6.1-R2.0) You could clone the source code with the following commands. $ git clone https://github.com/git/nxp-qoriq/linux $ git checkout -b BACKPLANE-V6.1-R2.0 BACKPLANE-V6.1-R2.0 Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Thank you for the info, Could you please let me know how the backplane driver can be built? whether its a part of u-boot? and do we need to changes anyting in the driver to make it work other than serdes configuration in RCW? please let us know. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver In order to use 1G SFP, you need to use backplane driver, the serdes needs to be configured as 1000base-x Please refer to the attachment for the spec which FMAN supports.     Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Hi, Our custom board based on ls1046a serdes directly connected to SFP cage and serdes is configured as SGMII, our HW designer says that this connection directly should work without phy or XFI with 1G SFP, even though auto link may not work, but manually setting the link should work. We are in design state and we would like to confirm with you people. Could you please confirm? Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver If configuring SERDES lane as SGMII mode, a SGMII PHY is required on the target board. If configuring it as XFI, a 10G SFP+ module is required.  1G SFP is not supported. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver Hi, Thanks for your comments, In our custom board based on ls1046ardb, we take SERDES1 SGMII directly to SFP Cage(without XRET Timer) where we support only 1G(NO 10G), SFP interfcae, In that case, SERDES shoud be defined as SGMII in RCW and then it shoud work right? or do we need to do anything else? please clarify. Re: LS1046ARDB board SFP+ module not working with 1G SFP tranceiver If configuring SERDES 1 lane C as SGMII mode, a SGMII PHY is required on the target board. If configuring it as XFI, a 10G SFP+ module is required. It seems that this doesn't meet the requirement of your product to configure the Ethernet interface to support both 1G and 10 G, because you only can choose SERDES 1 lane C in one mode. One common Optic SFP+ that does do both 1G and 10G, such as Intel E10GSFPSR and Intel E10GSFPLR, maybe you need to contact Intel for detailed information of these products. XFI is always 10G. If you need speed switching and can use a PHY, for example choosing Aquantia (NBASE-T Alliance) or Broadcom (MGBASE-T Alliance). On LS1046ARDB, XFI 9 working with Aquantia AQR107 supports 10G/5G/2.5G/1G/100M.
View full article
S32K344 上の SWO と S32 Design Studio こんにちは。S32 Design Studio を使用して SWO を実行する方法の完全な例はありますか?pinMUX、クロックなどをどのように設定すればよいですか? J-link および PEMicro デバッガーで複数の例を試しましたが、成功しませんでした。ITM 構成にはretarget_itm.c ライブラリも使用しています (NXP から提供)。 Re: SWO on S32K344 with S32 Design Studio こんにちは@Julián_AragónM 、この問題は解決されましたか?私も同じ問題に遭遇しています。TPIU レジスタを設定した後に MCU がハード フォールトに入り、J-Link もこれらのレジスタにデータを書き込むことができません。これは何らかのセーフティ保護のためでしょうか?これらの TPIU レジスタに書き込む前に実行する必要がある追加の構成はありますか?いかなるご助力やご意見もいただければ幸いです。 Re: SWO on S32K344 with S32 Design Studio こんにちは@jakub-holoubek さん、 コミュニティを通じてプライベートメッセージを送信しました。 Re: SWO on S32K344 with S32 Design Studio こんにちは@Julián_AragónM 、わかりました、ありがとう。 🙂 私はその retarget_itm ライブラリを知っています。しかし、TPIU 関連のレジスタに何らかの問題があるのではないかと疑っています。これらはおそらくデバッガー自体によってアクセスされます: Cortex m7 TPIU registersCortex m7 TPIUレジスタ コードから設定しているCASE、MCU はハード フォールトになります。また、デバッガーを接続し (J-Link、PEMicro、Lauterbach を試しました)、デバッガーの設定を通じて SWO を有効にしたいCASEにも同じことが起こり、MCU がハード障害になります。 Re: SWO on S32K344 with S32 Design Studio こんにちは@jakub-holoubek さん、 返信が遅くなり申し訳ございません。これは、トレースの実装とアーキテクチャの問題である可能性があります。現在、SW チームと内部的に議論中です。他に何かあれば、お知らせします。 現時点では、prinft ITM を使用して S32DS で新しいプロジェクトをCAN作成しますが、retarget_itm ライブラリは期待どおりに動作しません。 よろしくお願いします、 ジュリアン Re: SWO on S32K344 with S32 Design Studio こんにちは、 @Julián_AragónM さん、 はい、S32K3-T-BOXボードを使用しています。これらの TRACE 信号は ETM インターフェースに有効です。ただし、JTAG_TDO ピンを介して ITM を使用して通信する必要があるSO、JTAG コネクタにルーティングされます。このピンは、JTAG の代わりに SWD プロトコルが使用される場合 (私のCASE) に、SWO 通信に使用されます。 Re: SWO on S32K344 with S32 Design Studio こんにちは@jakub-holoubek さん、 S32K344 評価ボードを使用していますか?デフォルトでは、すべての TRACE 信号は無効になっています。 SWO-TRACE-K344EVB.png よろしくお願いします、 ジュリアン Re: SWO on S32K344 with S32 Design Studio こんにちは@Julián_AragónM 、 返信ありがとうございます。そのチュートリアルを確認しました。私が抱えている問題の 1 つは、TPIU レジスタの書き込み/読み取りを実行しようとすると、MCU がハード フォールト状態になることです。 たとえば次のコード: *((volatile unsigned *)(ITM_BASE + 0x400F0)) = 0x00000002; /* "Selected PIN Protocol Register": Select which protocol to use for trace output (2: SWO NRZ, 1: SWO Manchester encoding) */ *((volatile unsigned *)(ITM_BASE + 0x40010)) = SWOPrescaler; /* "Async Clock Prescaler Register". Scale the baud rate of the asynchronous output */ これらのレジスタの 1 つを設定しようとすると、MCU はハード フォールト状態になります。Arm M7 コアの リファレンス・マニュアル で、TPIU は M7 コアで構成されていないことがわかりました。これを確認できますか? または、TPIU 関連のレジスタに書き込む前に設定する必要がある他のレジスタはありますか? Re: SWO on S32K344 with S32 Design Studio こんにちは@jakub-holoubek さん、 これはSEGGERさんへの質問だと思います。S32DS でこれを設定する具体的な例は他にありませんが、次の投稿をガイダンスとして使用できます。 チュートリアル: ARM Cortex-M および Eclipse でシングル ワイヤ出力 SWO を使用する | Eclipse 上の MCU 。 PEmicro フォーラムトピック: S32DS の Multilink ACP Rev.B 使用時の ITM-printf の問題 解決済み: S32k324 の SWV (ITM --> SWO) が動作しない - NXP コミュニティ また、SEGGER のナレッジ ベースには、J-Link SWO Viewer 専用のページがあります: J-Link SWO Viewer - SEGGER ナレッジ ベース& UM08001 J-Link / J-Trace ユーザー ガイド - SEGGER ナレッジ ベース。 よろしくお願いします、 ジュリアン Re: SWO on S32K344 with S32 Design Studio たとえば、この記事では、 PEmicro の GDB サーバーによって有効化される S32 Design Studio 内のシングル ワイヤ出力 (SWO) のサポートについて説明しています。ソースなどの詳細がさらにあれば便利です。
View full article
RSA 使用示例 我正在开发 s32k344 板,我正在尝试开发一个使用 RSA 的数字签名验证例程。目的是从外部导入 RSA 公钥,用它来验证加载到闪存中的文件的签名。 是否有示例代码说明如何导入 RSA 密钥和执行 RSA 加密操作? 谢谢 Re: RSA usage examples 早上好,我的 K32L2B31VLH0A 也遇到了类似的问题。我想使用2048字节的RSA或ECDS来验证签名,这应该需要更少的资源才能获得相同的结果。我的问题是内存不足,至少恩智浦 mbed TLS 库是这么返回的。该微控制器是否有可用的示例,或者 32 KB RAM 是否不够用?我有四个产品使用了这种微控制器,我需要了解是否需要更换微控制器,或者是否有可行的解决方案。我需要的是能够验证签名固件升级。 Re: RSA usage examples 你好@niccolentini 请参见所附示例。 环境: S32K344 配有 HSE FW 0_2_40_0 S32DS 3.5 RTD 4.0.0HF01 EB 29.0 此致, Lukas
View full article
S32K311 引导加载程序跳转到应用程序问题 你好 我遇到过 S32K311 引导加载程序跳转到应用程序的问题。目前无法正常跳跃。我指的是论坛上的帖子,如 从 S32K312 引导加载程序到应用程序跳转 DS3.5 RTD300 的示例 - NXP 社区 统一引导加载器演示 - NXP 社区 已解决:S32K312 引导加载程序跳转到应用程序问题 - NXP Community 这些方法已经尝试过,但是无法正常跳转,ld 链接器文件也是引用示例配置的, 唯一成功的跳转方法是分别将启动程序和应用程序程序下载到 MCU,并使用 S32DS 调试启动程序。当我直接运行它们时,我无法跳转到应用程序。当我在跳转函数处断点并停止运行时,我可以跳转到应用程序程序。 试着用延迟一段时间再跳,不行,只能断点停止,然后再跑到应用程序中去 EvaKi_2-1721800907232.png 与其他 S32K3x 系列相比,S32K311 程序跳转是否特别? S32K311 引导加载程序能否成功跳转到应用程序的演示参考? S32K31XEVB-Q100 EvaKi_0-1721800178203.png EvaKi_1-1721800372699.png Re: S32K311 Bootloader Jump to Application issue 嗨,团队、 请告诉我这个问题的解决方案。我正试图从布尔加载器跳转到应用程序。但这并不奏效。 这是引导加载程序的链接文件。 存储器 { ITCM (RWX) :ORIGIN = 0x00000000,LENGTH = 0x8000 pflash_boot (rx) :ORIGIN = 0x00400000,LENGTH = 0xA000 fw_ver_config (rx) :ORIGIN = 0x00419FE0,LENGTH = 0x20 /* 配置管理器 1Kb */ 配置(RX) :ORIGIN = 0x0041A000,LENGTH = 0x400 PFLASH_BAF(RX) :ORIGIN = 0x004F4000,LENGTH = 0xC000 DFLASH (RX) :ORIGIN = 0x10000000,LENGTH = 0x10000 DTCM (RW) :ORIGIN = 0x20000000,LENGTH = 0x10000 sram0_stdby (rw) :ORIGIN = 0x20400000,LENGTH = 0x2000 SRAM (RW) :ORIGIN = 0x20402000,LENGTH = 0x6000 } 这是应用程序的链接文件 存储器 { ITCM (RWX) :ORIGIN = 0x00000000,LENGTH = 0x8000 pflash_app (rx) :ORIGIN = 0x00480000,LENGTH = 0xFFE0 fw_ver_config (rx) :ORIGIN = 0x0048FFE0,LENGTH = 0x20 配置(RX) :ORIGIN = 0x00490000,LENGTH = 0x400 PFLASH_BAF(RX) :ORIGIN = 0x004F4000,LENGTH = 0xC000 DFLASH (RX) :ORIGIN = 0x10000000,LENGTH = 0x10000 DTCM (RW) :ORIGIN = 0x20000000,LENGTH = 0x10000 sram0_stdby (rw) :ORIGIN = 0x20400000,LENGTH = 0x2000 SRAM (RW) :ORIGIN = 0x20402000,LENGTH = 0x6000 } 我使用以下代码跳转到应用程序。 __disable_irq(); SCB->VTOR = 0x00480000; func = *(uint32_t volatile *)(0x00480000 + 0xC); func = *(uint32_t volatile *)(((uint32_t)func) + 0x4); func = ((((uint32_t)func)& 0xFFFFFFFFU)); // Reset_Handler+1 -- 需要>--> 以避免硬故障 (* (void (*) (void)) func)(); 但跳转到应用程序的情况并没有发生。 请您在这方面支持我。 谢谢! 基兰 回复: S32K311 Bootloader Jump to Application issue 已解决
View full article
VR5510チップは通常モードで再起動します お返事ありがとうございます。さて、2つの質問があります。 1. このレジスタは図のように構成されているでしょうか?選択した PMIC モデルは mvr5510amdales です。このモデルは工場出荷前に焼き尽くされており、再度焼き付けることはできません。 2. 提供された画像に従って設定する必要がある場合、使用前に「KITVR5510SKTEVM バーンインボード」を使用して空のチップを書き込む必要がありますか。 ご協力に改めて感謝申し上げます。 Re: The VR5510 chip restarts in normal mode こんにちは@LONGGANGSU 、 詳細をありがとうございます。MVR5510AMDALES に工場でプログラムされた OTP メモリがある場合、通常は再プログラムできません。設定を空のチップに書き込むには、はい、続行するには KITVR5510SKTEVM ボードが必要です。念のため、データシートまたはベンダーに具体的な部品番号と OTP ステータスを確認してください。 よろしくお願いします、 ジェームズ・クロス Re: The VR5510 chip restarts in normal mode わかりました、ありがとう。 Re: The VR5510 chip restarts in normal mode 1. このレジスタは図のように構成されているでしょうか?選択した PMIC モデルは mvr5510amdales です。このモデルは工場出荷前に焼き尽くされており、再度焼き付けることはできません。 【gw】のこのSBCはOTP化されており、OTPのレジスタ内容は再度変更できません 2. 提供された画像に従って設定する必要がある場合、「KITVR5510SKTEVMバーンインボード」を使用して空のディスクを書き込む必要がありますか? 【gw】 自分の OTP が必要な場合は、A0 バージョンの空チップを選択できます。
View full article
CodeWarrior Tap 模拟器无法识别 我在调试 lx2080 目标板时遇到了以下问题。即使我使用网络端口或 USB 进行调试,模拟器仍然显示无法连接。同步的 CodeWarrior 连接服务器遇到了以下问题。 Zhoute_0-1753234432318.png Zhoute_1-1753234581325.png Zhoute_2-1753235074494.png 您遇到过这样的问题吗? 我尝试了许多官方文件和互联网上提供的方法,但都没有奏效。 LX2160A-RDB Re: The CodeWarrior Tap simulator is unable to recognize (bin) 7% delete all (bin) 8% config cc cwtap (bin) 9% show cc 每次都要删除所有 连上G版本试一下,USB连接,H版本,firmware变更了 Re: The CodeWarrior Tap simulator is unable to recognize @June_Lu  用USB直接连接到PC上,用下面的命令,结果如下图所示: Zhoute_0-1753361540331.png Re: The CodeWarrior Tap simulator is unable to recognize 用USB直接连接到PC上,用下面的命令,看是否工作正常 (bin) 8 % config cc cwtap (bin) 9 % show cc Re: The CodeWarrior Tap simulator is unable to recognize @June_Lu 感谢,软件已经升级到指定版本了 Zhoute_0-1753353660039.png 启动CCS后,按照您提供的输入指令,出现如下情况: Zhoute_1-1753353805264.png 请问该如何定位问题呢? Re: The CodeWarrior Tap simulator is unable to recognize 请将其更新至 CodeWarrior IDE 11.5.12 版本。 在恩智浦网站上。 My NXP Account->Software->Software Licensing and Support->View accounts->Product List->CodeWarrior for QorIQ LS Series ARMv8 ISA-> 请下载更新包 com.freescale.armv8.11.5.12.GA.Win.updatesite.221209.zip 请打开 C:\Freescale\CW4NET_v2020.06\ cw_armv8\ fsl_eclipse.bat 中的 CodeWarrior,然后安装来自 Help-> 安装新软件-> Add-> 存档中的更新代码包。 然后尝试执行 ccs 命令。 你可以用中文回答。 Re: The CodeWarrior Tap simulator is unable to recognize @June_Lu非常感谢你的回复。 1.我可以 ping 到 CWTAP,(Windows-cmd.exe 使用 ping FSL082481 命令,没问题)。 2.我们有两个 CWTAP 仿真器,一个是 ,另一个是 3. 我的 CodeWarrior IDE 版本是: Zhoute_0-1753338785256.png 最新的代码包也已导入。 Re: The CodeWarrior Tap simulator is unable to recognize 您能 ping 一下 CWTAP 吗? 您的 CWTAP 版本是什么? 您的 CodeWarrior IDE 版本是什么? 谢谢! Re: The CodeWarrior Tap simulator is unable to recognize @June_Lu 你能不能把 CodeWarrior Tap 模拟器的 PIN 定义发给我(在 Jtag 部分)?我们目前正在通过特定信号(TDI/TDO/TCK/TMS/RESET/VDD/GND)连接目标板lx2080。CodeWarrior Tap 模拟器一直在显示上述错误。 当我点击连接按钮时,会出现以下问题 Zhoute_0-1753264228307.png 而且 CodeWarrior Tap 模拟器的指示灯(运行/暂停)一直保持橙色,这不是官方文档中提到的红色。 我期待着您的答复,谢谢。 The CodeWarrior Tap simulator is unable to recognize 嗨,June_Lu,谢谢你!我用了你的建议,但没有用,下图就是问题所在,我不知道为什么。我搜索了相关错误(CC 不存在),但没有解决问题。 Zhoute_0-1753251599243.png @June_Lu Re: The CodeWarrior Tap simulator is unable to recognize 在 CCS 中,请运行: (bin) 7% 删除所有 (bin) 8% config cc cwtap:10.193.21.52//(这是您的 CWTAP 以太网 IP)。 (bin) 9% show cc (bin) 10% ccs::config_chain {lx2160a dap} (bin) 11% display ::ccs::get_config_chain (bin) 12% ccs::reset_too_debug
View full article
使用 eDMA 生成媒体时钟 大家好 我正在使用GMAC PPS 模块和eDMA 生成时钟。 从文档中我了解到,当 GMA C 系统时间大于或等于配置的目标时间时,将钳位 mcg r_dma_req_o [3:0] 信号。 sathishkumar_sunmugavel_0-1753271626406.png sathishkumar_sunmugavel_1-1753271663068.png 我的目标是使用这个信号来触发eDMA,通过将值复制到以下寄存器来自动更新下一个目标时间: mac_pps0_target_time_nanoseconds mac_pps0_target_time_seconds 我想澄清一下: 如何将 mcgr_dma_req_o 连接到 DMA 控制器?eDMA 如何接收外设请求? 这些信号是内部路由到 MCU 中的 DMA MUX,还是需要配置任何特定路由? 如果有人有任何此类设置的示例、参考配置或应用笔记,请分享。 预期的行为是: 每当 GMAC 系统时间达到当前目标时间时,mcgr_dma_req_o 信号就会触发信号 DMA 传输,从而更新下一次 PPS 事件的目标时间。 提前感谢您
View full article
k32W温度センサ不安定 現在、K32W041 には 2 つの問題があります。 温度センサの不安定性 温度センサの不安定性 温度センサは不安定で、Vbat で測定したときと同じように波打っているようです。15ビット以上 この波紋を軽減するには、追加の情報が必要です。 どのようなタイプの温度センサが使用されていますか? この測定回路はどのように設計されているのでしょうか? 波紋を引き起こす Vbat と関係があるのでしょうか? HW-Open-Source Re: k32W temperature sensor instable こんにちは、 ご不便をおかけして申し訳ございませんが、内部温度センサに関する情報は、ユーザー マニュアルの第 28 章に記載されています。 これが要件を満たさない場合は、外部センサの使用をお勧めします。 よろしくお願いいたします。 アナ・ソフィア。 Re: k32W temperature sensor instable こんにちは、ソフィアさん。返信ありがとうございます。 マニュアルには内部温度センサの動作については何も説明されていません。 温度センサについては Vbat に大きく依存していることがわかりました... それは言及されていません! 問題を解決するには、内部温度センサに関する詳細な情報が必要です。 最初の投稿の質問への回答は問題の解決に役立ちます Re: k32W temperature sensor instable こんにちは、 あなたの調子が良いといいのですが。 K32W061/041 は、温度監視用に ADC チャネル 7 に内部コネクテッドされた出力を持つ線形温度センサを提供します。 使用方法の詳細については、第28章「温度センサ」に記載されています。 UM11323 K32W061/K32W041 ユーザーマニュアル。 ADC は、6 つの外部出力、1 つの温度センサ、および VBAT 監視用の 1 つのチャネルを含む、最大 8 つのチャネルにわたる入力多重化をサポートします。温度センサは ADC チャネル 7 にコネクテッドされ、電源モニター (VBAT を監視) は ADC チャネル 6 にコネクテッドされます。 温度センサと VBAT チャネル間の潜在的な相互作用は、ADC の構成方法やカスタム デザインのその他の要素によって異なります。 このコミュニティ投稿をチェックすることをお勧めします: K32W061、QN9090、またはJN5189を使用して初めてPCBを正しく構築する最良の方法 よろしくお願いいたします。 ソフィア。
View full article
I2C_SCLS 中的辅助引脚功能 嗨,团队、 我们正面临S32K311NHT0MPAST的问题 您能否确认以下 FLEXIO 引脚是否可以配置为 I2C。 第 43 号引脚(PTC 17)(FXIO_D2)作为 I2C SCL 引脚 44(PTC 16)(FXIO_D15)作为 I2C SDA   请与我们分享将 flexio 配置为 I2C 的示例代码。   我们已经建好了 PCB,正处于固件开发阶段。最初,我们在这些引脚上使用了默认的 I2C。后来有人告诉我们,这些引脚上的 I2C 只能在 4 线模式下配置为 I2C(我们还没有实现)。期待您尽快回复,解决这个问题。 Re: Secondary Pin functionality in I2C_SCLS HI 对不起,如您所知,SDAS 和 SCLS 适用于四线模式。 RTD 中没有 S32K311 示例项目。有关 Flexio_I2C 的引脚配置,我建议你参考 i2C_ IP_example_s32K344(驱动程序)和 i2C_example_S32K344(驱动程序)和 i2C_example_S32 K344(MCAL)。 为 Mcl 组件中的 Flexio 引脚选择 PIN_2 和 PIN_15。 祝好, Robin ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"ACCEPT AS SOLUTION" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题并参考已关闭的主题。 ------------------------------------------------------------------------------- Re: Secondary Pin functionality in I2C_SCLS 虽然某些 S32K3 微控制器具有可模拟 I2C 的灵活 I/O (FlexIO),但需要查看 S32K311NHT0MPAST 数据表,以确认引脚 43 (PTC17) 和引脚 44 (PTC16) 是否专门支持这种配置。这些引脚被指定为 FXIO_D2 和 FXIO_D15,它们是 FlexIO 引脚,因此极有可能被配置为 I2C 通信。这些引脚上的 I2C"4 线模式" 的说法并不寻常,因为标准 I2C 是 2 线协议。这更有可能是指特定的硬件或软件实施细节,可能与不同的外设有关,也可能是对配置选项的误解。我们建议查阅官方 S32K3xx 参考手册和特定的 S32K311 数据表,了解详细的引脚多路复用选项和 FlexIO 外设功能。有关示例代码,您应查找 NXP 的 S32K3 软件开发工具包 (SDK) 示例,因为它们通常包含 FlexIO I2C 驱动程序代码 www mymilestonecard com
View full article
Mac 1.91版本能将我的工程文件输出成可供windows电脑运行的exe或是web文件吗? 我的电脑是mac m1芯片,运行的GUI GUIDER版本为最新版1.91,我制作了一个工程,我试图通过Deepseek或是其他ai学习如何将这个工程输出成可供windows独立运行(不需要windows下载GUI GUIDER)的exe文件,或是web文件。但是ai都说能在输出工程文件时选择输出平台以达到这个目的,但我的版本做不到。我想请问这是否属实,亦或是有没有办法能过做到我的需求 Re: Mac 1.91版本能将我的工程文件输出成可供windows电脑运行的exe或是web文件吗? Hi @Syutakuryuu  Mac 上 可以导出 Web 文件。   Mac 上 不能直接导出 Windows EXE,只能导出 Mac 可执行文件;如果你要 Windows 的 .exe,需要到 Windows 环境里重新构建。   BR Harry  
View full article
PTN3460I 长寿命 EOL 您好, 能否告诉我 PN: PTN3460 和 PTN3460(I) 的使用寿命或预计报废时间? 谢谢! LT Re: PTN3460I Longevity EOL 找到此链接: https://community.nxp.com/t5/Other-NXP-Products/PTN3460/m-p/1978944,很有帮助
View full article
RT1170 での DHCP のデバッグ こんにちは、 EVK を使用して RT1170 CM7 コア上に TCP サーバーをセットアップしようとしています。テスト コードでは、インターフェースは起動しているものの、DHCP によって IP が割り当てられていないことがわかります。samples/net/ ディレクトリから DHCPv4 サンプルも試しましたが、IP を取得できません。これをデバッグするにはどうすればいいでしょうか?デバイスの起動後、DHCP 固有のログは表示されません。 DHCPの状態を確認するためにログ記録を追加しましたが、状態1(NET_DHCPV4_INIT)のままになってしまいました。 [00:00:00.051,000] phy_mii: PHY (0) ID 1CC816 [00:00:00.053,000] eth_nxp_enet_mac: phy_configure_link がエラーで失敗しました: -120 [00:00:00.054,000] eth_nxp_enet_mac: リンクがダウンしています [00:00:00.054,000] eth_nxp_enet_mac: phy_configure_link がエラーで失敗しました: -120 *** Zephyr OS ビルド v4.2.0-rc1-129-gfdd02c5105d2 を起動しています *** [00:00:00.055,000] net_dhcpv4_client_sample: dhcpv4クライアントを実行する [00:00:00.055,000] net_dhcpv4_client_sample: イーサネットで開始: インデックス=1 DHCP状態: 1 [00:00:03.156,000] phy_mii: PHY (0) リンク速度 100 Mb、全二重 [00:00:03.156,000] eth_nxp_enet_mac: リンクがアップしています DHCP状態: 1 何かご指摘があればいただければ幸いです。 ありがとう! ヴァルン Re: Debugging DHCP on RT1170 参考にさせていただきありがとうございます! ヴァルン Re: Debugging DHCP on RT1170 @vareddy_Amzn 、参考までに i.MX RT1170 Cortex-M4セカンダリコア上のZephyrネットワークスタックに関する記事はこちら よろしくお願いいたします。 Re: Debugging DHCP on RT1170 こんにちは、デレク。 それはうまくいきました。助けてくれてありがとう! ヴァルン Re: Debugging DHCP on RT1170 こんにちは@vareddy_Amznさん、 はい、それは最新リリース v4.2.0 のコミットです。確認してくれてありがとう Re: Debugging DHCP on RT1170 こんにちは、デレク。 詳細なガイドをありがとうございます!私は EVKB を使用しており、実際に J32 に接続しています。最新の v4.2 にアップグレードしてみて、結果をお知らせします。確認ですが、これは 4.2 のリリース バージョンです (コミット: https://github.com/zephyrproject-rtos/zephyr/commit/413b789deb391d3a37d06b463288a5fe765ee57e )? ありがとう! ヴァルン Re: Debugging DHCP on RT1170 こんにちは、 @vareddy_Amznと@WWarne 、 まず、使用しているボードの部品番号リビジョンをCAN確認できますか?2 つのリビジョンがあり、それぞれ異なる 10/100M イーサネット PHY を使用します。Zephyr のデフォルトは最新の MIMXRT1170-EVKB です。以前の部品番号は MIMXRT1170-EVK で、Zephyr では Rev A と呼んでいます。また、これには 10/100M イーサネット接続 (EVKB では J32、EVK(A) では J3) を使用していると想定しています。 ログを見ると、最新のZephyrリリースではなく、古いコミットfdd02c5105d2を使用しているようです。このコミットでdhcpv4_clientサンプルをテストしたところ、EVKBリビジョンにも問題があり、ボードがIPアドレスを取得できないことが分かりました。 [00:00:00.051,000] phy_mii: PHY (0) ID 1CC816 [00:00:00.053,000] eth_nxp_enet_mac: phy_configure_link failed with error0 [00:00:00.054,000] eth_nxp_enet_mac: Link is down [00:00:00.054,000] eth_nxp_enet_mac: phy_configure_link failed with error0 *** Booting Zephyr OS build v4.2.0-rc1-129-gfdd02c5105d2 *** [00:00:00.055,000] net_dhcpv4_client_sample: Run dhcpv4 client [00:00:00.055,000] net_dhcpv4_client_sample: Start on ethernet: index=1 [00:00:03.155,000] phy_mii: PHY (0) Link speed 100 Mb, full duplex [00:00:03.155,000] eth_nxp_enet_mac: Link is up しかし、最新のアップストリーム Zephyr リリース v4.2 を使用すると、この問題は解決されます。 [00:00:00.051,000] phy_mii: PHY (0) ID 1CC816 [00:00:00.054,000] eth_nxp_enet_mac: Link is down *** Booting Zephyr OS build v4.2.0 *** [00:00:00.055,000] net_dhcpv4_client_sample: Run dhcpv4 client [00:00:00.055,000] net_dhcpv4_client_sample: Start on ethernet: index=1 [00:00:03.155,000] phy_mii: PHY (0) Link speed 100 Mb, full duplex [00:00:03.155,000] eth_nxp_enet_mac: Link is up [00:00:06.423,000] net_dhcpv4: Received: 192.168.86.165 [00:00:06.423,000] net_dhcpv4_client_sample: Address[1]: 192.168.86.165 [00:00:06.423,000] net_dhcpv4_client_sample: Subnet[1]: 255.255.255.0 [00:00:06.423,000] net_dhcpv4_client_sample: Router[1]: 192.168.86.1 [00:00:06.423,000] net_dhcpv4_client_sample: Lease time[1]: 86400 seconds v4.2 にアップデートして問題が解決するかどうか確認していただけますか?ありがとう Re: Debugging DHCP on RT1170 こんにちは、WWarneさん 私は MCUXpresso ではなく、Zephyr ビルド システムを使用しており、参照していた例は DHCPv4 サンプル アプリケーションです: https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/net/dhcpv4_client よろしくお願いします! ヴァルン Re: Debugging DHCP on RT1170 こんにちは、ヴァルン RT1170 を使用しており、SDK の例で同じ問題が発生しているようです。同じエラーが表示される SDK の例はどれを選択しましたか? WWarne_0-1755800823557.png 上記は RT1170 のオプションのリストです。 MCUXPresso Eclipse ベースまたは VSCode を使用していますか?どのバージョンの SDK を使用していますか? よろしくお願い申し上げます。
View full article
将 srec 闪烁至 S32K344 我想在 PCB 制造过程中发送闪存图像,让他们在开发过程中闪存。我已经在项目 > properties > 版本设置中找到了如何生成 Flash 镜像,但我不熟悉除了将 src 文件上传到 MCU 之外是否还需要采取任何具体步骤。 Re: Flashing srec to S32K344 你好@pb632146 本文档介绍了如何将 srec 文件加载到 MCU: https://community.nxp.com/t5/S32-Design-Studio-Knowledge-Base/HOWTO-download-separate-elf-srec-hex-file-to-microcontroller/ta-p/1127159 此致, Lukas
View full article
NTAG5 链接 ED 从未设置 你好, 我正在使用指向 1 的 NTAG5 链接。)收获能量 2.)为 MCXC041 版本 NFC 通信。 但是我的问题是,当我将 SYNCH_DATA_BLOCK 设置为 0x00(第一个区块)并写入第一个块(恰好是 4 字节)时,ED 永远不会被设置(又名。低)。 我的配置 能量收集/事件检测 (0x3D) EH_CONFIG: 0x3D-> 能量收集,采用 2.7mA、3V 且无功率级检查 ED_CONFIG: 0x04 -> NFC 至 I2C 直通 ,但也尝试过写入 SYNCH_BLOCK (0x0C ) Config_1 (0x37): 0x0B -> SRAm 通过模式,SRAM 可用,NFC 至 I2C 传输方向 终端/同步块 (0x38) 设置为 0x00(第一区块) 是否知道为什么采用这种配置并写入 SRAM (0xD3) 后,ED 始终为低电平? 我使用 Ntag5 Link 开发板 OM2NTP5332。 Re: NTAG5 Link ED Never set 你好,@no4rgument,日安! 为了坚持直通模式(NFC 到 I2C)的行之有效的行为,NFC 设备应写入所有 256 字节的 SRAM,并且主机也应读取所有 256 字节,因为任何其他操作都可能导致意外行为(例如本例中)。 请注意,除 ED 引脚外,写入 SRAM 的数据就绪时也会设置状态寄存器的 SRAM_DATA_READY 位,并且仲裁器会将接口锁定为 I2C。 致以最诚挚的问候, Daniel Re: NTAG5 Link ED Never set 感谢您提供双向数据交换 pdf,这对我们很有帮助。但我发现,只有写入到 3Fh 的每个数据块,ED 才会被设置,而不是只写入 3Fh 数据块。但是如果我通过 I2C 只读区块 3Fh,则会 RESET。 那么,在直通模式下,就不可能写入较少的数据块来提高 ED 值吗? Re: NTAG5 Link ED Never set 你好,@no4rgument,日安! 能否详细介绍一下您的设置和应用目的? 您目前是否将 MCXC041 用作 NTAG5 的 I2C 主机?如果是,您是如何通过 NFC 与标签通信的? 请注意,SYNCH_DATA_BLOCK 的第 0 和 1 字节定义了用户存储器中区块的地址,该区块在仅通过 NFC 读取或写入时将激活 ED 引脚。这两个字节是否都设置为 0x00h? ED_CONFIG 块必须设置为 0x0B(从 SYNCH_ BLOCK 读取)或 0x0C(向 SYNCH_ BLOCK 写入),以便在读取用户内存块或写入用户内存块时进行检测。请参阅 NTAG 5 链接的 第 8.1.3.19 节 - 符合 NFC 论坛的 I2C 桥接器 。 不过,如果您的应用目的是实现直通式通信,请参阅NTAG 5 - 双向数据交换,了解在这种情况下必须遵循的详细流程。 致以最诚挚的问候, Daniel
View full article
S32K146 送信遅延 こんにちは 当社は、CANFD 通信機能を備えた S32K146 MCU をベースにブートローダ ソフトウェアを開発しています。しかし、私たちを本当に困惑させる問題に遭遇しました。それは、ECU が柔軟な遅延でメッセージを送信し、テストからの要求を受信してから 1 ミリ秒以内に肯定応答を CAN バスに送信することもあれば、遅延が非常に「大きく」、CAN_TP 送信タイマー制限 (As) を超える 224 ミリ秒になることもあります。誰かこの問題を解決するのを手伝ってくれませんか? 当社の ECU に関する情報は以下に示されており、添付の写真も掲載されています。 1. 2 つのメッセージを受信するには 2 MB を使用する必要があります (物理アドレスの ID: 0x714、機能アドレスの ID: 0x7DF)。 2. 1つのメッセージを送信するには1MBを使用する必要があります(ID:0x794) 3. CANFD調停ボーレートは500K/秒、データフィールドボーレートは2MB/秒 4. フレーム DLC は 64 バイトです。 5. ブートローダ ソフトウェアでは、受信または送信に割り込みを使用せず、代わりにポーリング タイプを使用します。 6. 私たちのトランシーバはTLE9263です 7. CANクロックソースはSYS_CLK(80MHZ)です 8. MB を書き込む直前に、Can_write 関数にモニター ポイントを配置します。ロジック アナライザーを使用して、モニター ポイントから CANTx PIN にメッセージが送信されるまでの期間を測定すると、次の結果が得られます。MB を書き込んだ後、CAN Tx PIN に肯定的な応答を送信するには約 223.95 ミリ秒かかります。(添付の画像を参照してください)。 使用されている合計MBはわずか7であり、CANループにはECUとテスター(CANOE VIN1640)以外のノードがないため、この大きな遅延は調停から発生したものではないようです。 私の CAN_init() 関数は以下のように投稿されました: void Can_Init(void) { /** * GPIO * CAN_RX U4_9_CAN0_RX PE4 ALT5 * CAN_TX U4_8_CAN0_TX PE5 ALT5 */ PORTE->PCR[4] = PORT_PCR_MUX(5); PORTE->PCR[5] = PORT_PCR_MUX(5); #CAN_FD == CAN_FD_TYPE_EN の場合 uint32_t i = 0; uint32_t tempECR; uint32_t 待機カウンタ = 0; /* 時計 */ PCC->PCCn[PCC_FlexCAN0_INDEX] |= PCC_PCCn_CGC_MASK; /* CGC=1: FlexCAN0へのクロックを有効にする */ /* できる */ CAN0->MCR |= CAN_MCR_SOFTRST_MASK; CAN0->MCR |= CAN_MCR_MDIS_MASK; /* MDIS=1: クロックを選択する前にモジュールを無効にする */ 待機カウンタ = 0; while(!((CAN0->MCR & CAN_MCR_SOFTRST_MASK) >> CAN_MCR_SOFTRST_SHIFT)) {WaitCounter++;} CAN0->IMASK1 = 0x00000000ul; CAN0->ESR1 &= ~CAN_ESR1_BOFFINT_MASK; CAN0->CTRL1 |= (CAN_CTRL1_CLKSRC(1) /* CLKsrc=1: クロックソース = SYS_CLK (80 MHz) */ |CAN_CTRL1_BOFFMSK(0) /* バスオフ割り込み有効 */ |CAN_CTRL1_BOFFREC(0)); /* バスオフ車載回復を有効にする。*/ CAN0->MCR &= ~CAN_MCR_MDIS_MASK; /* MDIS=0; モジュール構成を有効にします。(FRZ、HALTを設定)*/ CAN0->MCR |= (CAN_MCR_FRZ_MASK | CAN_MCR_HALT_MASK); 待機カウンタ = 0; while(!((CAN0->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT)) {WaitCounter++;} /* 良い習慣: フリーズモードの開始/終了時に FRZACK=1 を待つ */ tempECR = CAN0->ECR; CAN0->ECR = 0x00000000UL; tempECR = tempECR; /* 公称位相を設定: 500 KHz ビット時間、80 MHz クロック */ CAN0->CBT = CAN_CBT_BTF(1) /* ビットタイム定義の有効化。*/ |CAN_CBT_EPRESDIV(1) /* EPRESDIV = プリスケーラ + 1 = 2 */ |CAN_CBT_EPSEG2(15) /* EPSEG2 = 15 */ |CAN_CBT_EPSEG1(15) /* EPSEG1 = 15 */ |CAN_CBT_EPROPSEG(46)/* EPROPSEG = 46 */ |CAN_CBT_ERJW(15);/* ERJW = 15 */ /* BITRATEn =Fcanclk /( [(1 + (EPSEG1+1) + (EPSEG2+1) + (EPROPSEG + 1)] x (EPRESSDIV+1)) = 80 MHz /([(1 + ( 15 +1) + ( 15 +1) + ( 46 + 1)] x ( 1 +1)) = 80 MHz / ( [1 + 16 + 16 + 47] x 2) = 80 MHz / (80 x 2) = 500 Kz サンプルポイント = (3 + PSEG1 + PROPSEG) /(4+ PSEG1 + PSEG2 + PROPSEG) (17 + 15 + 46) / (18 + 15 + 15 + 46) = 80% */ /* データ位相を設定: 2 MHz ビット時間、80 MHz クロック */ CAN0->FDCBT = CAN_CBT_EPSEG2(3) /* FPSEG2 = 3 */ |CAN_CBT_EPSEG1(7) /* EPSEG1 = 7 */ |CAN_CBT_EPROPSEG(7) /* FPROPSEG = 7 */ |CAN_CBT_ERJW(3) /* FRJW = 3 */ |CAN_FDCBT_FPRESDIV(1);/* FPRESDIV = プリスケーラ + 1 = 2 */ /* BITRATEf = Fcanclk /( [(1 + (FPSEG1+1) + (FPSEG2+1) + (FPROPSEG)] x (FPRESDIV+1)) = 80 MHz /([(1 + ( 7 +1) + ( 3 +1) + ( 7 )] x ( 1 +1)) = 80 MHz /([1+8+4+7] x 2) = 80 MHz /(20x2) = 80 MHz / 40 = 2 MHz サンプルポイント = (2 + PSEG1 + PROPSEG) /(3 + PSEG1 + PSEG2 + PROPSEG) (4 + 7 + 7) / (5 + 7 + 3 + 7) = 80% */ CAN0->FDCTRL = CAN_FDCTRL_FDRATE(1) /* BRS=1: フレームのヘッダーでビットレートスイッチを有効にし、ビットレートスイッチ、データサイズ、トランシーバ遅延を設定します */ |CAN_FDCTRL_MBDSR0(3) /* MBDSR0=3: 領域0にはフレームのペイロードに64バイトのデータ(7Mb)があります */ |CAN_FDCTRL_TDCEN(1) /* MBDSR1: 該当なし */ |CAN_FDCTRL_TDCOFF(31); /* トランシーバ遅延補正オフセット15 */ /* PRIO = 0: CANFD が使用され、ISO CAN FD の CRC 修正が有効になります */ CAN0->CTRL2 |= CAN_CTRL2_TASD(30) | CAN_CTRL2_ISOCANFDEN(1); /* TDCEN=1: トランシーバ遅延補正を有効にする */ /* TDCOFF=5: 5 CANクロック(300us)のオフセットを使用 */ for(i = 0; i < 128u; i++) { /* CAN0: FlexCAN 0の128ワードのRAMをクリアする メッセージ バッファの単語をクリアします。すべてのバッファ CODE=0 (非アクティブ) */ CAN0->RAMn[i] = 0; } for(i=0; i < 16u; i++ ) { /* FRZ モードでは、CAN0 16 msg buf フィルターを初期化します 受信メッセージのすべてのIDビットをチェックする*/ CAN0->RXIMR[i] = 0x1ffffffful; } /* グローバル受け入れマスク: すべてのIDビットをチェック */ CAN0->RXMGMASK = 0xFFFFFFFFul; CAN0->RX14MASK = 0xFFFFFFFFul; CAN0->RX15MASK = 0xFFFFFFFFul; /* メッセージバッファ 0 - 受信セットアップ: */ /* メッセージバッファ 0、ワード 0: 受信を有効にする */ /* EDL = 1: CAN FDの拡張データ長 */ /* BRS = 1: ビットレートスイッチが有効 */ /* ESI = 0: エラー状態 */ /* CODE = 4: MBをRX非アクティブに設定 */ /* IDE = 0: 標準ID */ /* SRR、RTR、TIME STAMP = 0: 該当なし */ CAN0->RAMn[0 * CAN_MSG_BUF_SIZE + 0] = CAN_RAMn_EDL(1) + CAN_RAMn_BRS(1) + CAN_RAMn_ESI(0) + CAN_RAMn_CODE(CAN_MSG_BUF_RX_EMPTY) + CAN_RAMn_IDE(0) + CAN_RAMn_SRR(0) + CAN_RAMn_RTR(0); CAN0->RAMn[0 * CAN_MSG_BUF_SIZE + 1] = ((uint32_t)ID_REQUEST_PHY) << 18u; // CAN0->RXIMR[0] = (((uint32_t)(~(ID_REQUEST_PHY ^ ID_REQUEST_FUN))) << 18u) & 0x1ffffffful; CAN0->RXIMR[0] = 0x1ffffffful; CAN0->RAMn[1 * CAN_MSG_BUF_SIZE + 0] = CAN_RAMn_EDL(1) + CAN_RAMn_BRS(1) + CAN_RAMn_ESI(0) + CAN_RAMn_CODE(CAN_MSG_BUF_RX_EMPTY) + CAN_RAMn_IDE(0) + CAN_RAMn_SRR(0) + CAN_RAMn_RTR(0); CAN0->RAMn[1 * CAN_MSG_BUF_SIZE + 1] = ((uint32_t)ID_REQUEST_FUN) << 18u; CAN0->RXIMR[1] = 0x1ffffffful; CAN0->MCR = 0x00030806ul; /* FlexCAN 0 停止状態を否定し、7 MB 間 CAN FD を有効にする */ gs_CanControllerStatus[0] = CAN_STATUS_IDLE; 待機カウンタ = 0; while ((CAN0->MCR & CAN_MCR_FRZACK_MASK) >> CAN_MCR_FRZACK_SHIFT){WaitCounter++;} /* 良い方法: FRZACK がクリアされるまで待つ (フリーズモードではない) */ 待機カウンタ = 0; while ((CAN0->MCR & CAN_MCR_NOTRDY_MASK) >> CAN_MCR_NOTRDY_SHIFT){WaitCounter++;} } そして、私のCan_write()関数は以下のように投稿されました: bl_Error_t Can_Write(bl_CanHandle_t ハンドル、const bl_Buffer_t *バッファ、bl_Size_t サイズ) { #CAN_FD == CAN_FD_TYPE_EN の場合 bl_Error_t ret = BL_ERR_NOT_OK; uint32_t Can_ID = 0x0; uint8_t 送信ハンドル = 0; uint8_t dlc; CAN_message_t msg_tx; dlc = Can__SizeToDlc(サイズ); if (ハンドル > CAN_TXHANDLE_NUM) { ret を返します。 } Tx_handle = g_CanTxHandleCfg[ハンドル].コントローラ; (gs_CanControllerStatus[Tx_handle] != CAN_STATUS_IDLE) の場合 { ret = BL_ERR_CAN_BUSY; ret を返します。 } Can_ID = g_CanTxHandleCfg[ハンドル].id<< 18; する { (uint8_t i = 0; i < CAN_MAX_NUMBER_OF_CONTROLLER; i++) の場合 { gs_CanControllerCfg[i].usage == CAN_CONTROLLER_UNUSED の場合 { 続く; } if ( (Tx_handle == gs_CanControllerCfg[i].phyId) && (CAN_STATUS_IDLE == gs_CanControllerStatus[i])) { msg_tx.id = Can_ID; Can__CopyData(msg_tx.data.bytes,buffer,size); msg_tx.length = dlc; TLE9261_Write(0x40, 0x5F);/*これは私がここに置いたソフトウェアモニターポイントです*/ S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 17] = SWAP_UINT32(msg_tx.data.longs[15]);//((uint32_t)バッファ[60])<< 24 | ((uint32_t)バッファ[61]) << 16 | ((uint32_t)バッファ[62]) << 8 | ((uint32_t)バッファ[63]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 16] = SWAP_UINT32(msg_tx.data.longs[14]);//((uint32_t)バッファ[56])<< 24 | ((uint32_t)バッファ[57]) << 16 | ((uint32_t)バッファ[58]) << 8 | ((uint32_t)バッファ[59]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 15] = SWAP_UINT32(msg_tx.data.longs[13]);//((uint32_t)バッファ[52])<< 24 | ((uint32_t)バッファ[53]) << 16 | ((uint32_t)バッファ[53]) << 8 | ((uint32_t)バッファ[55]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 14] = SWAP_UINT32(msg_tx.data.longs[12]);//((uint32_t)バッファ[48])<< 24 | ((uint32_t)バッファ[49]) << 16 | ((uint32_t)バッファ[50]) << 8 | ((uint32_t)バッファ[51]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 13] = SWAP_UINT32(msg_tx.data.longs[11]);//((uint32_t)バッファ[44])<< 24 | ((uint32_t)バッファ[45]) << 16 | ((uint32_t)バッファ[46]) << 8 | ((uint32_t)バッファ[47]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 12] = SWAP_UINT32(msg_tx.data.longs[10]);//((uint32_t)バッファ[40])<< 24 | ((uint32_t)バッファ[41]) << 16 | ((uint32_t)バッファ[42]) << 8 | ((uint32_t)バッファ[43]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 11] = SWAP_UINT32(msg_tx.data.longs[9]);//((uint32_t)バッファ[36])<< 24 | ((uint32_t)バッファ[37]) << 16 | ((uint32_t)バッファ[38]) << 8 | ((uint32_t)バッファ[39]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 10] = SWAP_UINT32(msg_tx.data.longs[8]);//((uint32_t)バッファ[32])<< 24 | ((uint32_t)バッファ[33]) << 16 | ((uint32_t)バッファ[34]) << 8 | ((uint32_t)バッファ[35]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 9] = SWAP_UINT32(msg_tx.data.longs[7]);//((uint32_t)バッファ[28])<< 24 | ((uint32_t)バッファ[29]) << 16 | ((uint32_t)バッファ[30]) << 8 | ((uint32_t)バッファ[31]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 8] = SWAP_UINT32(msg_tx.data.longs[6]);//((uint32_t)バッファ[24])<< 24 | ((uint32_t)バッファ[25]) << 16 | ((uint32_t)バッファ[26]) << 8 | ((uint32_t)バッファ[27]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 7] = SWAP_UINT32(msg_tx.data.longs[5]);//((uint32_t)バッファ[20])<< 24 | ((uint32_t)バッファ[21]) << 16 | ((uint32_t)バッファ[22]) << 8 | ((uint32_t)バッファ[23]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 6] = SWAP_UINT32(msg_tx.data.longs[4]);//((uint32_t)バッファ[16])<< 24 | ((uint32_t)バッファ[17]) << 16 | ((uint32_t)バッファ[18]) << 8 | ((uint32_t)バッファ[19]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 5] = SWAP_UINT32(msg_tx.data.longs[3]);//((uint32_t)バッファ[12])<< 24 | ((uint32_t)バッファ[13]) << 16 | ((uint32_t)バッファ[14]) << 8 | ((uint32_t)バッファ[15]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 4] = SWAP_UINT32(msg_tx.data.longs[2]);//((uint32_t)バッファ[8])<< 24 | ((uint32_t)バッファ[9]) << 16 | ((uint32_t)バッファ[10]) << 8 | ((uint32_t)バッファ[11]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 3] = SWAP_UINT32(msg_tx.data.longs[1]);//((uint32_t)バッファ[4])<< 24 | ((uint32_t)バッファ[5]) << 16 | ((uint32_t)バッファ[6]) << 8 | ((uint32_t)バッファ[7]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 2] = SWAP_UINT32(msg_tx.data.longs[0]);//((uint32_t)バッファ[0])<< 24 | ((uint32_t)バッファ[1]) << 16 | ((uint32_t)バッファ[2]) << 8 | ((uint32_t)バッファ[3]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 1] = Can_ID; /* MB8ワード1: 指定されたIDの送信メッセージ */ S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 0] = CAN_RAMn_EDL(1) /* EDL=1 CAN FDフォーマットフレーム*/ |CAN_RAMn_BRS(1) /* BRS=1: ビットレートはメッセージ内で切り替えられます */ |CAN_RAMn_ESI(0) /* ESI=0: ??? */ |CAN_RAMn_CODE(CAN_TX_MB_CODE_TRANS) /* CODE=0xC: 送信するためにメッセージバッファをアクティブにする */ |CAN_RAMn_SRR(0) /* SRR=1 送信フレーム(標準IDには必要ありません)*/ |CAN_RAMn_IDE(0) /* IDE=0: 標準ID */ |CAN_RAMn_RTR(0) /* RTR = 0: データ、リモート送信要求フレームではない*/ |CAN_RAMn_DLC(dlc); /* DLC=x; 1,2,3,4,5,6,7,8, 9-12,10-16, 11-20, 12-24, 13-32, 14-48, 15-64バイト */ // while (!(S32K_CAN(Tx_handle).IFLAG1 & 0x100)) {}; /* CAN 0 MB 8 フラグを待つ */ // S32K_CAN(Tx_handle).IFLAG1 = 0x00000100; /* CAN 0 MB 8フラグをクリアするが、他のフラグはクリアしない*/ gs_CanControllerStatus[i] = CAN_STATUS_TRANSMITTING; ret = BL_ERR_OK; } } } while(0); ret を返します。 } Re: Re S32K146 Transmit Delay こんにちは、 正確な設定と使用されているコードがわからないため、この動作の原因を正確に説明することはできません。仲裁は停止されるか、何らかの理由で保留中になっているようです。たとえば、仲裁が MB 全体をスキャンする前に、任意の MB CS ワードに書き込むことが考えられます。 調停プロセスは MB をスキャンし、次の機会に送信するメッセージを保持している送信 MB を検索します。スキャンは最も小さい数値の MB から始まり、より大きな数値へと続きます。MB0 が送信に使用される場合、この MB に書き込むと、調停プロセスが開始され、すぐに勝者が見つかります。 BR、ペトル Re: Re S32K146 Transmit Delay こんにちは、ペトルス MB シーケンスを調整してみましたが、正常に送信できました。しかし、なぜ問題ないのかという深いロジックがまだ理解できません。私の方法を簡単に説明しましょう: 受信または送信に使用する MB インデックスを調整します。つまり、元々 MB0 は物理アドレス診断メッセージ (ID:0x714) を受信するために使用され、MB1 は機能アドレス診断メッセージ (ID:0x7DF) を受信するために使用され、MB6 は ECU 応答メッセージ (ID:0x794) を送信するために使用されます。 新しいものは、MB0 は ECU 応答メッセージ (ID:0x794) の送信に使用され、MB1 は物理アドレス診断メッセージ (ID:0x714) の受信に使用され、MB2 は機能アドレス診断メッセージ (ID:0x7DF) の受信に使用されます。 この調整後、ECU は正常に受信または送信できるようになります。SO、MB6がflexCAN0内での調停に勝てないため、ECUがメッセージをSMBに移動しないということでしょうか?送信するメッセージは1つしかないので、MB6と調停する他のMBはないようです。 また、新しい送信を開始する必要があるときに MB がまだ送信中の場合は、MB を中止しようとします。 よろしくお願いします。 Re: Re S32K146 Transmit Delay こんにちは、 何らかの理由で、MB が書き込まれた後、仲裁が開始されないか終了せず、メッセージが TX SMB に移動されないようです。バスはアイドル状態なので、通常通り実行されるはずです。 その後、別のメッセージが受信されると、CRC 部分で新しい仲裁が開始され、勝者 (単一の TX MB から) が選択され、SMB に移動されます。ようやく最初の機会に送信されました。 しかし、「新しい受信リクエストが、最後のリクエストへの応答の送信をトリガーしました。」という図は、送信MBが実際に正常に送信される前に更新されていることを示しています。MBの転送/可用性のチェックが適切に行われていれば、監視ポイント1に到達することはありません。 他に何を提案すればよいか分かりません。システムとモジュールのクロックを確認してください。コードを確認して、前回の転送が完了した時点でTXが書き込まれていることを確認してください。コード内でMBの無効化/中止を行っていますか? BR、ペトル Re S32K146 Transmit Delay こんにちは ご返信SOありがとうございます。ここで引用した最初の質問にお答えしたいと思います。「SO MeasurementStartPoint,jpg から、0x714 メッセージが受信され、約 150us 後に 0x5FC0 が SPI SOUT に送信されていますが、このフレームはコードで使用される TLE9261_Write(0x40,0x5F) と同等ですか?」 はい、コードで使用されるTLE9261_Write(0x40,0x5F)と同等です。 測定停止ポイントについては、コードに別の 2 つの TLE9261_Write(0x40,0x5F) 関数を導入しました。これらは、「モニター ポイント」という名前の添付画像で確認できます。また、ここにコードも投稿します。 bl_Error_t Can_Write(bl_CanHandle_t ハンドル、const bl_Buffer_t *バッファ、bl_Size_t サイズ) { bl_Error_t ret = BL_ERR_NOT_OK; uint32_t Can_ID = 0x0; uint8_t 送信ハンドル = 0; uint8_t dlc; CAN_message_t msg_tx; dlc = Can__SizeToDlc(サイズ); if (ハンドル > CAN_TXHANDLE_NUM)     { ret を返します。    } Tx_handle = g_CanTxHandleCfg[ハンドル].コントローラ; (gs_CanControllerStatus[Tx_handle] != CAN_STATUS_IDLE) の場合     { ret = BL_ERR_CAN_BUSY; ret を返します。    } Can_ID = g_CanTxHandleCfg[ハンドル].id<< 18; する     { (uint8_t i = 0; i < CAN_MAX_NUMBER_OF_CONTROLLER; i++) の場合 { gs_CanControllerCfg[i].usage == CAN_CONTROLLER_UNUSED の場合 { 続く;        } if ( (Tx_handle == gs_CanControllerCfg[i].phyId) && (CAN_STATUS_IDLE == gs_CanControllerStatus[i])) { msg_tx.id = Can_ID; Can__CopyData(msg_tx.data.bytes,buffer,size); msg_tx.length = dlc; TLE9261_Write(0x40, 0x5F);/*モニターポイント1*/ S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 17] = SWAP_UINT32(msg_tx.data.longs[15]);//((uint32_t)バッファ[60])<< 24 | ((uint32_t)バッファ[61]) << 16 | ((uint32_t)バッファ[62]) << 8 | ((uint32_t)バッファ[63]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 16] = SWAP_UINT32(msg_tx.data.longs[14]);//((uint32_t)バッファ[56])<< 24 | ((uint32_t)バッファ[57]) << 16 | ((uint32_t)バッファ[58]) << 8 | ((uint32_t)バッファ[59]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 15] = SWAP_UINT32(msg_tx.data.longs[13]);//((uint32_t)バッファ[52])<< 24 | ((uint32_t)バッファ[53]) << 16 | ((uint32_t)バッファ[53]) << 8 | ((uint32_t)バッファ[55]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 14] = SWAP_UINT32(msg_tx.data.longs[12]);//((uint32_t)バッファ[48])<< 24 | ((uint32_t)バッファ[49]) << 16 | ((uint32_t)バッファ[50]) << 8 | ((uint32_t)バッファ[51]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 13] = SWAP_UINT32(msg_tx.data.longs[11]);//((uint32_t)バッファ[44])<< 24 | ((uint32_t)バッファ[45]) << 16 | ((uint32_t)バッファ[46]) << 8 | ((uint32_t)バッファ[47]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 12] = SWAP_UINT32(msg_tx.data.longs[10]);//((uint32_t)バッファ[40])<< 24 | ((uint32_t)バッファ[41]) << 16 | ((uint32_t)バッファ[42]) << 8 | ((uint32_t)バッファ[43]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 11] = SWAP_UINT32(msg_tx.data.longs[9]);//((uint32_t)バッファ[36])<< 24 | ((uint32_t)バッファ[37]) << 16 | ((uint32_t)バッファ[38]) << 8 | ((uint32_t)バッファ[39]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 10] = SWAP_UINT32(msg_tx.data.longs[8]);//((uint32_t)バッファ[32])<< 24 | ((uint32_t)バッファ[33]) << 16 | ((uint32_t)バッファ[34]) << 8 | ((uint32_t)バッファ[35]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 9] = SWAP_UINT32(msg_tx.data.longs[7]);//((uint32_t)バッファ[28])<< 24 | ((uint32_t)バッファ[29]) << 16 | ((uint32_t)バッファ[30]) << 8 | ((uint32_t)バッファ[31]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 8] = SWAP_UINT32(msg_tx.data.longs[6]);//((uint32_t)バッファ[24])<< 24 | ((uint32_t)バッファ[25]) << 16 | ((uint32_t)バッファ[26]) << 8 | ((uint32_t)バッファ[27]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 7] = SWAP_UINT32(msg_tx.data.longs[5]);//((uint32_t)バッファ[20])<< 24 | ((uint32_t)バッファ[21]) << 16 | ((uint32_t)バッファ[22]) << 8 | ((uint32_t)バッファ[23]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 6] = SWAP_UINT32(msg_tx.data.longs[4]);//((uint32_t)バッファ[16])<< 24 | ((uint32_t)バッファ[17]) << 16 | ((uint32_t)バッファ[18]) << 8 | ((uint32_t)バッファ[19]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 5] = SWAP_UINT32(msg_tx.data.longs[3]);//((uint32_t)バッファ[12])<< 24 | ((uint32_t)バッファ[13]) << 16 | ((uint32_t)バッファ[14]) << 8 | ((uint32_t)バッファ[15]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 4] = SWAP_UINT32(msg_tx.data.longs[2]);//((uint32_t)バッファ[8])<< 24 | ((uint32_t)バッファ[9]) << 16 | ((uint32_t)バッファ[10]) << 8 | ((uint32_t)バッファ[11]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 3] = SWAP_UINT32(msg_tx.data.longs[1]);//((uint32_t)バッファ[4])<< 24 | ((uint32_t)バッファ[5]) << 16 | ((uint32_t)バッファ[6]) << 8 | ((uint32_t)バッファ[7]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 2] = SWAP_UINT32(msg_tx.data.longs[0]);//((uint32_t)バッファ[0])<< 24 | ((uint32_t)バッファ[1]) << 16 | ((uint32_t)バッファ[2]) << 8 | ((uint32_t)バッファ[3]); S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 1] = Can_ID; /* MB8ワード1: 指定されたIDの送信メッセージ */ TLE9261_Write(0x40, 0x5F);/*モニターポイント2*/ S32K_CAN(Tx_handle).RAMn[CAN_USED_HRH_NUM*CAN_MSG_BUF_SIZE + 0] = CAN_RAMn_EDL(1) /* EDL=1 CAN FDフォーマットフレーム*/ |CAN_RAMn_BRS(1) /* BRS=1: ビットレートはメッセージ内でスイッチされます */ |CAN_RAMn_ESI(0) /* ESI=0: ??? */ |CAN_RAMn_CODE(CAN_TX_MB_CODE_TRANS) /* CODE=0xC: 送信するためにメッセージバッファをアクティブにする */ |CAN_RAMn_SRR(0) /* SRR=1 送信フレーム(標準IDには必要ありません)*/ |CAN_RAMn_IDE(0) /* IDE=0: 標準ID */ |CAN_RAMn_RTR(0) /* RTR = 0: データ、リモート送信要求フレームではない*/ |CAN_RAMn_DLC(dlc); /* DLC=x; 1,2,3,4,5,6,7,8, 9-12,10-16, 11-20, 12-24, 13-32, 14-48, 15-64バイト */ TLE9261_Write(0x40, 0x5F);/*モニターポイント3*/ // while (!(S32K_CAN(Tx_handle).IFLAG1 & 0x100)) {}; /* CAN 0 MB 8 フラグを待つ */ // S32K_CAN(Tx_handle).IFLAG1 = 0x00000100; /* CAN 0 MB 8フラグをクリアするが、他のフラグはクリアしない*/ gs_CanControllerStatus[i] = CAN_STATUS_TRANSMITTING; ret = BL_ERR_OK;        }      } } while(0); ret を返します。 } 最初の監視ポイントは MB の ID を設定する前に配置され、2 番目の監視コードは MB のコードを 0xC(送信) に更新する直前に配置され、3 番目の監視ポイントは送信する MB のコード更新直後に配置されます。 コードをデバッグすると、以下に説明する 2 つの現象が見つかりました。 1. まず、DID を読み取るために診断要求サービスを送信し、バス上で 0x22 F1 87 をテスト送信しましたが、ECU は応答しません。添付の「要求を受信したが応答がない」という画像から、ECU が実際に要求メッセージを受信し、応答を送信して MB を更新しようとしていることがわかります (このスナップショットでは監視ポイント 1、2、および 3 がキャプチャされています)。ただし、CAN Tx PIN では応答メッセージが監視されていません。 2. 次に、ESR1、IFALG1、および RAM レジスタを監視し、送信 MB のコードが 0xC (送信) に正常に更新され、CAN バスがアイドル状態であり、ESR1 レジスタに他のエラーがないことを確認します。ただし、メッセージは CANTx で送信されませんでした。flexCAN0 が送信を開始する準備ができていないため、メッセージが SMB でスタックしているようです。 3. 3 番目に、別の診断要求を送信しようとして、0x10 01 サービスを送信すると、ECU はすぐに 0x62 F1 87 で応答します。添付の「新しく受信した要求によって、最後の要求の応答の送信がトリガーされました。」という画像で確認できます。メッセージは、モニター ポイント 1、2、3 のコードが実行される前に送信されました。SO、新たな要求メッセージが ECU をトリガーして、最後の要求の応答を送信するようです!!! これはSO不合理に思えます。 この問題を解決するには、皆様のご親切なサポートが本当に必要です。よろしくお願いします。 Re: S32K146 Transmit Delay こんにちは、 したがって、MeasurementStartPoint,jpg から、0x714 メッセージが受信され、約 150us 後に 0x5FC0 が SPI SO に送信されていることがわかります。このフレームは、コードで使用される TLE9261_Write(0x40,0x5F) と同等ですか? TX メッセージが送信されるときに停止時間にズーム機能はありますか? 通常の応答(1 ミリ秒以内)のスクリーンショットを取得できますか? CANメッセージ間の周期的(30us)SPI転送とは何ですか?コードではどのように処理されますか? TLE9261_Write(0x40,0x5F) と MB6 CS ワード書き込みの間のコードが中断されないことをテストする場合は、その前後の割り込みを無効/有効にするだけです。 BR、ペトル Re: S32K146 Transmit Delay こんにちは、PetrS ご丁寧なご返信SOありがとうございます。まず最初にいくつかの点を明確にさせてください。 1.TDCOFF については、RF マニュアルを参照し、お客様の CAN 仕様で定義されているパラメータを使用して計算しているので、ここでは問題ないと思います。 2. 私のコードでは、MB0 は物理アドレス ID (0x714) メッセージの受信に使用され、MB1 は関数アドレス ID (0x7DF) メッセージの受信に使用されます。MB2 ~ MB5 は予約済みで、MB6 は送信に使用されます。S32K146 Flex CAN0 にはペイロード 64 バイトのメッセージ用に 7 MB がある。SO、私のコード内の CAN_USED_HRH_NUM は 6 です。 3. バスの仲裁については、おっしゃる意味は理解しています。写真から一部のスナップショットが抜けてしまっていることをお詫びします。こちらに追加しましたので、添付ファイルをご参照ください。私のテスト ベンチには ECU という 1 つのノードだけがあり、テスター (Vector CANOE VIN1640) を除いて ECU と調停する他のノードはありません。フラッシュが終了した後に ECU を起動するために、100 ミリ秒周期で NM メッセージを送信します。SO、私の観点からすると、この遅延はバスの調停によるものではないはずです。 4. 遅延が発生する場所を捕捉するために、コードにモニター ポイント TLE9261_Write (返信でも言及されています) を追加しました。こうすることで、TLE9261_Write() の呼び出しによってトリガーされる SPI 信号をキャプチャできます。これは、ロジック アナライザ プロジェクトの測定開始ポイントの名前です。つまり、このポイントはメッセージの送信直前です (送信 MB にデータを書き込むと、MB の CS コードも更新されます)。また、CANRx および CANTx PIN のデータも測定します。こうすることで、TLE9261_Write() を呼び出してからメッセージが CAN Tx PIN に送信されるまでの遅延が約 223 ミリ秒であることがわかります。それは本当に長いですね。測定結果は添付ファイルでCANます。 5. SO、返信で述べられているように、遅延は TLE9261_Write と CAN_USED_HRH_NUM MB CS ワード書き込み間のコードから発生すると考えられます。しかし、ブートローダ コードで使用した割り込みは、時間をカウントするために使用するシステム ティックと、いくつかの障害シナリオに対処するために使用するハードフォールトのみです。これによってSO大きな遅延が発生することはないと思います。 SO、これらの情報をもう一度確認して、遅延の原因を突き止めるのにご協力いただけますか? SOありがとう。 Re: S32K146 Transmit Delay こんにちは、 CAN init は正常に見えます。2Mbit では TDC はまったく必要ありません。とにかく、TDCOFF は適切に構成されているように見えます。デフォルトの TASD 値を維持することもCANますが、違いは期待できません。 説明によると、送信には単一のMBのみが使用されていますが、コードではCAN_USED_HRH_NUM(値?)となっています。このメッセージバッファのCSワードが書き込まれると、MBは調停プロセスへの参加を開始し、勝者として選択されてTX SMBに移動され、バス上で実際に送信される最初の機会を待ちます。ここで、バス上にIDが低い他のメッセージがある場合、バス調停によって遅延が発生する可能性があります。他のノードがコネクテッドされていないにもかかわらず、RXメッセージの1つがより高い調停値(IDが低い)を持っていることを確認してください。 遅延のもう一つの原因は、コード自体にある可能性があります。TLE9261_WriteとCAN_USED_HRH_NUM MB CSワード書き込みの間に何らかのコードがあります。他のコードやタスクによって中断されないことを確認し、SOここにソフトウェア遅延を追加してはいかがでしょうか? また、送信中にエラーが検出されると実際の送信が遅れますが、バス/CAN ツールで間違ったメッセージやエラー メッセージが表示されることがあります。 BR、ペトル
View full article