Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
i.MX 8M Plus(Scarthgap)上的 HDMI EDID 4 块读取失败 您好, 我正在 Yocto Scarthgap 电路板支持包 上使用 i.MX 8M Plus,在尝试读取 4 个 HDMI EDID 块(块 0 到 3)时遇到了问题。 [环境] SoC:i.MX 8M Plus 电路板支持包/操作系统:Yocto Project Scarthgap(内核版本:lf-6.6.52) [问题描述]尝试读取所有 4 个 EDID 块时,系统无法从块 2 开始读取(段 1)。区块 0 和区块 1(0 段)读取成功,但读取操作随即失败。 [根本原因/分析]经过调试,我发现问题与段切换命令后使用的 DDC 地址有关: 要读取区块 2 和 3,必须正确执行区段切换命令。 切换网段后,驱动程序应使用标准 DDC 地址0xA0/0xA1(I2C 地址 0x50)读取实际 EDID 数据。 但是,驱动程序错误地尝试使用地址0x60/0x61(即段指针地址)读取数据,导致读取错误。 看来驱动程序错误地在随后的数据读取序列中重复使用了分段指针地址。 [问题] 这是 i.MX 8M Plus Scarthgap BSP 上的 HDMI/DDC 驱动程序中的已知问题吗? 是否有任何现有的修补程序或变通方法来修复这种地址不匹配问题? 如能提供需要修改的相关驱动程序代码的指导或指点,将不胜感激。 先行致谢。 Re: HDMI EDID 4-block read failure on i.MX 8M Plus (Scarthgap) 这是一个已知的问题吗? 实际上是的。恩智浦社区上至少有一份先前的 i.MX8MP 报告指出,i.MX8MP 无法正确读取块 1 / 段 0 以外的 E-EDID,该报告特别指出用户应访问 drivers/gpu/drm/bridge/synopsys/dw-hdmi.c 进行调查。 是否有现成的变通办法? 是的。据报道,一种解决方法是绕过 HDMI 内部 DDC 引擎,通过在设备树中设置 ddc-i2c-bus 来使用普通的 SoC I2C 控制器进行 DDC。恩智浦社区线程报告称,将 HDMI DDC 引脚重新复用到 I2C5 并使用 ddc-i2c-bus = <&i2c5>; 解决了 i.MX8MP 上的多块 E-EDID 读取问题。 是否已经有公共补丁? 我在搜索结果中没有找到上游或 NXP 发布的公开补丁来专门修复你的 BSP 行的 dw-hdmi 中的这个 0x30 / 0x50 从属地址处理问题。公开可见的 dw-hdmi.c 代码仍然显示可以触发这种行为的 “从属地址取自第一条 I2C 消息” 逻辑。   如果你的主板布线允许,风险最低且已经报告的解决方法是将 HDMI DDC 从内部 dw-hdmi I2C 引擎移出常规 SoC I2C 控制器上。在 i.MX8MP 上,报告了一种解决方案 &i2c5 { 时钟频率 =<100000> ; pinctrl-names ="默认" ; pinctrl-0 =<& pinctrl_i2c5> ; status ="okay" ; };   &hdmi { ddc-i2c-bus = < & i2c5 >; status ="okay" ; }; HDMI DDC 引脚与 I2C5_SCL / I2C5_SDA 复用。恩智浦社区线程中的用户报告说,这一变更解决了 i.MX8MP 上的多块 E-EDID 读取问题。
查看全文
HSE_b: RSAキーをRAMにインポートすることは許可されていません 1024ビットのRSA公開鍵を1つRAMカタログにインポートして鍵インポートサービスを使用する方法を理解しようとしていますが、サーバーからHSE_SRV_RSP_NOT_ALLOWEDという応答が返されます。 私のテストアプリケーションは、RAMキーカタログを次のようにフォーマットします。 { { muMask = HSE_MU0_MASK | HSE_MU1_MASK, groupOwner = HSE_KEY_OWNER_ANY, keyType = HSE_KEY_TYPE_RSA_PUB, numOfKeySlots = 2, maxKeyBitLen = HSE_KEY1024_BITS, }, { muMask = HSE_MU0_MASK | HSE_MU1_MASK, groupOwner = HSE_KEY_OWNER_ANY, keyType = HSE_KEY_TYPE_ECC_PUB_EXT, numOfKeySlots = 2, maxKeyBitLen = HSE_KEY256_BITS, }, { muMask = 0, groupOwner = 0, keyType = 0, numOfKeySlots = 0, maxKeyBitLen = 0 }, } そして、サーバーからの応答としてHSE_SRV_RSP_OKを受け取りました。 次に、以下のキー情報を使用してRSAキーをインポートしようとします。 { keyFlags = HSE_KF_USAGE_VERIFY, keyBitLen = HSE_KEY1024_BITS, keyCounter = 0x0, smrFlags = 0x0, keyType = HSE_KEY_TYPE_RSA_PUB, specific = { pubExponentSize = 4, } } 私の要望は以下のとおりです。 { targetKeyHandle = 0x20000, pKeyInfo = 0x20401f74, pKey = { 0x210034b4, 0x21003534, 0x0}, keyLen = { 0x80, 0x4, 0x0}, } . HSE_RAM_PUB_KEY_IMPORT_POLICY_ATTR_ID を HSE_KM_POLICY_ALLOW_RAM_PUB_KEY_IMPORT に設定し、読み戻した結果も同じでした。 LC属性は0x04、HSEエラーフラグは0x0000、HSEステータスフラグは0x0B60です。ファームウェアバージョンは、0x0F SoC ID 0x0000 FWタイプ 0x02 メジャー 0x32 マイナー 0x00 パッチと読み取られます。 Re: HSE_b: Not allowed to import RSA key to RAM こんにちは、 @Emma_G-gbgさん パラメータは正しく設定されています。特に問題は見当たりません。スーパーユーザー権限を持っている場合は、その属性を設定する必要すらありません。 昨日、これと非常によく似たことをテストしていたので、1024ビットのRSA公開鍵と4バイトの公開指数をインポートするようにコードを少し更新しました。見た目はこんな感じです。 RSA公開鍵をインポートする際には、pubExponentSizeを設定する必要がないことに注意してください。HSEはこのパラメータを無視します。代わりにkeyLen[1]を使用します。 パラメータ pubExponentSize は、サービス HSE_SRV_ID_GET_KEY_INFO によって keyInfo を読み取る際に使用されます。そのキーのkeyInfoを読み取った結果は以下のとおりです。 それは単なるデータキャッシュの問題ではないでしょうか?データキャッシュを無効にして、違いが出るかどうか試していただけますか? よろしくお願いいたします。 ルーカス Re: HSE_b: Not allowed to import RSA key to RAM ありがとうございます。暗号鍵と認証鍵のハンドル情報の入力を忘れていました。確認していなかったので、HSE_INVALID_KEY_HANDLE はゼロになると思っていました。 現在は、キャッシュメモリ内の少なくとも一部の値を使用して動作しており、サービス呼び出しの前後にキャッシュメンテナンス操作が行われています。既存のプロジェクトにHSEサービスを追加しているため、キャッシュ構造を変更することはできませんが、共有メモリに実際に書き込まれていることを確認する限り、これまでのところすべて正常に動作しています。ただし、関連するメモリのキャッシュを無効にしてみましたが、違いはありませんでした。
查看全文
RW612 TF-M NS:Flexcomm UART 无功能 - 时钟驱动器使用安全 CLKCTL1 地址 您好, 我发现了一个 Bug,当出现以下情况时,任何 Flexcomm UART 都会完全失效 为启用 TF-M 的 frdm_rw612/rw612/ns 构建。 根本原因:时钟驱动器使用安全 CLKCTL1 地址 (0x50021000) 启用 Flexcomm 时钟时。从 NS 世界中默默地写下这些文字 被忽视了,让外围没有了防护罩。所有 USART 寄存器的读数均为 0x00000000。 解决方法是在 UART 启动前通过 NS 别名手动启用时钟: volatile uint32_t *clkctl1_ns = (volatile uint32_t *)0x40021000UL; clkctl1_ns[0x508/4] = 0x01; clkctl1_ns[0x40/4] = (1UL<< 8); 我已经在 nxp-zephyr GitHub 上提交了一份错误报告: https://github.com/nxp-zephyr/nxp-zephyr/issues/35 有人遇到过这种情况吗?是否正在进行适当的修复? 谢谢! Re: RW612 TF-M NS: Flexcomm UART non-functional — clock driver uses secure CLKCTL1 address 你好,@chofmeister。 请与我们分享您复制这种行为的步骤。我无法通过 MCUXpresso for VS Code 使用 psa_protected_storage 示例来重现这种行为,该示例使用 TF-M 和 UART 控制台,信息正在打印,因此 UART 外设的时钟是正确的。 此外,对于 FRDM-RW612,时钟初始化是在 soc.c 文件的 clock_init 函数中完成的。 Re: RW612 TF-M NS: Flexcomm UART non-functional — clock driver uses secure CLKCTL1 address 感谢您提供的链接。确认一下 - 我运行的是 4.3.0 版来自 nxp-zephyr 下游仓库,那里存在错误。 我阅读了《时钟配置》一文。据我所知,外设 时钟应在 init.c 或 soc.c 中的 board_early_init_hook() 中启用。 查看 frdm_rw612 init.c、我可以看到 Board_early_init_hook() 已在 上实现,但并未启用任何 Flexcomm 时钟。 根本原因特定于 TF-M NS 版本:HAL 时钟函数 (fsl_clock.c)使用安全 CLKCTL1 地址(0x50021000)。在 NS 世界中,对该地址的写入将被静默忽略,从而使 Flexcomm0 完全处于无时钟状态 - 所有 USART 寄存器的读数均为 0x00000000。 我目前的解决方法是在 UART 启动之前,在应用代码中直接写入 CLKCTL1 NS 别名 (0x40021000),这虽然有效,但 显然不是正确的长期解决方案。 根据这篇文章,修复可能属于 init.c 中的 board_early_init_hook() 。在 CONFIG_TRUSTED_EXECUTION_NONSECURE 保护下,使用 NS 别名地址。不过,在尝试公关之前,我想确保这与 团队的方法一致。 这是基于 RW612 的 TF-M NS 版本 的已知差距吗,是否有 建议的修复正在进行中? Re: RW612 TF-M NS: Flexcomm UART non-functional — clock driver uses secure CLKCTL1 address 你好,@chofmeister,希望你一切都好。 我看到您在我们的下游存储库中提交的报告是您在 Zephyr 4.1.0 版本中发现的一个错误、能否请您确认一下,在我们最新的下游版本库(目前为 4.3.0)中是否仍然存在这种行为? 另外,我还建议查看Zephyr 中的时钟配置,因为 Zephyr 时钟管理子系统尚未支持时钟配置和启用。 Re: RW612 TF-M NS: Flexcomm UART non-functional — clock driver uses secure CLKCTL1 address 你好,RomanVR、 感谢您的回复。我可以在 soc.c 中看到时钟启动代码: #if (DT_NODE_HAS_COMPAT_STATUS(DT_NODELABEL(flexcomm0), nxp_lpc_usart, okay))&& CONFIG_SERIAL CLOCK_SetFRGClock(&(const clock_frg_clk_config_t){0, kCLOCK_FrgPllDiv, 255, 0}); CLOCK_AttachClk(kFRG_to_FLEXCOMM0); #endif 代码是正确的,但底层 HAL 函数 (CLOCK_AttachClk、CLOCK_SetFRGClock)使用的是安全的 CLKCTL1 地址 (0x50021000)。在 NS 世界中,对该地址的写入会被 默默忽略,从而使 Flexcomm0 处于无时钟状态。所有 USART 寄存器的读数均为 0x00000000。 我还在 nxp-zephyr GitHub 仓库(问题 #35)上提交了一个错误, 贡献者 waqar-tahir 证实了这个问题,并指出这个问题已经在即将发布的 4.4 下游版本中得到解决。 目前,我的解决方法是在 UART 启动之前,在应用代码中直接写入 CLKCTL1 NS 别名 (0x40021000)。 希望这有助于澄清根本原因。
查看全文
imx8qm jailhouse Hi all, Is there any document showing all the steps to have a demo running on imx8qm mek board with jailhouse? I was going over this: L5.4.70_2.3.3_LINUX_DOCS but all I could find is a reference to device trees: Hypervisor Jailhouse Enables the Jailhouse Hypervisor device trees. • imx8qxp-mek-root.dtb: DTB for root-cell I do not know what to do with this info. That is why I need a step by step instruction list. Br, Mircea Re: imx8qm jailhouse @Jerry137207  Hi, Are you running jailhouse on top of hw ? Re: imx8qm jailhouse Hi @Rita_Wang  I am using MCIMX8QM soc I need to run android and freertos on top of hypervisor. Which hypervisor i can use ? Re: imx8qm jailhouse Waste of time. Nothing works out of the box on nxp imx8qm, at least not with the software provided by nxp. Android does not run in jailhouse, on imx95 they have a small android demo running in xen. freertos can run on the second core m3 core, you can flash the emmc with android and have it like that running. no hypervisor needed. Re: imx8qm jailhouse hi @Ahelion i am planning to use MCIMX8QM-CPU soc  i need to bringup freertos and Android on top on this do we need hypervisor here, and also Jailhouse is already present in the latest version of android ? Re: imx8qm jailhouse Hi, Ahelion: I'm interested in runing multiple OS based on jailhouse, but related information is lack. I've sucessfully run jailhouse test demo in Imx8qm mek board. If you would like share info each other, plz email me: [email protected]. Re: imx8qm jailhouse I can tell you right now, it is not supported. I could not get jailhouse or xen to work on imx8qm. Whatever documentation i find is referencing linux4.9, which can not be build anymore. Re: imx8qm jailhouse Hi, Yes, the xen is supported on the i.MX8QM. You can refer to the attach document. Wish you have a nice day Best Regards Rita Re: imx8qm jailhouse any ideea?  Found out that the latest linux kernel does support the lates XEN How can I get Linux and Android running at the same time? Re: imx8qm jailhouse OK, I will help confirm. Re: imx8qm jailhouse L5.4.70_2.3.3, i was following this quide, so all bsp-s mentioned here I am using. Re: imx8qm jailhouse Which version BSP are you want to use? Re: imx8qm jailhouse @Rita_Wang Xen willl support on latest kernal 6x? Re: imx8qm jailhouse @Rita_Wang i have one more we are buying MCIMX8QM soc  i need to run android and freertos as guest which hypervisor support on this latest kernel? jailhouse supports on latest kernel for my requirement  Re: imx8qm jailhouse Hi @Shivu_Guru_24 , Sorry for late reply. For the XEN the on latest kernal 6x do not support it. If customer want to use, they can do porting themself. In our BSP 4.14.98 support it. Customer and refer it: Embedded Linux for i.MX Applications Processors | NXP Semiconductors   Hope this can do help for you Wish you have a nice day Best Regards Rita Re: imx8qm jailhouse Hi @Shivu_Guru_24 , Jailhouse is a Type 1 hypervisor for i.MX 8. Xen is not support in the latest version BSP. Wish you have a nice day Best Regards Rita
查看全文
RDK01DB1563 硬件或 FT232H 模块固件 你好 我可能在批量编程时损坏了编程器,目前无法连接芯片。我需要以下文件:RDK01DB1563 硬件文件或 FT232H 模块固件,以便排除故障。 BR Re: RDK01DB1563 HARDWARE OR FT232H module firmware 你好 有关硬件原理图和电路图,请参阅用户手册 UM11235 - TEA2016DB1514 USB 至 I²C 硬件接口。 本文件包含完整的电路图(见第 3 章)。 关于 FT232H 模块固件,由于该模块使用标准 FTDI 驱动程序软件包,因此不需要或提供任何自定义固件。有关安装 FT232H 驱动程序的详细信息,请参阅 UM11521 - RDK01DB1563 入门,第 4.1 章 安装软件,其中说明了如何自动安装或在需要时手动安装 FT232H 驱动程序。 BRs, Tomas
查看全文
imx8ulp 功能域间外设数据共享 你好 我正在尝试了解i.MX 8ULP上的外设和跨功能域数据共享,尤其是在一个功能域处于低功耗状态时。 从参考手册中的图 6(i.MX 8ULP 架构图)中,我了解哪些外设与实时域 (RTD) 和应用域 (APD) 相关。不过,我想确认一下在以下情况下哪些是可能的,哪些是不可能的: 1) 在 APD 低功耗状态下,RTD 访问 APD 外设 如果 APD 处于非常低的功耗模式(例如,挂起到 RAM 或其他低功耗状态),是否支持 RTD 从 APD 自有外设访问数据? 如果可以,建议采用什么方法(共享内存、DMA 等)? 是否存在电源模式限制,即由于时钟/电源受限而无法访问 APD 外围设备? 同样,反过来也是可能的: 2) RTD 处于低功耗时,APD 可访问 RTD 外围设备 当 RTD 处于最低/低功耗状态时,APD 能否访问 RTD 所有外设的数据?如果是,建议采用什么方法? 3) RTD 和 DSP 功能域之间的外围设备/数据共享(在 RTD 内) 我们也很好奇这是如何适用于 RTD 中的 DSP 功能域的: RTD 和 DSP 之间的外设/数据共享处理方式是否与 RTD↔APD 共享类似,还是因为 DSP 位于 RTD 内部而有所不同? 在图 6 中,我们注意到从 DSP 功能域横杆到 RTD 横杆(有一条线表示连接)的连接上似乎缺少了 Sx 标签。这是文档错误吗? 该图似乎暗示数据只能在 RTD → DSP 之间流动,而不是在 DSP → RTD 之间流动,这似乎不是故意的。您能确认正确的访问方向吗? 4) APD 访问 DSP 功能域数据 最后,APD 如何访问 DSP 功能域生成的数据? APD 是通过横梁链(APD → RTD → DSP)访问 DSP 资源,还是有更直接/标准的机制? 谢谢! i.MX8ULP Re: imx8ulp peripheral data sharing between domains 你好@ meketok 希望你一切都好。 这个问题问得好。 你可以从 U-启动 看看 imx8ulp.dtsi ,看看通过 Per_Bridge1 可以访问该外围设备。 但在 Linux 环境中不建议这样做,因为通过桥接器从 APD(Cortex A)访问 M33 外设会产生"侧信道。"如果 Cortex A 崩溃,它可能会挂起 M33 的总线,从而违背硬件隔离的目的。 顺祝商祺! 萨拉斯 Re: imx8ulp peripheral data sharing between domains 大家好, ,这的确是一个有趣的话题。 1) 是否可以使用 rpmsg 驱动程序?它有哪些限制(即带宽、延迟)? 2) 支持此功能需要在 M33 上运行哪些确切的 M33 固件? 至少 i.MX 8ULP EVK 使用 I2C0 和 I2C1(与 RTD 功能域相关的总线)与传感器和其他外围设备通信。 Re: imx8ulp peripheral data sharing between domains 你好@Spal_13 希望你一切都好。 实际上,这些功能域有自己的外围设备,这些外围设备不是共享的。 请看参考手册的图 6. i.MX 8ULP 架构图: 您可以看到无法从非所有者的功能域访问外围设备。 以 APD 为参考: 您可以看到 APD 可以访问的 GPIO 包括 GPIOE、GPIOF 和 GPIOD(GPIOD 通过 LPAVD)。 您可以在imx8ulp.dtsi 中确认这一点: 顺祝商祺! 萨拉斯 Re: imx8ulp peripheral data sharing between domains @Manuel_Salas 你能解释一下你向 @Spal_13 展示的连接图中各个功能域的紫色 AXI 总线吗? 您能解释一下为什么 A35 内存映射中会出现 RTD 外设桥 0 和外设桥 1 吗? 您能解释一下为什么 APD 外设桥 3 和外设桥 4 会出现在 M33 内存映射中吗? 表 2. A35 系统内存图 表 5. CM33 内存映射 Re: imx8ulp peripheral data sharing between domains @Manuel_Salas 能否请您解释一下这里的代码? u-boot 在 AP 功能域中运行并访问 RTD 功能域 i2c0。 端口(iomux)和 i2c0 模块。为什么? uboot-imx/板/freescale/imx8ulp_evk/imx8ulp_evk.c 位于 lf-6.12.3-1.0.0 · nxp-imx/uboot-imx · GitHub #define I2C_PAD_CTRL (PAD_CTL_ODE) static const iomux_cfg_t lpi2c0_pads[] = { IMX8ULP_PAD_PTA8__LPI2C0_SCL | MUX_PAD_CTRL(I2C_PAD_CTRL), IMX8ULP_PAD_PTA9__LPI2C0_SDA | MUX_PAD_CTRL(I2C_PAD_CTRL), }; #define TPM_PAD_CTRL (PAD_CTL_DSE) static const iomux_cfg_t tpm0_pads[] = { IMX8ULP_PAD_PTA3__TPM0_CH2 | MUX_PAD_CTRL(TPM_PAD_CTRL), }; void mipi_dsi_mux_panel(void) { int ret; struct gpio_desc desc; /* It is temp solution to directly access i2c, need change to rpmsg later */ /* enable lpi2c0 clock and iomux */ imx8ulp_iomux_setup_multiple_pads(lpi2c0_pads, ARRAY_SIZE(lpi2c0_pads)); writel(0xD2000000, 0x28091060);    Re: imx8ulp peripheral data sharing between domains 我对这个问题也非常感兴趣。 1.@Spal_13的问题都与芯片有关,包括各种可能情况的问题。 2。恩智浦的电路板支持包 Linux只是可以在iMX8ULP芯片上运行的众多场景之一。恩智浦的软件设计就是这样。只是恩智浦的电路板支持包 Linux不这样做。只是恩智浦电路板支持包 Linux 的应用场景不涉及这一点。你无法根据当前的 BSP 场景来解释芯片的功能。 3.你对图 6(即 MX 8ULP 架构图)的理解与@meketok完全相反。meketok 的问题直接指向了相反的答案。坦率地说,我目前认为 meketok 是对的,而你错了。 4.请逐一回答@meketok的问题。 Re: imx8ulp peripheral data sharing between domains 你好,@Manuel_Salas、 基本 8ULP 架构假定两个内核可以协同使用,以实现最佳功效。 例如,APD 可能会进入睡眠/掉电模式,而 RTD 保持活动状态,从传感器采集数据,然后将其独立保存到缓冲区。只有在检测到用户干预(触摸、按钮、运动)时,APD 才会激活。 但是,当你说M33总线可能会被挂起时,就会出现严重的限制。那我们为什么需要这个 M33 核心呢? 如果可能存在这种挂起的情况,那么我们大家(恩智浦和社区)应共同研究解决方法,并且必须清楚地描述"危险的" 场景。 此外,imx8ulp EVK(假设黄金样本)演示了与 APD 的 RTD 连接外围设备的交互式工作: 1) 我们可以访问 I2C0 (RTD) 总线设备: root@imx8ulpevk:~# i2cget -f -y 0 0x60 0x00 root@imx8ulpevk:~# i2cget -f -y 0 0x6c 0xc1 root@imx8ulpevk:~# i2cget -f -y 0 0x6c 2 0x61 2)与 DTS 相对应: &i2c_rpbus_0 { #address-cells =<1> ; #size-cells =<0> ; status ="okay" ;   mpl3115@60 { // 高度计 兼容 ="FSL,MPL3115" ; reg =<0x60> ; };   ite_bridge: it6161@6c { // MIPI 转 HDMI 兼容 ="ite,it6161" ; reg =<0x6c> ;          }; };   3)我们还可以看到按下与 RTD 相连的按钮 SW7/8 (PTB13/12) 所产生的事件:   root@imx8ulpevk:~# evtest /dev/input/event0 输入驱动程序版本为 1.0.1 输入设备 ID:总线 0x19 供应商 0x0 产品 0x0 版本 0x0 输入设备名称:" rpmsg-keys " 支持的活动 事件类型 0 (EV_SYN) 事件类型 1 (EV_KEY) 事件代码 114(KEY_VOLUMEDOWN) 事件代码 115(KEY_VOLUMEUP) 属性: 测试...(中断退出) 事件:时间 1748573575.153335、类型 1(EV_KEY),代码 115(KEY_VOLUMEUP),值 1 事件:时间 1748573575.153335、-------------- SYN_REPORT ------------ 事件:时间 1748573575.332514、类型 1(EV_KEY),代码 115(KEY_VOLUMEUP),值 0 事件:时间 1748573575.332514、-------------- SYN_REPORT ------------ 事件:时间 1748573579.152752、类型 1(EV_KEY),代码 114(KEY_VOLUMEDOWN),值 1 事件:时间 1748573579.152752、-------------- SYN_REPORT ------------ 事件:时间 1748573579.309757、类型 1(EV_KEY),代码 114(KEY_VOLUMEDOWN),值 0 事件:时间 1748573579.309757、-------------- SYN_REPORT ------------   Re: imx8ulp peripheral data sharing between domains 你有答案了吗?
查看全文
Creating SREC file for HAB bootable image generation I'm generating command line tools for flashing the application image to the NOR flash of the MIMXRT1170 (EVKB board). I know that the nxpimage tool helps create SREC format files from axf/elf files like this:  nxpimage utils binary-image convert -i "%AXF_FILE%" -f s19 -o "%SREC_FILE%"   But the SREC file generated is different from the SREC file that is created when using the MCUXpresso Secure Provisioning Tool in terms of the contents and addressing. When I use the MCUXpresso Secure Provisioning Tool to load an elf/axf file to create a bootable image, it adds the srec file and parsed dcd file in the source folder of the MCUXpresso Secure Provisioning Tool's workspace.  I would like to know how those srec and parsed dcd file is generated by the MCUXpresso Secure Provisioning Tool. Also checking if there is a way to extract the parsed DCD file from SREC/elf/axf file separately with any CLI tools?   I know that the MCUXpresso Secure Provisioning Tool can be invoked from CLI to automate the whole process, but we are trying to create a script that can flash the MCU with just the nxpimage and blhost tools.     Re: Creating SREC file for HAB bootable image generation Hi @tj787 , What can be seen here is the following command creates this output into specified “parsed-directory”: nxpimage.exe hab parse -f mimxrt1176 -o parsed-directory -b my-application-with-dcd.bin Hope that helps, Have a great day, Kan ------------------------------------------------------------------------------- Note: - If this post answers your question, please click the "Mark Correct" button. Thank you! - We are following threads for 7 weeks after the last post, later replies are ignored Please open a new thread and refer to the closed one, if you have a related question at a later point in time. -------------------------------------------------------------------------------
查看全文
Flexera 许可加密狗 你好 我们使用 Flexera 许可证密钥使用 CodeWarrior 5.2 和 11.1 已经有一段时间了。本来一切正常,但突然之间,CodeWarrior Suites 似乎再也无法识别加密狗了。 lmtools 可以正确显示 FLEXid: 我的 license.dat 文件位于以下路径: C:\Program Files (x86)\Freescale\CWS12v5.2 C:\Freescale\CW MCU v11.1\MCU 在 CodeWarrior 5.2 中,我遇到了以下错误: 而在 11.1 版中,我得到的是 我使用的电脑运行的是 Windows 11。我们有一些使用 Windows 10 操作系统的旧笔记本电脑,在使用时没有任何问题。 如有任何帮助,我们将不胜感激! 谢谢! 扎克
查看全文
CAN UDSアップデートのためのS32K144統合ブートローダ構成 こんにちは、 私は、S32 Design Studio を使用して、S32K144 EVB 上の NXP Unified Bootloader ソース コードを操作しています。私の目的は、MCU にブートローダを統合し、UDS を使用して CAN 経由でアプリケーション ファームウェアを更新することです。ブートローダーをフラッシュする前に、ソース ファイルまたは構成を変更する必要があるかどうかを確認したいと思います。たとえば、CAN ID やボーレートなどの CAN パラメータを設定したり、S32K144 EVB の HAL/ドライバー移植ファイルを変更したりしますか?または、ブートローダーを何も変更せずにそのまま EVB にフラッシュして評価することはできますか? ブートローダをプログラミングした後、それが正しく実行されていることを確認し、CAN 経由でアプリケーションのフラッシュをテストしたいと思います。ブートローダ モードを強制する方法、ブートローダの実行を確認する方法 (UART ログ、CAN 応答、デバッガなど経由)、ブートローダがアプリケーションにジャンプする方法など、推奨される検証手順について説明していただけますか? さらに、正しいアプリケーション フラッシュ開始アドレス、リンカー設定、ベクター テーブルの場所、必要なスタートアップ コードの変更など、ブートローダーで動作するようにアプリケーション プロジェクトを構築する方法に関するガイダンスも必要です。最後に、S32K144 を使用した UDS フラッシュに使用される一般的な PC 側ツールと、CAN 経由で統合ブートローダをテストするための推奨 CAN インターフェース ハードウェアについて知りたいと思います。 Re: S32K144 Unified Bootloader Configuration for CAN UDS Update こんにちは@padmaja 、 残念ながら、コミュニティで共有されている統合ブートローダーは非公式のデモ版のみ提供されています。 現状のまま 保証もサポートもありません。現在、このデモをサポートするリソースがありません。ドキュメントを通じてご質問にお答えするよう努めますが、フォローアップが表示された場合は、代わりにサポート ページにお問い合わせください。 アプリケーションを MCU にフラッシュし、ECU-BUS 機能のテストを開始できます。CAN ID、ボーレートなどを変更する必要はありません。両方を参照できます 統合ブートローダ – ユーザーガイドとUDS ブートローダ実装ガイド。 Open Bus Toolを使用する前に、CANブートローダをMCUにダウンロードする必要があります。これは、S32DSを使ってプロジェクトをコンパイルすることで実行できます。また、コミュニティ投稿「 HOWTO: S32 Design Studioを使用してマイクロコントローラに個別のelf/srec/hexファイルをダウンロードする」に記載されているように、elf/binaryファイルをアップロードすることもできます。 Open Bus Toolを使用すると、CANバス経由でアプリケーションをダウンロードできます。PEAK CANバスインターフェースをサポートしています。APPプロジェクトは統合ブートローダパッケージに含まれています。 ツールで読み込む必要があるJSONファイルも存在します。このJSONファイルには、フラッシュドライバ(flash_api.bin)とAPPファームウェア(APPファームウェアのフォーマットはS19/hex/binary)に関する情報が含まれています。 よろしくお願いします、 ジュリアン
查看全文
RW612 IO_MUX_SetPinMux(IO_MUX_FC3_USART_DATA); の IO 多重化機能を変更するにはどうすればよいでしょうか? この機能は、I/O を多重化するために使用しますか? /*! * @brief IO_MUX ピンの MUX モードを設定します。 * @note パラメータにはピン機能 ID マクロを入力できます。 * * これは、GPIO2/GPIO3 を Flexcomm0 UART RX/TX として設定する例です。 * @コード * IO_MUX_SetPinMux(IO_MUX_FC0_USART_DATA); * @endcode * * これは、GPIO6/GPIO10 を Flexcomm1 I2C SDA/SCL として設定する例です。 * @コード * IO_MUX_SetPinMux(IO_MUX_FC1_I2C_6_10); * @endcode * * @Param pinLowMask GPIO0-31 ピン マスク。 * @Param pinHighMask GPIO32-63 ピン マスク。 * @Param gpioFcSetMask IO_MUX_GPIO_FC_MASK() で定義される、設定する GPIO および Flexcomm レジスタマスク * @Param gpioFcClrMask クリアするGPIOおよびFlexcommレジスタマスク。IO_MUX_GPIO_FC_MASK()で定義されます。 * @Param fselSetMask 設定するFSELレジスタマスク * @Param fselClrMask クリアするFSELレジスタマスク * @Param ctimerSetMask IO_MUX_CTIMER_MASK() で定義される、設定する C_TIMER_IN/C_TIMER_OUT レジスタマスク * @Param ctimerClrMask クリアする C_TIMER_IN/C_TIMER_OUT レジスタマスク。IO_MUX_CTIMER_MASK() で定義されます。 * @Param sctimerSetMask 設定するSC_TIMERレジスタマスク * @Param sctimerClrMask クリアするSC_TIMERレジスタマスク / 静的インラインvoid IO_MUX_SetPinMux(uint32_t pinLowMask, uint32_t ピンハイマスク、 uint32_t gpioFcSetMask、 uint32_t gpioFcClrマスク、 uint32_t fselSetMask、 uint32_t fselClrMask、 uint32_t ctimerSetMask、 uint32_t ctimerClrMask、 uint32_t sctimerSetMask、 uint32_t sctimerClrマスク) このマクロは設定ツールで生成されたのでしょうか?数値やマスクされたマクロが満載で、全く読めません。 #IO_MUX_FC3_USART_DATA を定義する \ 0x05000000U, 0x00000000U, /* ピンマスク */ \ IO_MUX_GPIO_FC_MASK(0, 3, 0x200), IO_MUX_GPIO_FC_MASK(1, 3, 0x1EE), /* GPIO&FCマスク */ \ 0x00000000U, 0xC0000000U, /* FSELマスク */ \ IO_MUX_CTIMER_MASK(0, 0), IO_MUX_CTIMER_MASK(0x40, 0x40), /* CTimerマスク */ \ IO_MUX_SCTIMER_MASK(0, 0), IO_MUX_SCTIMER_MASK(0x10, 0x10) /* SCTimerマスク */ 別の IO に変更するにはどうすればいいでしょうか? Re: RW612 IO_MUX_SetPinMux(IO_MUX_FC3_USART_DATA); IO复用如何修改? お返事ありがとうございます。 1. シリアル ポート (UART) 通信用に別の I/O ポート セットを選択します。 2. SDKを読んでいて、その中のコードを参照しています。MCUXpressoスタイルのコードに初めて触れたので、よくわからない部分があります。MCUXpresso を 使ってFlexCommをUARTとして実装する方法についてのドキュメントやウェブページ はありますか ? 3. 現在、ボードをダウンロードできません。 私はM33を選択しました。 ダウンロードできません J-linkは有料製品であり、既存の製品ではあまりサポートされていないため、あまり気に入っていません。代わりにCMSIS-DAPを使いたいと思っています。 しかし、ファームウェアを更新する方法を見つけることができませんでした。 プログラムのダウンロード機能を緊急に有効にする必要があり、ご協力をお願いいたします。 Re: RW612 IO_MUX_SetPinMux(IO_MUX_FC3_USART_DATA); IO复用如何修改? こんにちは、 SDK の例に基づいてアプリケーションを構築することをお勧めします。 Config Tools を使用してペリフェラルを変更または構成する必要はありません。必要に応じてソースコードを変更できます。 RW612用のモジュールを使用していますか? 具体的に何を達成したいのか説明していただけますか? よろしくお願いいたします。 ダニエル。 Re: RW612 IO_MUX_SetPinMux(IO_MUX_FC3_USART_DATA); IO复用如何修改? ダウンロードに成功しました。 Re: RW612 IO_MUX_SetPinMux(IO_MUX_FC3_USART_DATA); IO复用如何修改? こんにちは、 FRDM-RW612を使用していることをご確認ください。 UM12160をご覧ください。搭載デバッガーのファームウェアを更新するには、JP2 をショートする必要があります。セクション 3.5 に記載されている手順に従ってください。 よろしくお願いいたします。 ダニエル。
查看全文
GUI Guider v1.7.2 オフライン テンプレートをダウンロードできません。 公式サイトからGUI Guider v1.7.2 オフライン テンプレートをダウンロードできません。ダウンロードしたバージョンは自動的に最新の 1.10.1 バージョンに更新されます。サーバーのリソース パスが正しいかどうかを確認してください。 Re: I can't download the GUI Guider v1.7.2 Offline Template. こんにちは@zzxx 、 この問題を報告していただきありがとうございます。試してみましたが、まさに説明どおりに動作しました。これを社内チームに報告し、修正が提供されるのを待ちます。 BR セレステ Re: I can't download the GUI Guider v1.7.2 Offline Template. こんにちは@zzxx 、 現時点ではこの問題に関してそれ以上の進展はありません。クリスマス休暇および EMEA と AMEC のタイム ゾーン全体の休日期間のため、プロセッシング時間は通常より長くなる場合がありますのでご了承ください。 皆様のご理解とご協力に心より感謝申し上げます。 楽しい一日をお過ごしください! BR セレステ Re: I can't download the GUI Guider v1.7.2 Offline Template. こんにちは@zzxx 、 すべてが順調に進んでいることを祈っています。問題が解決したことをお知らせしたかったのです。   BR セレステ    
查看全文
What`s the meaning of the 'P1' in the type of "LPC1769FBD100/P1" Hi All, Recently, I received a pack of LPC1769 chips. The strange thing is that the number at the end of it is P1, which seems a little special, and I have not been able to find out the specific meaning and manual of LPC1769 as a P1. Therefore, I came here specially to consult everyone and hope to get your help. Thanks~~~ LPC1769FBD100  大家好, 最近我收到一包LPC1769芯片,奇怪的是它的末尾编号是P1,似乎有些特殊,而且未能查到有关于LPC1769这款P1的具体含义以及手册。 所以,特地前来,咨询大家,希望得到大家的帮助。谢谢大家。 LPC1769FBD100  Note: Attached image was removed. LPC17xx Re: What`s the meaning of the 'P1' in the type of "LPC1769FBD100/P1" Hi @Kuroky_Rasum, P1 is an internal identifier and does not impact the functionality of the MCU. You can find more details in the following community post. Difference between LPC1769FBD100, 551 / LPC1769FBD100K / LPC1769FBD100/P1K - NXP Community Best Regards, Pablo
查看全文
S32K348 ECC 设置 你好 我有三个问题需要帮助回答,谢谢大家 1. 能否提供 ecc 样品 2. 如何验证功能? Re: S32K348 ECC set 你好 ECC 测试是 SAF/SPD 代码包,软件包的 emCEM 驱动程序的一部分。 您会发现这些例子都有复杂的验证检查。 https://www.nxp.com/design/design-center/software/functional-safety-software/s32-safety-software-framework-saf-and-safety-peripheral-drivers-spd:SAF 如果您更喜欢自己的代码/硬编码测试,请参阅参考手册: 先修课程 RTD 时钟启动时,ME 启用 EIM 和 ERM 的时钟。如果 EIM 调节器没有响应,几乎总是时钟门控问题--首先启用分区/COFB 时钟。 启动代码会在读取之前初始化 SRAM 的 ECC(直写一次),否则第一次读取可能会触发信号多位错误。(Zephyr& SEGGER 笔记强调这是一个常见的陷阱)。 确定与要访问的存储器主控器/区域相对应的 ERM 通道(例如,CM7_0 读取 SRAM)。通道映射位于 RM 中;公开教程总结了这一概念。 高级流程: 启用 EIM 的时钟& ERM 配置 ERM:启用相关通道的 "单位纠正 "中断和 "多位错误 "中断 设置 EIM:选择 SRAM 通道,为注入设置一个数据/检查位(单比特) 读取该内存区域的任何地址 → ERM 应报告可更正的错误 清零,然后在 EIM 中设置两个位(双位) 再读一遍 → 预计是不可纠正的 → 你的处理程序应该捕获/控制故障 可选择擦除(重写)受影响的位置,以清除已纠正的综合症 顺祝商祺! Peter
查看全文
Scarthgap 6.6.52 上的 iMX6ULL 以太网 我已经迁移到使用 6.6.52 内核的 Yocto 版本,我正在努力让以太网正常运行。在迁移时,我注意到 TX_CLK 线路是一个恒定值,而不是正弦时钟。我曾尝试从元第三方层构建多个板,但是我一直看不到时钟信号。 如果我的配置需要更改,请告知: pinctrl_enet1:enet2grp { fsl、引脚 =< MX6UL_PAD_GPIO1_IO07__ENET1_MDC 0x1b0b1 MX6UL_PAD_GPIO1_IO06__ENET1_MDIO 0x1b0b1 MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN0x1b0b0 MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0 MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA000x1b0b0 MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0 MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA000x1b0b0 MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0 MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031 > ; }; &fec1 { pinctrl-names ="default"; pinctrl-0 =<& pinctrl_enet1>; phy-mode ="rmii"; phy-handle =<& ethphy2>; status ="okay" ; mdio { #address-cells =<1>; #size-cells =<0> ; ethphy2: ethernet-phy @2 {cl ocks = < & clks IMX6UL_CLK_ENET2_REF >; 时钟名称 = " rmii-ref "; reg = <1>;};};相同配置在 5.5.15 版上运行,没有这些行:时钟 = < & clks imx6UL_CLK_ENET2_REF >; clock-names = " rmii-ref "; 此外,在查看更改时,我注意到 Yocto 版本之间的 imx6ul.dtsi 文件发生了以下变化:fec2:以太网 @20b4000 {兼容 = " fsl,imx6ul-fec ", " fsl, imx6q-fec "; reg = <0x020b4000 0x4000>;中断 名称 = " int0 "," pps ";中断 = ,< GIC_SPI 121 IRQ_TYPE_LEVEL_HIG H > ; 时钟 = < & clks IMX6UL_CLK_ENET >, < & clks imx6UL_CLK_ENET_AHB >, < & clks imx6UL_CLK_CLK_ENET_PTP >, < & >, < & 点击 IMX6UL_CLK_ENET2_REF_125M >; 时 钟名称 = " ipg ", " ahb ", " ptp ", " enet_clk_ref ", " enet_out "; fsl, num-tx-queues = <1>; fsl,num-rx-queues = <1>; fsl,停止模式 = < & gpr 0x10 4 >;fsl,magic-packet; fsl,wakeup_irq = <0>;状态 = " 禁用 ";};变成: fec2:以太网@ 20b4000 { 兼容 = " fsl,imx6ul-fec "," fsl,imx6q-fec ";reg = <0x020b4000 0x4000>;中断名称 = " int0 "," pps ";中断 = < GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH >, ; 时钟 = < & clks imx6UL_CLK_ENET >, < & clks imx6UL_CLK_CLK_ > < &ENET_PTP >, 86> & clks IMX6UL_CLK_ENET2_REF_SEL >; 时 钟名称 = " ipg ", " ahb ", " ptp ", " enet_clk_ref "; fsl, num-tx-queues = <1> <1> fsl,num-rx-queues = ; fsl,停止模式 = < & gpr 0x10 4 >;fsl,magic-packet; fsl,wakeup_irq = <0>; 状态 = " 已禁用 ";};感谢您的提前帮助。 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 以太网行为, 根 @imx6ul:~# ifconfig eth0:flags=4099 < UP、BROADCAST、MULTU 1500 inet6 fe80:: 230:64 ff: fe3f: f7ff prefixlen 64 scopeid 0x20 eth er 00:30:64:3 f: f7: ff txqueuelen 1000(以太网)RX 数据包 0 字节 (0.0 B) RX 错误 0 已丢弃 0 溢出 0 帧 0 TX 数据包 12 字节 1558 (1.5 KiB) TX 错误 0 丢弃 0 超限 0 载波 0 载波 0 碰撞 0 > lo:flags=73 mtu 65536 inet 127.0.0.1 网络掩码 255.0.0.0 inet6:: 1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000(本地 环回) RX 数据包 93320 字节 7092320 (6.7 MiB) RX 错误 0 丢弃 0 帧 0 个 TX 数据包 93320 字节 70320 字节 7092320 (6.7 MiB) RX 错误 0 丢弃 0 帧 0 个 TX 数据包 93320 字节 92320 (6.7 MiB) TX 错误 0 掉落 0 超支 0 载波 0 次碰撞 0 root @imx6ul:~# ethtool eth0 eth0 的设置: 支持的端口:[TP MII] 支持的链接模式:10BaseT/Half 10BaseT/Full 100BaseT/Half 1000BaseT/全 1000BaseT/全部 1000BaseX/完全支持暂停帧使用:对称 支持自动协商:未报告广告链接模式:10BaseT/Half 10BaseT/Full 100BaseT/Half 100BaseT/Full 100BaseT/Full 100BaseT/Full 100BaseT/Full 100BaseT/Full 100BaseT/Full 100BaseT/Full 100BaseT/Full 全部 1000BaseX/Full 广告暂停帧使用情况:对称 广告自动协商:是 广告的 FEC 模式:未报告速度:未知! 双工:未知! (255) 自动协商:开启 主从 cfg:首选从机 主从状态:从机 端口:双绞线 PHYAD:0 收发器:外部 MDI-X:开启(强制) 支持唤醒:g Wake-on:检测到了 d Link:否 在所有情况下,以太网电缆和硬件均使用先前的电路板支持包版本进行了正确测试。 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 你好 nxp, 我们在将 imx6ul 电路板支持包 从 gatesgarth(5.10)升级到 scarthgap(6.6.52)时遇到了同样的问题。使用的 dts 和 dtsi 已附上,对旧的 电路板支持包(5.10)的 pinctrl 和 reg 属性的微小改动也同样适用。 启动后主板能够分配 ipv6 但是 dmesg 会出现以下紧急情况(忽略除 fec 以外的任何其他消息) [27.822747] Micrel KSZ8081 或 KSZ8091 2188000.ethernet-1:00:attached PHY driver (mii_bus:phy_addr=2188000.ethernet-1:00, irq=POLL) [ 28.170432] flexcan 2094000.can can1: bit-timing not yet defined [ 29.624259] flexcan 2090000.can can0: bit-timing 尚未定义 [ 29.929672] FEC 2188000.Ethernet eth0: Link is Up - Unknown/Unknown - flow control off [ 30.969118] FEC 2188000.ethernet eth0: Link is Down [ 34.840743] weston[580]: memfd_create() 被调用,但未设置 MFD_EXEC 或 MFD_NOEXEC_SEAL [ 37.241251] fec 2188000.ethernet eth0: Link is Up - Unknown/Unknown - flow control off [ 38.249410] FEC 2188000.ethernet eth0: Link is Down [ 39.290339] Micrel KSZ8081 or KSZ8091 2188000.ethernet-1:00:主/从解析失败 [ 39.290406] ------------[ cut here ]------------ [ 39.290429] WARNING: CPU:0 PID: 126 at /drivers/net/phy/phy.c:1259 phy_state_machine+0xb0/0x2e8 [ 39.290546] phy_check_link_status+0x0/0xc0: returned: -67 [ 39.290614] 链接到的模块: caam_jr caamkeyblob_desc caamhash_desc caamalg_desc crypto_engine authenc libdes caam secvio error 8021q [ 39.290858] CPU:0 PID: 126 Comm: kworker/0:5 Not tainted 6.6.52-lts-next-gcec723603de8-dirty#1 [39.290911] 硬件名称:飞思卡尔 i.MX6 Ultralite(设备树)[39.290943] 工作队列:events_power_efficience phy_stack_machine [39.291050] unwind_backtrace 来自 show_stack+0x14 [39.291144] 来自 dump_stack_lvl+0x40/0xx14 [39.291144] show_stack 4c [39.291252] 来自 __warn+0x94/0xc0 [ 39.291357] __ 的 dump_stack_lvl 来自 warn_slowpath_fmt+0x130/0x1bc [39.291443] warn_slowpath_fmt 来自 phy_state_machine+0xstate_machine +0x140/0x290x290 8 [39.291634] process_one_w orkfrom worker_ thread+0x27c/0x4ac [39.291712] worker_thread 来自 kthread+0x110/0x12c [39.291819] kthread 来自 ret_from_fork+0x14/0x28 [39.291915] 异常堆栈 (0xa0d05fb0 到 0xa0d05ff8) [39.291966] 5fa0:00000 0000 00000000 00000000 00000000 [39.292021] 5fc0:00000000 00000000 00000000 00000000 00000000 00000000 [39.292069] 5fe0:00000000 00000000 00000000 [39.292099]---[结束跟踪 00000000000000]---注意:imx6ul.dtsi 未作任何更改并用作比如来自 evk。 对此有任何见解将不胜感激。 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 我在配备 i.MX6 双处理器的 Digi CC6[N] SBC 上从 Thud / DEY-2.6 / 4.9.212 迁移到 Scarthgap / DEY-5.0 / 6.6.52 时遇到了完全相同的问题。 我已验证了所有其他嵌入式系统功能(GPIO、USB、串行等),但 FEC 以太网没有出现。和你一样,我怀疑其中的设备树和/或时钟树出了点问题。这个帖子似乎还表明,可能还有一个与 RGMII(?)时钟有关的驱动程序问题。但是,我已经测试了 “fec_probe” 和 “fec_enet_init”,两者都没有被调用,所以主要的假设是设备树,因为看来至少会在匹配的 DTB 条目上调用 “fec_probe”。 我进行的一项实验是将 Thud / DEY-2.6 / 4.9.212 的 DTB 与 Scarthgap / DEY-5.0 / 6.6.52 内核结合使用,但这项实验毫无结果。结果系统只运行到 "启动内核...... "就挂起了。 我的下一个实验是运行find /sys/kernel/debug/clk/ -type f -print -exec cat {}\;` 在 4.9.212 和 6.6.52 系统上比较时钟树。 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 @Manuel_Salas 我使用了调整后的 IMX6ULL 和 IMX6UL dtsi 文件,以便与之前的 dtsi 基本文件保持一致。两台设备的以太网连接都无法正常工作。反转 fdt 文件后,我们的以太网节点基本相同,但功能没有改变。设备确实会接收 fec,但是它无法获取 IP 地址。此外,当使用ethtool时,两个设备看起来相同。 以下是两个以太网节点(我删除了两个片段中的 mac 地址) 工作以太网(6.1.15内核) : 以太网@20b4000{ 本地计算机地址 = []; 兼容 = "fsl、imx6ul-fec", "fsl,imx6q-fec"; 注册 =<0x20b4000 0x4000>; 中断名 = "中断名", "pps"; 中断 =<0x00 0x78 0x04 0x00 0x79 0x04>; 时钟 =<0x01 0x90 0x01 0x91 0x01 0x30 0x01 0x2e 0x01 0x2e>; 时钟名 = "ipg", "ahb", "ptp", "ENET_CLK_REF", "enet_输出"; fsl,num-tx-queues =<0x01>; fsl,num-rx-queues =<0x01>; fsl,停止模式 =<0x0b 0x10 0x04>; fsl、magic-packet; fsl,唤醒 IRQ =<0x00>; 状态 = "好的"; pinctrl-names = "默认"; pinctrl-0 =<0x0d>; 网络模式 = "rmii"; phy-handle =<0x0e>; phy-reset-gpios =; phy-reset-duration =; mdio{ #address-cells =<0x01>; #size-cells =<0x00>; 以太网-phy@1{ 兼容 = "ethernet-phy-ieee802.3-c22"; 注册 =<0x00>; phandle =<0x0e>; }; }; }; 以太网无法在 yocto 内核 6.6.52 上运行(使用了之前内核中的 dtsi 定义,该内核可在 6.1.15 上运行): 以太网@20b4000{ 本地计算机地址 = [2A A8 1C A9 84 C7] ; [2A A8 1C A9 84 C7] ; [2A A8 1C A9 84 C7]; 兼容 = "fsl、imx6ul-fec", "fsl,imx6q-fec"; 注册 =<0x20b4000 0x4000>; 中断名 = "中断名", "pps"; 中断 =<0x00 0x78 0x04 0x00 0x79 0x04>; 时钟 =<0x01 0x90 0x01 0x91 0x01 0x30 0x01 0x2e 0x01 0x2e>; 时钟名 = "ipg", "ahb", "ptp", "ENET_CLK_REF", "enet_输出"; fsl,num-tx-queues =<0x01>; fsl,num-rx-queues =<0x01>; fsl,停止模式 =<0x0c 0x10 0x04>; fsl、magic-packet; fsl,唤醒 IRQ =<0x00>; 状态 = "好的"; pinctrl-names = "默认"; pinctrl-0 =<0x0d>; 网络模式 = "rmii"; phy-handle =<0x0e>; phy-reset-gpios =; phy-reset-duration =; mdio{ #address-cells =<0x01>; #size-cells =<0x00>; 以太网-phy@1{ 兼容 = "ethernet-phy-ieee802.3-c22"; 注册 =<0x00>; phandle =<0x0e>; }; }; }; Re: iMX6ULL Ethernet on Scarthgap 6.6.52 @Manuel_Salas 我很抱歉,这是从 6.1.55 迁移过来的。(mickledore) to 6.6.52 (scarthgap) 好的,我明白了,那么更新后的 fec 配置应该是这样的: &fec1 { pinctrl-names ="default"; pinctrl-0 =<& pinctrl_enet1>; phy-mode ="rmii"; phy-handle =<& ethphy2>; status ="okay" ; mdio { #address-cells =<1>; #size-cells =<0> ; ethphy2: ethernet-phy@2 { clocks =<& clks IMX6UL_CLK_ENET2_REF_125M>; clock-names ="rmii-ref"; reg =<1>; }; }; }; 我曾尝试在 dtsi 文件中使用较早的 imx6ul 和 6ull 配置文件,但也没有成功。 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 你好@Rashaad 希望你一切都好。 我对你正在使用或不使用的版本有点困惑,但我能看出主要区别在于使用了设备树 5.15.y: <&clks IMX6UL_CLK_ENET2_REF_125M>; 在较新的版本中,如您在设备树 6.6. y 上看到的那样使用: <&clks IMX6UL_CLK_ENET2_REF_SEL>; 你可以尝试将旧配置添加到新的设备树版本中。 顺祝商祺! 萨拉斯 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 此外,版本为 6.5.15 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 我很抱歉,针脚配置是正确的: pinctrl_enet2: enet2grp{ fsl,pins =< MX6UL_PAD_GPIO1_IO07__ENET2_MDC 0x1b0b0 MX6UL_PAD_GPIO1_IO06__ENET2_MDIO 0x1b0b0 MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN 0x1b0b0 MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER 0x1b0b0 MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00 0x1b0b0 MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01 0x1b0b0 MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN 0x1b0b0 MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00 0x1b0b0 MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01 0x1b0b0 MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b031 >; };   &fec2{ pinctrl-names = "默认"; pinctrl-0 =<&pinctrl_enet2>; 网络模式 = "rmii"; phy-handle =<&ethphy1>; //phy-reset-gpios = < & gpio5 8 GPIO_ACTIVE_LOW >; //phy-reset-duration = <200>; 状态 = "好的"; mdio{ #address-cells =<1>; #size-cells =<0>; ethphy1: 以太网-phy@1{ 兼容 = "ethernet-phy-ieee802.3-c22"; 时钟 =<&clks imx6ul_clk_enet2_ref>; 时钟名 = "rmii-ref"; reg =<0>; }; }; }; Re: iMX6ULL Ethernet on Scarthgap 6.6.52 您好, 我也遇到了同样的问题。你找到解决办法了吗? 此致敬礼, Re: iMX6ULL Ethernet on Scarthgap 6.6.52 您好, 我也遇到了同样的问题。你找到解决办法了吗? 此致敬礼 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 Hi tojo, 我们也遇到了同样的问题,但设法解决了。恩智浦建议我们首先检查时钟正弦波(没问题),还要验证i.MX6UL参考手册中的IOMUXC_GPR_GPR1寄存器,以确保其设置符合预期值。 在我们的案例中,问题与时钟无关,但排除它很有帮助。真正的问题是,在最新的电路板支持包中,PHY的RESET时间变得更加严格。我建议在板上启动后手动 PHY RESET 然后看看。 请注意,我们的板是使用基于 GPIO 的 PHY RESET 的自定义板,而 EVK 使用基于 SPI 控制器的 PHY RESET。 Re: iMX6ULL Ethernet on Scarthgap 6.6.52 嗨,Shanga,感谢您的回复。我会调查的。
查看全文
S32K3 FPU INF 和 NaN 异常 你好、 我正在尝试为 S32K314 芯片上的 FPU 设置例外情况,但我无法弄清楚如何捕捉某些情况。 1) 我试图捕捉溢出和导致 INF 的操作。但是,当 INF 是输入之一时,它会将输出设置为 INF,但不会设置任何标志。如何使用异常捕获以 INF 为输入之一的操作? 2) 我正试图使用异常捕获所有 NaNs(静噪和信号)。显然,我可以捕捉 SNaN,但如何使用异常捕捉 QNaN 呢?或者,我怎样才能让所有 NaNs 都是 SNaNs,或者让我捕捉到所有 NaNs。 谢谢、 约翰 Re: S32K3 FPU Exceptions for INF and NaN 1) INF 作为输入不会引起 IOC 或溢出,因为根据 IEEE-754 标准,它被认为是有效的。 对 INF 的操作可能无效: INF - INF → 无效,结果 = NaN(IOC 集)。 INF × 0 → 无效,结果 = NaN(IOC 设置)。 2)QNaN 不会引发异常;它们会静默传播。只有 SNaN 会引发无效操作条件。
查看全文
LWIP - S32G 中的 TCP/IP 协议栈 你好, 我目前想在 S32G-VNP-RDB2 板 SJA1110 交换机中配置 IPv6 这个 TCP/IP 堆栈包含 在 TCP/IP 堆栈中目前我使用的是 2.1.2版本 Netiface -- ENABLE IPv6 IP 网络 -- 为 IPv6 添加了基本配置 我正在尝试创建一个链接本地地址,我应该能够在任何需要的地方使用这个 IPv6 地址。下面是需要与此代码连接的代码,这样我就可以从交换机 1 的任何端口 ping IP 地址。 ip6_addr_t ipaddr_v6; s8_t chosen_idx; IP6_ADDR(&ipaddr_v6, PP_HTONL(0xFE800000), PP_HTONL(0x0), PP_HTONL(0x3DD79303), PP_HTONL(0x126c0df0)); netif_add_ip6_address(&netif, &ipaddr_v6, &chosen_idx); netif.ip6_addr_state[chosen_idx] = IP6_ADDR_VALID; 那么需要在哪里进行集成 在 TCP/IP 协议栈中还需要做哪些更改 阿特金森 敬上 Re: LWIP - TCP/IP stack in S32G 您好@chenyin_h 事实上,您所附的 TCP/IP 协议栈图像显示的是 2.0.0,但目前我使用的是 1.4.0。 显示为"S32G TCPIP STACK 1.0.4 D2310 示例项目". 因此,我想我需要将 TCP/IP 协议栈 2.0.0 ,请为我导航,我在哪里可以找到您在片段 中共享的 TCP/IP 文件? Atkinson Re: LWIP - TCP/IP stack in S32G 你好,@阿特金森 感谢您的回复。 1.由于软件管理器页面上没有该软件,也许它尚未公开,我建议首先使用 1.0.4 版。版本。 2.1.0.4 是 S32G TCP/IP 协议栈的内部版本,而不是 lwIP 的版本,使用的 lwIP 是 2.1.3、可以满足您的要求 BR 切宁 Re: LWIP - TCP/IP stack in S32G 嗨 @chenyin_h 谢谢你的回复!! 目前我能看到我的 TCP/IP 堆栈版本是 1.4.0 你显示的 TCP/IP 堆栈的图片是 2.0.0 版 汽车软件包管理器 | 恩智浦半导体 我在这里查看了 S32G2 平台的最大容量为 1.4.0 对于 IPv6 它至少需要 2.0.0 或更高版本。那么我在哪里可以找到软件包? 在内置 IPv6 之后你能详细说明一下吗。 在这种情况下,我们如何检查分配给该端口的 MAC 地址,更改 MAC 地址并深入配置? Atkinson Re: LWIP - TCP/IP stack in S32G 你好,@阿特金森 感谢您的回复。 1.好吧,我建议使用基于 GMAC 的 lwIP 演示,PFE 演示已经过时了,而且依赖关系也不好找。 可从以下页面找到 RDB2 的 lwIP 演示(GMAC)。 要获得它,您可能需要将恩智浦账户中恩智浦配置的 S32G TCPIP 堆栈和 FreeRTOS 软件包安装到您的 S32DS 中,安装后,请按: 然后,您就可以找到我提到的演示。 2.默认设置为 IPv4 地址,当前演示可能不直接支持 IPv6。但我认为 IPv6 可能是支持的,因为它只与堆栈本身有关,您可能需要在 lwIP 中启用它,并测试是否存在问题。 BR 切宁 Re: LWIP - TCP/IP stack in S32G 你好@chenyin_h 1.)GMAC 端口有一个 lwIP 演示。PFE 端口也有一个旧的演示。 您能分享这两个实现吗?LWIP 堆栈在这里扮演什么角色? 2.)从描述来看。看来你想使用 SJA1110 端口通过 LwIP 与其他网络设备通信? 实际上,我想介绍包括 IPv6 在内的 lwip 堆栈的基本功能,所以我想在任一 SJA1110/S32G 中测试其可行性。 因此,基本上我想使用 IPv6 来传输 ping 信息或数据。 Atkinson Re: LWIP - TCP/IP stack in S32G 你好,@阿特金森 谢谢您的帖子。 从 S32G 正式软件的角度来看,GMAC 端口有一个 lwIP 演示。PFE 端口也有一个旧的演示版,但不能用于最新版本的软件组合。对于 RDB2 的 SJA1110 端口,没有直接的示例/演示。 从描述来看看来你想使用 SJA1110 端口通过 LwIP 与其他网络设备通信? BR 切宁 Re: LWIP - TCP/IP stack in S32G 你好,@阿特金森 感谢您的回复。 您可以在恩智浦账户中查看是否可用,如果仍然不可用,可能是您的恩智浦账户尚未公开。 如前所述,1.0.4/2.0.0 是" S32GTCPIP STACK" 的版本号,而该协议栈基本上基于 lwIP2.1.3或更新的版本,因此我认为使用 1.0.4您提到的" S32GTCPIP STACK" 版本仍然符合您的要求。 BR 切宁 Re: LWIP - TCP/IP stack in S32G @Atkinson你能否更新一下你是否能在 s32g 上用 lwip 运行 tcpip,以及如何运行的? 🙂
查看全文
MPC555LF8MZP40 こんにちは。(MPC555XX) がリストされているマルチプログラマーを持っています。MPC555LF8MZP40 を読み書きする必要があります。これまでにこれをやったことがある人はいますか? Re: MPC555LF8MZP40 USB-ML-UNIVERSAL-FX は、独自のプログラミング SW を使用してフラッシュできるはずです。 https://www.pemicro.com/products/product_viewDetails.cfm?product_id=15320180&productTab=5051 PeMicro サポートに相談することをお勧めします。 https://www.pemicro.com/support/index.cfm 歴史的には、以下のCodewarriorバージョンでサポートされています。 https://www.nxp.com/design/design-center/software/development-software/codewarrior-development-tools/codewarrior-legacy/codewarrior-development-studio-for-mpc5xx-classic-ide-v8-7:CW-MPC5XX および CodeWarrior USB TAP BDM プローブ。 ただし、この環境では Windows XP 以前のバージョンを使用する必要があります。 Re: MPC555LF8MZP40 このプロセッサの読み取りと書き込みに使用するプログラマを教えてください。 Re: MPC555LF8MZP40 これは明らかにECUプログラミング用のツールです。製造元にお問い合わせすることをお勧めします。 残念ながら、もっと良い方法はないと思います。 Re: MPC555LF8MZP40 Xhorse マルチプログラムプログラマー Re: MPC555LF8MZP40 使用したプログラマーを指定していただけますか?
查看全文
多層スタック上のCLRC663レイアウト 皆さんこんにちは。 私は#CLRC663 を使用して 6 層 PCB を設計しています。アプリケーション ノート AN11019 (rev 1.5) を読むと、第 3.2 章「レイアウト推奨事項」に、CLRC663 評価ボードの下の GND プレーンに関する説明があります。GNDプレーンは基板の中間層にあります SW4301 - CLEV6630B v2.0 PCB では、マッチング回路の下に銅がありません。 前に述べたように、私は多層基板を持っており、マッチングコンポーネント(マッチングコンポーネントレイヤー1 - GNDレイヤー2)の下にGNDプレーンを配置CANかどうかを知りたいです。他のレイヤーの一致するコンポーネントの下にトレースを配置CANか?たとえばレイヤー 3 かレイヤー 6 でしょうか? それとも、スタックのすべての層で、対応するコンポーネントの下の銅をすべて削除する必要がありますか? コメントありがとうございます。 デビッド 接触型スマートカードリーダーIC Re: CLRC663 layout on a multilayer stack こんにちは、トーマス。 まず初めにご返信ありがとうございます。 マッチング回路の下に EMI 制御用の GND プレーンを配置する場合、残りの層の銅領域を削除する必要がありますか? 私のCASEでは 6 層スタックを使用していますが、マッチングが最初の層にあり、GND が 2 番目の層にある場合、他の 4 つの層の銅は削除しないほうがよいと思います。デモボードはそのように作られておらず、その理由は理解できません。 最善の手順について何かアイデアはありますか? 皆様に感謝 デビッド Re: CLRC663 layout on a multilayer stack こんにちは@dramos 通常、以下に示すように、最初の GND レイヤーをマッチング状態に維持します。これは主に EMI の理由によるものです。 BR トーマス
查看全文
揭开Linux中PCIe和CPU地址空间转换的神秘面纱 lspci output on iMX95EVK as PCIe RCiMX95EVK作为PCIe RC时的lspci输出 请仔细观察上述片段。它取自iMX95的控制台,在对特定PCIe设备[iMX8MM即PCIe EP]执行“lspci”后,此设备已枚举为BDF[总线设备功能]01:00.0。 本博客试图揭开围绕lspci输出内存地址信息的神秘面纱。 我们将探讨这一地址的定义、用途及其在PCIe领域的重要性。本博客将重点讨论以下议题:- 1. Linux设备树中的PCIe对应关系 2. 什么是CPU和PCIe地址空间,以及地址空间转换的必要性? 3. 在Linux中为PCIe设备分配资源 4. 如何在Linux PCI子系统中进行地址空间转换?   Linux设备树中的PCIe对应关系 在Linux设备树中,PCIe对应关系可定义PCIe根复合体和端点在系统中的位置。设备树中的PCIe父节点代表PCIe控制器(根复合体/主机桥)。 参考imx95设备树源中的PCIe节点:- pcie@4c300000 {                         compatible = "fsl,imx95-pcie"; reg = <0x00 0x4c300000 0x00 0x10000 0x00 0x4c360000 0x00 0x20000 0x00 0x60100000 0x00 0xfe00000>;                         reg-names = "dbi\0atu\0config";                         #address-cells = <0x03>   …  } pcie@4c300000代表Designware PCIe控制器根复合体,它将作为与其连接的设备/桥的父节点。 -- “compatible”属性则用于标识特定的PCIe控制器。其对应的驱动程序位于drivers/pci/controller/dwc/pci-imx6.c -- “reg”属性可指定PCIe控制器的内存映射寄存器。 PCIe RC下的子节点代表PCIe总线上的设备。它们可以是固定功能设备,例如Wi-fi、以太网、NVMe,也可以是PCIe桥,后者可进一步连接设备。 参考“arch/arm64/boot/dts/freescale/imx95.dtsi” pcie_4ca00000: pcie@4ca00000 { compatible = "pci-host-ecam-generic"; reg = <0x0 0x4ca00000 0x0 0x100000>;                         /* 必须为3。*/              …              …              enetc_port0: ethernet@0,0 { 兼容 = "fsl,imx95-enetc"; reg = <0x000000 0 0 0 0>; clocks = <&scmi_clk IMX95_CLK_ENET>,                                          <&scmi_clk IMX95_CLK_ENETREF>;                                 clock-names = "ipg_clk", "enet_ref_clk"; nvmem-cells = <&eth_mac0>;                                 nvmem-cell-names = "mac-address"; 状态 = "disabled";                         }; }   ethernet@0,0是位于总线0、设备0、功能0的PCIe设备。它是PCIe RC的子设备,内存映射位置为0x4ca00000 这些子设备/桥既可以借助PCI枚举动态发现,也可以在设备树中静态描述,如上文中设备树片段所示,其中“ethernet@0,0”条目以静态方式向RC声明与其连接的以太网子设备。如上例所示,这些子节点嵌套在设备树的PCI父节点中。   什么是CPU和PCIe地址空间,以及地址空间转换的必要性? CPU地址空间是处理器所能查看的系统物理内存映射。 Cortex-A55在iMX95上查看的CPU物理地址空间示例:   起始地址      结束地址    模块 0x48000000       0x4812FFFF    GIC编程寄存器 0x4AA00000      0x4AAFFFFF    Neutron SRAM 0x4AC10000      0x4AC1FFFF    摄像头域块控制 0x4E080000       0x4E08FFFF    DDR控制器 此地址空间是由系统固件/操作系统管理的全局系统视图。这些地址均由硬件设计固定。 另一方面,PCIe地址空间是PCI总线的本地空间,由PCIe子系统管理。该空间中的地址采用动态分配模式。 PCIe地址空间的示例如下:- 0x00000000   -    0x0FFFFFFF 0x10000000-0x1FFFFFFF 0x20000000   -    0x2FFFFFFF 由上文说明可知,CPU和PCIe地址空间运行在各自独立的地址域中。因此,除非部署转换机制,否则CPU无法访问PCIe设备的地址空间。我们将在后续章节中讨论这一内容,但请花几分钟时间来思考以下问题: 问:为什么CPU和PCIe需要独立的地址空间? 答:主要考量因素之一是模块化。我们采用独立的空间设计,确保PCIe设备独立于CPU架构进行设计。同一张卡可以在不同的系统中运行。CPU可以根据需要随时重新映射PCIe空间,从而始终保持灵活性。 此外,不同的地址空间会阻止设备访问任意系统内存。 根据本节的讨论内容,PCIe地址空间显然与CPU地址空间存在本质差异,而事实上——这种差异恰恰赋予其独特优势。因此,我们需要一个能在地址空间之间实现双向转换的实体。 接下来,我们将介绍“iATU”,即内部地址转换单元。在iMX SoC中,这些硬件单元负责执行地址转换。它们是Synopsys DesignWare PCIe控制器的组成部分,可为入站和出站事务提供可编程的地址转换窗口。 对于不熟悉PCIe入站和出站事务的读者,请花些时间阅读这篇技术博客 - 通过用例了解PCIe出站/入站窗口 - 恩智浦网络社区 注意:地址转换仅确保CPU可访问PCIe设备的内存,反之亦然。 到目前为止,读者应对PCIe地址转换形成基本认知。在深入研究Linux PCI子系统中的转换操作之前,让我们先讨论一下如何为PCIe设备分配资源。   在Linux中为PCIe设备分配资源 PCIe设备并未配置直接的CPU指令接口,因此其通过内存映射区域进行通信。设备需要内存来执行DMA操作或MSI/MSIX中断。不同的设备有不同的需求,因此PCIe中的资源可以是映射设备寄存器的MMIO,也可以是DMA传输所需的内存区域。 在Linux中,PCI子系统的pci_assign_resource函数负责在系统初始化期间为PCIe设备分配IO和内存资源,此操作将在枚举PCIe设备后执行。PCI总线上的所有设备均可调用此函数,并根据PCI设备的资源需求进行分配。 但是,Linux中的PCI子系统如何确定PCIe设备需要什么资源? - 每台PCIe设备都设有由PCIe规范定义的配置空间。这包括   BAR[基地址寄存器] - 用于指示设备所需资源的类型[IO/Mem]和规模。 功能 - 用于广播设备功能,例如MSI中断、ASPM低功耗状态等。 通过从PCIe设备读取BAR,我们可以了解设备所需资源的类型和规模。 // 从PCIe设备的BAR中确定资源规模:- 步骤-1:将所有1写入目标BAR寄存器。 步骤-2:读回该值并清除低4位(对于内存BAR)或2位(对于I/O BAR),因为这些状态位并不参与大小的计算 步骤-3:对该值执行按位取反后加1。 步骤-4:返回值表示大小。 举例说明:- 假设在读回上述步骤-2中的值后,BAR返回0xFFFFF000。低4位已清零。 步骤-3:对该值执行按位取反 -> ~(0xFFFFF000) = 0x00000FFF 加1:0x00000FFF + 1 = 0x00001000 得到的值0x1000 = 4096字节表示大小,即BAR需要4KB的内存区域。 // 从PCIe设备的BAR中确定资源类型:-   PCI 配置空间中的基地址寄存器(BAR): 位 0 → 资源类型: 1 = I/O 空间 0 = 内存空间 对于内存BAR: 00 = 32位 10 = 64 位 位1–2 → 寻址类型: 位 3 → 可预取标志 解释值0xFFFFF000,我们得到:   位 0 = 0 → 内存空间 位 1–2 = 00 → 32位地址 位 3 = 0 → 可预取 高位 → 基址(屏蔽后)   pci_read_bases [drivers/pci/probe.c]在Linux PCI子系统中负责确定设备枚举期间的BAR内存大小和类型需求。 毋庸置疑,上述向端点的BAR写入数据并确定资源类型与规模的操作流程,均在PCIe RC上执行。我们的设置如下:- iMX95<------> iMX8MM[RC]                     [EP] 在PCIe RC确定所需的BAR大小后,pci_assign_resource函数会分配一个内存范围,然后设置从该内存范围向PCIe地址空间的转换。 我们以一个lspci日志片段为切入点来撰写这篇博客文章,具体片段如下:- 综上所述,请注意RC驱动程序已分配以下资源: 0x910100000 - 0x910110000作为不可预取的内存地址范围,大小=64KB 上述内存地址范围位于iMX95 SoC上映射的PCIe 1出站空间内存中:-   范围0x910100000 - 0x910110000将映射到端点的PCIe地址空间。这实际上意味着,如果CPU生成此范围内的任何地址[包括起始和结束地址],PCIe控制器则会在RC上向总线中的端点发送PCIe TLP。它可能是对端点内存的读取/写入操作。写入/读取地址将根据地址空间转换来决定。 我们将在下一节详细探讨如何在Linux内核中实现这一转换。   在 Linux PCI 子系统中如何进行地址空间转换?   我们先从部分关键问题入手:- 如何指定0x910100000-0x910110000的范围?内核如何确认其必须映射PCIe 1出站空间,而非PCIe2出站空间或其他地址空间? -- 正如Linux 中的所有优秀设计,这同样始于“设备树二进制”。Uboot会将dtb传递给内核,以便其获取我们的板硬件描述。由于我们使用Torradex的Verdin iMX95 EVK板作为根复合体,因此我们使用的dtb为 imx95-19x19-verdin-adv7535.dtb 我会附上可用的dtb,供读者按需使用。 该dtb包括 -arch/arm64/boot/dts/freescale/imx95.dtsi 让我们重点关注特定的pcie节点:-   “ranges”属性正是本节先前所提问题的答案。  - 此属性可定义父地址空间和子PCI地址空间之间的地址转换规则。   注意:此博客仅关注“ranges”属性,因为它与我们的讨论内容相关。因此,如果读者想了解PCIe节点的其他设备树属性,建议查阅其他资料。  让我们解码“ranges”属性: 具体格式如下:-      3个单元               2个单元             2个单元             因此,一个条目将配置7个单元。我们的dtsi设有2个条目。第一个条目用于IO空间转换,第二个条目则用于内存空间转换。请参考第二个条目:-   0x82000000 0x0 0x10000000 0x9 0x10000000 0 0x10000000 |------PCI地址---------------| |-CPU地址-| |---PCI大小---|   根据上文,我们获得以下信息:- 内存空间可预取 <   0x82000000 0x00 0x10000000 // PCIe 地址:0x10000000   0x09 0x10000000              // CPU/系统地址:0x910000000 0x00 0x10000000 // 大小:256MB >; 0x82000000 = 1000 0010 0000 0000 0000 0000 0000 0000   位 31-30 (10) → 配置空间类型:这表示内存空间。 位29(0) → 不可重定位 位 28 (1) → 可预取 = 否(0 表示不可预取) 位 27–24 (0010) → 地址空间类型 = 内存 因此,0x82000000表示: PCI 内存空间 不可预取 32 位地址空间 注意:- 对于想了解lspci输出为何显示[size=64K]而dts256 MB的人,这是因为256MB是PCIe设备可用的最大地址空间。端点设备根据自身所需地址空间的大小,向系统申请分配。 同样,IO空间转换也是根据“ranges”中的第一个条目创建的:- < 0x81000000 0x00 0x00 → PCI I/O 地址:0x00000000 0x00 0x6ff00000 → CPU/系统地址:0x6ff00000 0x00 0x100000 → 大小:1MB >;   我们在iMX95 Verdin EVK Linux控制台的dmesg输出中也观察到类似情况:-   因此,内存空间映射已从 CPU地址0x910000000 - 0x091fffffff转换为PCIe地址0x10000000 - 0x1fffffff 我们有必要说明使用“ranges”属性的驱动程序。“ranges”属性在“pci_parse_request_of_pci_ranges -> devm_of_pci_get_host_bridge_resources”中进行解析,具体路径是“drivers/pci/of.c” 每个范围中的devm_of_pci_get_host_bridge_resources会自动管理这些资源的内存分配。它能确保在设备断开连接或驱动程序移除时释放这些资源。 我们已确定CPU和PCI地址范围的定义和原因。但是在lspci中,您观察到的是0x910100000,而非0x910000000,后者才是根据dtb指定的起始范围。这是为什么呢? 要回答这个问题,我们需要回溯PCIe设备枚举过程。 如上文所述,在PCIe枚举过程中,Linux PCI驱动程序会确定BAR资源,随后PCI核心驱动程序可能会遵循对齐要求分配地址。正因如此,系统会为EP的BAR0分配PCI总线地址0x10100000,且与0x10000000存在1MB[0x100000]的偏移量。 同时,您还需关注设备树PCI转换窗口:- 0x10100000转换为0x910100000 这一转换并非自动完成。设备树二进制仅指定转换窗口的具体信息,例如目标CPU地址空间和源PCI 地址空间之间的转换关系。实际转换是由iATU完成的。 此操作可在drivers/pci/controller/dwc/pcie-designware-host.c的dw_pcie_iatu_setup函数中完成,具体方式是使用dw_pcie_prog_outbound_atu函数创建出站窗口。 RC上的转换已成功配置,但部分环节仍需完善。 .. .. 入站窗口!! 如果端点(如iMX8MM)上并未配置入站窗口,对0x910100000的读取/写入操作将毫无意义。我们在iMX8MM上使用的是PCI端点测试驱动程序,该驱动程序是Linux社区中的热门选择。如果读者需要了解更多信息,建议访问此页面:- 9. PCI端点框架 — Linux内核文档 pci_epc_map_addr函数(位于drivers/pci/endpoint/pci-epc-core.c中)通过将PCI地址[0x10100000]映射到EP内存中的物理地址来创建入站窗口。读取和写入操作就是通过这种方式进行的。 如果未配置入站窗口,进行读取操作时将出现以下情况:-   现在,一切准备就绪。转换窗口已在PCI驱动程序中配置,且处于Linux控制台环境中。当CPU发起内存读取请求时,将按以下顺序执行:-   对于内存写入操作:- 端点上会出现以下情况:- 最妙的是,整个转换过程由硬件以透明的方式完成 - 您的驱动程序只需读取/写入CPU地址,PCI主机控制器就会自动处理所有转换! —— 我们如何测试地址映射?   要测试读取和写入操作,我们可以针对驱动程序本身作出一些改动,或者使用devmem5用户空间二进制。我们将对iMX8MM进行驱动程序方面的细微修改,并在RC上使用devmem5。 iMX8MM是PCIe端点,我们使用端点测试驱动程序对其进行相应配置。如果您需要实现相同配置,请参照此博客的指引操作 - 在iMX95 torradex板和iMX8MM EVK上启用PCIe端点框架 - 恩智浦网络社区 相反,如果您想将iMX95设为RC并将iMX8MM设为端点,请随时关注此博客 - 如何将iMX95EVK配置为PCIe端点并使用PCIe端点测试框架进行测试 - 恩智浦网络社区 接下来,我们需要完成两个任务:- 1. 在iMX8MM EP中,我们将写入部分随机值 在drivers/pci/endpoint/pci-epf-core.c中,对pci_epf_alloc_space函数进行以下修改:-     “space”是虚拟地址,“phys_addr”是连续的物理地址。 请注意,这是测试转换的初步方式,还有更合适的方案。 在修改后编译内核并用其启动开发板。使用PCI端点测试框架将iMX8MM设为端点。 2. 在iMX95 Verdin EVK [PCIe RC]上,我们将使用devmem5读取地址0x910100000,以验证能否在RC上观测到相同的数据。   以上就是本期的全部内容。此博客篇幅较长,如果您对其中的细节感到困惑,请随时通过私信或评论留言,我将尽力为您解答。 下次再见! Gaurav Sharma IMX95EVK
查看全文
S32 Design Studio v3.5 安装回滚问题 我正在尝试在公司设备(Windows 11)上安装 S32 Design Studio v3.5,一旦安装量达到 6%,它就会回滚并且安装失败。我遵循了以下社区帖子中提供的一些建议 S32 设计回滚安装错误 - NXP 社区 如"以管理员身份运行" 并启用完全控制"C:\Users\name\AppData\Local\Temp" 我附上日志供您参考,请帮助解决这个问题。 激活 | 安装 | 许可 | 安装程序下载 Re: S32 Design Studio v3.5 installation rollback issue "以管理员身份运行" 这个 exe 文件,似乎就能解决问题。如果没有帮助,我建议您咨询 IT 部门。
查看全文