Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
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)。 chenyin_h_0-1764647702721.png 要获得它,您可能需要将恩智浦账户中恩智浦配置的 S32G TCPIP 堆栈和 FreeRTOS 软件包安装到您的 S32DS 中,安装后,请按: chenyin_h_1-1764648223298.png 然后,您就可以找到我提到的演示。 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,以及如何运行的? 🙂
記事全体を表示
EB 客户许可证管理员 我使用的是 Tresos Studio 29.2。此前,在使用 MPC574xB 时,注册是成功的,一切运行正常。但是,既然我们已经切换到 S32K314 平台并尝试使用相应的激活码将其激活,则出现了以下错误: 错误:flxactappActivationSend (50040,41147,10248) 该激活请求不产量获得许可证的权利。 与 FlexNet Operations Server 的连接失败。 请问问题出在哪里,EB 真的只支持一个平台吗? 电源 Re: EB ClientLicenseAdministrator 你好、 请检查您的账户,获取新的激活代码。此外,还存在可用许可证数量的问题。我已经联系了许可证管理部门来解决这个问题。 Re: EB ClientLicenseAdministrator 我通过下面的网站重新获取了最新的激活代码,但发现还是以前的激活代码,无法成功激活。接下来我该怎么办? 设计 :产品下载 :文件
記事全体を表示
MCSPTR2AK396 套件 你好,我知道这个套件包括逻辑板和驱动板。我这里有一个控制器,想用它来控制驱动板。我的问题是:该套件中的驱动板接口是否支持使用杜邦电线连接到我自己的控制器?我的控制器与杜邦电线兼容。 Re: MCSPTR2AK396 kit 感谢您关注我们的产品并为我们的社区做出贡献。 在 MCSPTR2AK396 页面,您可以获取设计文件(包括 BOM),查看您提到的特定连接器。 另一方面,要将其他控制器板连接到反向器板,我们建议使用 S32SDEV-CON18,有关更多详细信息,请参阅以下文章的图 2.3.1 硬件设置: https://community.nxp.com/t5/NXP-Model-Based-Design-Tools/PMSM-Motor-Control-Application-for-S32K396-with-MBDT-and-Custom/ta-p/1830976 希望这些信息对您有所帮助
記事全体を表示
S32K144 CAN通讯异常 各位大佬:   我发现个异常的现象,我基于S32K144的CAN通讯DEMO整改了一下,在DEMO板可以正常外发报文通讯,我的CAN模块的时钟使用的内部48M的,移植到自制板子通讯也正常,但是我们我把时钟源切换到外部晶振,一旦倍频数值大于28,CAN通讯外发报文功能就消失了,不是特别理解原因,有什么需要特别注意的地方么? 微信图片_20251201090421_282_72.png   回复: S32K144 CAN通讯异常 我的IDE是S32 for platform 3.5,SDK是4.0.1,我同事的是S32 for ARM 2.2,SDK是4.0.1,SDK是3.0.0,他修改clockout也没有用 你如果倍频输配置到28可以么?工程传不上来,一直加载 回复: S32K144 CAN通讯异常 仅供参考 回复: S32K144 CAN通讯异常 Hi@NanMo 我没看懂,你能详细的解释下嘛 回复: S32K144 CAN通讯异常 更新状态,发现通过S32K144配置时钟树选择配置一下clockout这一路的配置后状态就正常了,大家小心工具,痛并快乐着...... 微信图片_20251201163703_285_72.png   Re: S32K144 CAN通讯异常 Hi@NanMo 我复现了该问题,我也没在数据手册中看到有这样的限制要求,所以我创建了一个内部帖子等待设计团队的人给我一个回复,请你耐心等待。 回复: S32K144 CAN通讯异常 原理未知,可靠性未知,望答复 回复: S32K144 CAN通讯异常 红色框图部分原来我没有修改,默认状态下去生成代码后CAN功能在我使用不同时钟源的状态下功能不一致,后面把这两个选择点开配置成spll sclock,编译烧录发现通讯正常了,再把这里的配置依照印象改回去(不一定和原来一模一样奥),编译烧录发现通讯一直正常,我想知道为啥,折磨了我两天半了 回复: S32K144 CAN通讯异常 Hi@NanMo1 你可以分享这些第三方代码给我,我可以看看。 这个问题我已经在和内部的设计团队进行确认了,这个需要点时间。如果你的项目有需求,你现在FLEXCAN完全可以使用外部的晶振时钟,这个应该是没有问题的。 回复: S32K144 CAN通讯异常 这个账号是我使用公司邮箱注册的账号,这个问题还在困扰着我,但是我发现有部分第三方代码可以实相同配置下的CAN通讯,这个具体原因是什么? 回复: S32K144 CAN通讯异常 Hi@NanMo 我测试将PLL倍频设置为40是工作不OK的,我已经提交了case至设计团队来询问时钟的限制,因为我在数据手册中没看到有这样的限制要求。 其次你说了改了CLKOUT又可以,但是我改了也没用,你要是有成功的例程,你可以发送给我测试一下。 回复: S32K144 CAN通讯异常 Hi@NanMo 如果PLL倍频设置为40,PE时钟选择为外设时钟,我的CAN通信也异常。 回复: S32K144 CAN通讯异常 仅供参考 回复: S32K144 CAN通讯异常 Hi@NanMo1 你提供的工程所使用的时钟是外部晶振时钟,这个有什么问题?这和你的问题不一样吧 Senlent_0-1764751657649.png 回复: S32K144 CAN通讯异常 CAN的PE模块一直都是用的外部时钟,发现如果系统使用外部倍频的时钟有时候CAN不正常,而且在不同板子上现象不一样。 回复: S32K144 CAN通讯异常 我第一次上传的例程就是 回复: S32K144 CAN通讯异常 Hi@NanMo1 上传你的demo 回复: S32K144 CAN通讯异常 我的demo板是100pin的,我的自制板子是64pin的,我在100PIN的基础上直接切换成64PIN会有问题,但是如果切换完后删掉所有的配置重新走配置流程功能就正常了 Re: S32K144 CAN通讯异常 谢谢您的答复。我现在明白了问题的原因。 Re: S32K144 CAN通讯异常 Hi@NanMo 抱歉,让您久等了。 这是 S32 DS IDE 的一个错误。 我发现这是 S32 DS 工具中的一个错误,我录制了一个视频供你参考。 问题在于,我们修改 SPLL 因子后,并没有更新生成的代码,从而导致 FLEXCAN 配置错误。 在"clock_config.c" 中,"SCG_SPLL_CLOCK_MULTIPLY_BY_28" 不会改变,即使我们尝试改变 修改 SPLL 因子。 .spllConfig = { .initialize = true, .monitorMode = SCG_SPLL_MONITOR_DISABLE,/* Monitor disabled */ .locked = false, /* unlocked */ .prediv = (uint8_t)SCG_SPLL_CLOCK_PREDIV_BY_1,/* Divided by 1 */ .mult = (uint8_t)SCG_SPLL_CLOCK_MULTIPLY_BY_28,/* Multiply Factor is 28 */ .src=0U, .div1 = SCG_ASYNC_CLOCK_DIV_BY_2, /* System PLL Clock Divider 1: divided by 2 */ .div2 = SCG_ASYNC_CLOCK_DIV_BY_4, /* System PLL Clock Divider 3: divided by 4 */ }, 1.直接修改底层配置代码。 2.我发现先将运行模式切换到 HSRUN,然后再切换回 RUN,并在此过程中修改 SPLL 因子,这样就能正常生成代码。 Senlent_0-1765788181959.png
記事全体を表示
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 使用したプログラマーを指定していただけますか?
記事全体を表示
AHBによるフラッシュ書き込みアクセス こんにちは。mimxrt1050 コントローラと NOR フラッシュ QSPI でフラッシュ書き込みアクセスがサポートされているかどうかを知りたいです。これは HyperFlash でのみ利用可能であると読みましたが、確認したいと思います。 よろしくお願いします。 ブートROM|ブート|フラッシュ コアとメモリ Re: Flash write access with AHB こんにちは、Sam。現在、IP 操作は動作していますが、NOR フラッシュ QSPI は AHB を使用したフラッシュ書き込みをサポートできますか? Re: Flash write access with AHB @vanessa_dis MIMXRT1050 の FlexSPI コントローラは、QSPI NOR フラッシュの読み取り、書き込み、消去操作を完全にサポートしています。EVK ボードで使用するには、デフォルトの HyperFlash チップからスイッチするためのハードウェアの変更のみが必要です。 https://www.nxp.com/docs/en/application-note/AN12108.pdfQSPIフラッシュからのブートを有効にする方法 Re: Flash write access with AHB こんにちは、 私はAHBアドバンストハイパフォーマンスバスを恐れています Re: Flash write access with AHB @vanessa_dis あなたの言いたいことは分かりました。 はい、i.MX RT1050 および RT1060 シリーズの FlexSPI コントローラは、AHB バスを使用した外部 QSPI NOR フラッシュへの書き込みアクセスを完全にサポートしています。この機能は HyperFlash に限定されません。 FlexSPIコントローラは、シリアルNORフラッシュ(QSPIをカバー)、HyperFlash、HyperRAMなど、さまざまな外部メモリタイプをサポートする柔軟なアーキテクチャで設計されています。 。コントローラは、サポートされているこれらのデバイスに対して、AHBバスを介してメモリマップされた読み取りおよび書き込みアクセスを提供します。 。 https://www.nxp.com/docs/en/nxp/application-notes/AN12239.pdf Sam_Gao_0-1764056082334.png Re: Flash write access with AHB HAB(ハイアシュアランスブーツ)の詳細をお問い合わせいただきましたか? https://spsdk.readthedocs.io/en/stable/images/hab.html 安全なアクセスで以下の AN を参照してください (申し訳ありませんが、直接送信することはできません。アクセスを申請するか、地元の営業/FAE にお問い合わせください)。 AN12681 i.MX RT10xxでHABセキュアブートを使用する方法 [AN979510] Sam_Gao_0-1763971556120.png
記事全体を表示
访问 nxp.com 您好。 如果不使用VPN,就无法访问nxp.com功能域的所有站点。 我收到了错误信息: Access Denied You don't have permission to access "http://mcuxpresso.nxp.com/en/dashboard" on this server. Reference #18.977a7b5c.1754475329.7d13ec17 https://errors.edgesuite.net/18.977a7b5c.1754475329.7d13ec17 也许这些都是按 IP 地址设置停止列表的错误。 恩智浦公司有谁能解决这个问题? Re: Access to nxp.com   同样的问题 您没有权限访问该服务器上的"http://www.nxp.com/" 。 参考 #18.633c655f.1754500173.c79a737 https://errors.edgesuite.net/18.633c655f.1754500173.c79a737
記事全体を表示
揭开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日志片段为切入点来撰写这篇博客文章,具体片段如下:- 2.png 综上所述,请注意RC驱动程序已分配以下资源: 0x910100000 - 0x910110000作为不可预取的内存地址范围,大小=64KB 上述内存地址范围位于iMX95 SoC上映射的PCIe 1出站空间内存中:-   3.png 范围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节点:-   4.png “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输出中也观察到类似情况:-   5.png 因此,内存空间映射已从 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内存中的物理地址来创建入站窗口。读取和写入操作就是通过这种方式进行的。 如果未配置入站窗口,进行读取操作时将出现以下情况:-   6.png 现在,一切准备就绪。转换窗口已在PCI驱动程序中配置,且处于Linux控制台环境中。当CPU发起内存读取请求时,将按以下顺序执行:-   7.png 对于内存写入操作:- 8.png 端点上会出现以下情况:- 9.png 最妙的是,整个转换过程由硬件以透明的方式完成 - 您的驱动程序只需读取/写入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函数进行以下修改:-     10.png “space”是虚拟地址,“phys_addr”是连续的物理地址。 请注意,这是测试转换的初步方式,还有更合适的方案。 在修改后编译内核并用其启动开发板。使用PCI端点测试框架将iMX8MM设为端点。 2. 在iMX95 Verdin EVK [PCIe RC]上,我们将使用devmem5读取地址0x910100000,以验证能否在RC上观测到相同的数据。   11.png 以上就是本期的全部内容。此博客篇幅较长,如果您对其中的细节感到困惑,请随时通过私信或评论留言,我将尽力为您解答。 下次再见! Gaurav Sharma IMX95EVK
記事全体を表示
哪种内存性能高?OCRAM 还是 SDRAM 我通过 16 个引脚的 semc 端口将 sdram( W9825G6KH-5i )连接到 rt1176。 我想知道哪种内存性能较高。 板上的片上 RAM 或 SDRAM。 回复:哪种内存性能高?OCRAM 还是 SDRAM 在内存方面,ITCM 和 DTCM 将是最快的,因为它们以与核心相同的速度运行并且不使用缓存。OCRAM 速度较慢(对于 memcpys 来说慢 3-4 倍,IIRC),因为它必须经过 AXI 总线和缓存。SEMC 可能无法比 OCRAM 更快(因为它使用相同的 AXI 总线和缓存),但确切的速度取决于设置。
記事全体を表示
FRDM-MXCN947ボードでイーサネットとカメラを同時に使用する MCXNx4x では、SmartDMA を使用してカメラ インターフェースを実装できます。 MCXNx4x データシートによると、イーサネット と SmartDMA の Pinmux 割り当てが競合します。このため、イーサネットとカメラを同時に使用することはできないと考えました。 ただし、FRDM-MCXN947 ボード ユーザー マニュアル (UM12018) には次のよう記載されています。 > カメラの使用中にイーサネット機能が必要な場合は、別の回避策があります SJ16 および SJ26 ジャンパーをデフォルトの位置から移動することです。 dubian1shu_0-1717852087944.png イーサネットとカメラを同時に使用する方法はありますか? 開発ボード MCX N Re: Simultaneous use of Ethernet and camera on the FRDM-MXCN947 board こんにちは@dubian1shu 書類の内容を再確認したところ、書類の記載内容に問題があることが確認できました。 HangZhang_0-1718619499526.png 文書には適時変更を加えます。 SmartDMA (EZH_CAMERA) と イーサネット (ENET)は同時に使用できますが、カメラが使用するには共有されていないピンを見つける必要があります。 こちらの記事を参考にCAN。 MCX N947:イーサネットとカメラ機能の同時実装 - NXPコミュニティ これがお役に立てれば幸いです。 BR 下がる Re: Simultaneous use of Ethernet and camera on the FRDM-MXCN947 board 確認して返信してくれてありがとう@Harry_Zhang SmartDMA は P1_X と P3_X をサポートしているので、MCXNx4x は SmartDMA と イーサネット 機能を同時に使用 CAN と理解しています。 しかし、FRDM-MCXN947 を使用して SmartDMA および イーサネット 機能を使用することはできますか? FRDM-MCXN947 の J9 (カメラ ヘッダー) には、イーサネット ピンと競合する 7 つのピンがあります。FRDM-MCXN947 ボードのユーザー マニュアル (UM12018) に記載されている P1_4 の解決策では、そのうちの 1 つだけが解決され、他の 6 つの競合については触れられていません。 たとえば、P1_5、P1_13、および P1_15 は SmartDMA と イーサネット 間で競合します。回路図ドキュメント (SCH-90818) から見る限り、この競合を解決する解決策はないようです。 FRDM-MCXN947でSmartDMA(EZH_CAMERA)とイーサネット(ENET)を同時に使用する方法はありますか? Re: Simultaneous use of Ethernet and camera on the FRDM-MXCN947 board こんにちは@dubian1shu MCXNx4xのデータシートを確認したところ、確かにイーサネットとSmartDMAが競合するピンがいくつかあります。ただし、イーサネットとSmartDMAを同時に使用したい場合は、イーサネットとSmartDMAが競合しないピンを選択できます。 たとえば、SmartDMA ピンとして P3_X を選択し、イーサネット ピンとして P1_X を選択できます。 FRDM-MCXN947 ボード ユーザー マニュアル (UM12018) を参照してジャンパーを移動します。 これがお役に立てれば幸いです。 BR 下がる
記事全体を表示
在 IMX8mm 上编程 SJC_DISABLE、JTAG_SMODE 和 JTAG_HEO 熔丝 你好 在 AN4581 应用笔记第 5.7 节中,建议对 SJC_DISABLE、JTAG_SMODE 和 JTAG_HEO 熔丝进行编程以完全保护设备,但是同时看 IMX8MMRM 和 IMX8MMSRM,我找不到这些熔丝的确切位置(银行、字、位)。在哪里可以找到这些信息? 谢谢! Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 你好,我是@igorpadykov、 如果您能把这些信息也发给我,我将不胜感激。 预先致谢 Dj Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 您好, 您能否将这些信息也发给我? 另外,imx8m nano 和 mini 之间有区别吗? Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 我们也希望得到这些信息。 Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 嗨,@伊戈尔帕季科夫、 我需要有关 imx8m mini 熔丝的信息。能否请您提供给我?出于网络安全原因,我需要禁用 JTAG。 最好的奖励 胡利安 Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM @igorpadykov 你还能把 JTAG_HEO 熔丝的信息发给我吗? 谢谢! Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 您也能与我分享一下吗?为什么这不只是发布在公共应用程序备注、参考手册或网络安全参考手册中?通过隐蔽实现的网络安全不是网络安全。 Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 您能公开这封邮件吗?为什么安全参考手册中没有列出这些信息?对于i.MX8M Nano,这已在网络安全参考手册中列出。但是我不知道 Mini 是否使用同样的熔丝。 此外,AN4581 还列出了值得关注的熔丝 DIR_BT_DIS。但我找不到任何参考。 Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 我们还想在 imx8m-mini 上禁用 JTAG,但我在《参考手册》修订版 2,2019 年 8 月 8 日第 6.2 章 Fusemap 中找不到任何有关它的信息。您能为我指明正确的方向吗? 谢谢! Re: Programming SJC_DISABLE, JTAG_SMODE and JTAG_HEO fuses on iMX8MM 嗨 Rodrigo_travess 附加信息已通过邮件发送。 问候 igor
記事全体を表示
uboot - デバイスツリーバインディングとdm_gpio_lookup_name("x",&desc) imx91 ベースのプロジェクトでは、最初の GPIO を出力として定義することに行き詰まっています。 デバイス ツリーの例が説明されている投稿をいくつか読みましたが、まだ `-22` の戻り値が返されます。 デバイスツリーで定義: gpio_reset: gpio-reset { compatible = "gpio-reset"; pinctrl-names = "default"; reset-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>; status = "okay"; label = "RSTO"; gpio-name = "RSTO"; line-name = "RSTO"; }; ここで、ラベリング、gpio-name、line-name を追加してみました。どれが必要かは分かりません。 そして機能的に static void board_gpio_init(void){ struct gpio_desc desc; int ret; /* De-assert RSTO */ ret = dm_gpio_lookup_name("RSTO", &desc); if (ret) { printf("%s lookup 'RSTO' failed ret = %d\n", __func__, ret); return; } ... } これは常に -22 を返し、最初に検索するピンになります。 そこで、LEDをベースにした実証済みのサンプルコードを試してみようと思いました。 gpio-leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio_led>; led-0 { gpios = <&gpio3 26 GPIO_ACTIVE_HIGH>; default-state = "on"; }; led-1 { gpios = <&gpio3 27 GPIO_ACTIVE_HIGH>; default-state = "on"; }; }; Then ret = dm_gpio_lookup_name("led-1", &desc); also returns -22 Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) OK。実際に利用可能なポートを見つけるには、次のように印刷するだけです。 len = uc_priv->bank_name ? strlen(uc_priv->bank_name) : 0; printf("%s: lookup %s\n", __func__,uc_priv->bank_name); if (!strncasecmp(name, uc_priv->bank_name, len)) { そして、コンソール上で使用可能かつ正しい名前を確認できるようになります。 ファイルの場所は `uboot/ドライバ/gpio/gpio-uclass.c` です Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) こんにちは@DavidFlir gpio-uclass.cの関数を参照することをお勧めします。 danielchen_0-1754466845499.png よろしくお願いします。 ダニエル Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) 返信ありがとうございます! 私は次の例に気づきました: https://github.com/nxp-imx/uboot-imx/blob/9383f8387dc76524524da69992db96c22195a57c/board/freescale/imx91_evk/imx91_evk.c#L305 ret = dm_gpio_lookup_name ( "adp5585-gpio4" 、 & exp_sel_desc ); これは「gpioX_Y」の他に許可されている形式のようです   それは次のように定義されます adp5585: io-expander@34 { compatible = "adi,adp5585-00", "adi,adp5585"; reg = <0x34>; #gpio-cells = <2>; gpio-controller; #pwm-cells = <3>; gpio-reserved-ranges = <5 1>; exp-sel-hog { gpio-hog; gpios = <4 GPIO_ACTIVE_HIGH>; output-low; }; では、構文がどのようになっているかを確認するにはどうすればよいでしょうか?たとえば、「_」または「-」で接続されていますか...? Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) こんにちは、デビッド: dm_gpio_lookup_name() 関数は、デバイス ツリーから gpio 名または行名を解析しません。「gpioX_Y」という形式のみ理解します。 XはGPIOコントローラです Yはピン番号です。 Linuxカーネル(U-BOOTではない)で作業している場合は、 構造体gpio_desc * rst_gpio ; rst_gpio = devm_gpiod_get ( & pdev ->dev , "reset" , GPIOD_OUT_LOW ) ; DTSで定義する リセット- gpios = < & gpio1 8 GPIO_ACTIVE_LOW > ; gpio -名前= "リセット" ; よろしくお願いします。 ダニエル Re: uboot - Device tree binding and dm_gpio_lookup_name("x",&desc) _defconfig設定が見つからないことが分かりました CONFIG_IMX_RGPIO2P=y   この設定で私は成功することができます ret = dm_gpio_lookup_name ( "gpio1_8" 、 & desc ); しかし、.dtsで定義された名前をどのようにCAN使用できるかはまだわかりません。このgpio1_8 の代わりにファイルを使用します。 `
記事全体を表示
SimulinkにFEEを統合する こんにちは、NXP MBDTチームの皆様。 MBDT 1.5 で Simulink の FEE を使用したいのですが、MBDT 1.5 には FEE 関連のライブラリ ブロックがありません。 したがって、MATLAB 関数ブロックから FEE API を呼び出す予定です。 FEE 、 Mem_43_INFLS 、 MemAccを設定した後、デジタル入力読み取りブロックを 1 つだけ含むモデルを構築しようとしました。しかし、次のエラーが発生しました。 「MemIf_Types.h」が見つかりません プロジェクトに手動で新しいフォルダを作成する場合は、MemIf_Types.hを配置します。その中に、モデル設定 → カスタム コード → インクルード ディレクトリでフォルダー パスを追加すると、MemIf_Types.h のエラーが解決されます。 しかし、その後、 RTDまたは生成されたフォルダーに既に存在する他のヘッダー ファイルに対して新しいエラーが表示されます。 誰か助けてくれませんか? ありがとうございます。 Re: integrating FEE in Simulink こんにちは、NXP MBDTチームの皆様。 FEE を統合した後、モデルを構築できるようになりましたが、Fee_GetStatus からのステータス戻り値が MEMIF_UNINIT であるため、コード実行が do .... while ループで停止してしまいます。 する { Fee_MainFunction(); MemAcc_MainFunction(); ステータス = Fee_GetStatus(); } while (ステータス != MEMIF_IDLE); これが私の設定.mexですモデル付きのファイル。助けていただけませんか? Re: integrating FEE in Simulink こんにちは@dragostomaさん、 ご返信ありがとうございます。しかし、MBDT フラッシュ / nvm 書き込みがプログラム S32K3xx をフリーズするため、添付のモデルをビルドできません。 また、このモデルは Mem_43_INFLS API のみを使用しており (フラッシュを処理しています)、実際の手数料アルゴリズムは使用されていません。 Re: integrating FEE in Simulink こんにちは、 @KaleRushikeshさん、 S32K3 向けモデルベース デザイン ツールボックスにご興味をお持ちいただきありがとうございます。 FEE、Mem_43_INFLS、および MemAcc コンポーネントのサポートが S32K3 1.6.0 リリースで導入されました。このバージョンのツールボックスでは、すぐに使用できる Simulink ブロックが提供され、カスタム コードの実装に比べてセットアップ プロセスが簡素化されるため、このバージョンのツールボックスを使用することを強くお勧めします。 ただし、現時点で最新バージョンへの移行が実現できない場合は、FEE コンポーネントを適切に構成するためのガイダンスとして、次のThread ( MBDT flash / nvm write freezes program S32K3xx ) を確認することをお勧めします。 進捗状況をお知らせください。 よろしくお願いいたします。 ドラゴス
記事全体を表示
i.MX8/9 の Apple CarPlay Ultra こんにちは、 i.MX8 または i.MX9 シリーズ プロセッサで Apple CarPlay Ultra のサポートが計画されていますか?もしSOなら、予想されるタイムラインは何ですか? i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Re: Apple CarPlay Ultra on i.MX8/9 これはプロサポートチームから得た情報です。また、プロサポートのメンバーの1人がApple CarPlay Ultraについて次のように話していました。 「現時点ではサポートしていませんし、FUTURE的にもサポートする予定はないと思います。これはアナ・ワーシー氏から始まる議論です。」
記事全体を表示
S32K144:在 lin_master_s32k144 (S32DS.ARM2.2) 中集成 FlexCAN 早上好: 目前使用 S32K144EVB 板准备系统演示,其中我们必须管理 1 个经典的 CAN-HS 网络 (500k) 和 3 个 LIN。(19200,每个 LIN 有多个从属设备) k144EVB 板将充当 3 个 LIN 的 LIN 主控器,这就是为什么我选择 lin_master_s32K144 示例作为起点。LINStACK 运行正常,现在我开始检查 CAN 通信与项目的集成情况。通过查看 S32K144 文档和示例,我发现 K144 有 2 种不同的 CAN 通信管理方法......要么通过 FIFO,要么通过 MBs......不清楚其中一种方法的优势。对于必须接收 4-5 条 CAN 报文、处理部分内容数据并定期发送 1 或 2 条 CAN 报文的系统而言,不清楚其中一种方式的优势: 1) 考虑到我的 LIN 主站将满负荷运行,哪种配置更容易使用? 2) 恩智浦 linstack 与 FlexCAN 集成之间是否会出现寄存器/时钟/中断冲突? 3) 是否有这样的集成示例(LIN-MASTER + CAN-HS)? Re: S32K144: Integration of FlexCAN inside lin_master_s32k144 (S32DS.ARM2.2) 你好@rricart LIN 和 CAN 之间没有任何关系,它们是两个独立的外设模块。 对于 S32K1 FlexCAN,CAN FIFO 不支持 CAN FD,因此需要考虑是否需要支持 CAN FD。 如果您的项目不需要 CAN FD 功能,那么 MB 或 FIFO 都可以。 您可以参考此链接中提供的演示,其中对使用 FlexCan 的不同方式进行了分类,并提供了一个简单的测试演示。 https://community.nxp.com/t5/S32K-Knowledge-Base/S32K1xx-FlexCAN-Mask-Setting-Demo/ta-p/1519753
記事全体を表示
使用 usbdm 对 68HC912B32 编程 我正在尝试对一块装有这种芯片的旧板进行编程,但是对这个微控制器系列来说是全新的,所以不胜感激。 我下载并安装了 USBDM_4_12_1_340_Win.msi Windows 软件,并运行了"USBDM Memory Dump" 应用程序,转储了 68HC912B32 芯片上的闪存(地址范围 0x8000-0xFFFF)。 我还查看了"HCS12 Programmer" 或"Flash programmer" 应用程序,但其下拉菜单列表中没有 MC912B32 芯片。我还用 " Detect Chip " 按钮尝试了 " 设备选择 " 但它无法检测到我的芯片。 我不需要完整的开发环境/集成开发环境,只需要能够转储闪存、更换损坏的微控制器并用转储的程序对新微控制器进行编程。 这个 4 岁的https://community.nxp.com/t5/OSBDM-and-TBDML/program-the-HC12-B-Family-of-MCU/td-p/1324102这个问题很有趣,但并没有提供解决方案。 我的首选操作系统是 Linux 而不是 Windows,因此我非常乐意尝试基于 Linux 的解决方案。 对如何安装一个有效的编程环境有什么想法吗? 非常感谢 汤姆-克兰 Re: Programming a 68HC912B32 with usbdm 嗨,@pgo、 感谢您的跟进。我取得了一些进展。 Code Warrior 5.2 不支持 68HC912B32 的解决方案是安装 Code Warrior 5.1。这里建议https://community.nxp.com/t5/CodeWarrior-for-MCU/CodeWarrior-Development-Studio-for-HCS12-X-Microcontrollers/m-p/603056。 在 5.1 版中(见所附屏幕截图 Code-warrior2-run-as-administrator-MC68HC912B32+USBDM.jpg),MC68HC912B32 芯片已出现并可以选择。 但是,"连接 "下拉菜单中没有列出 USBDM 或 TBDML 选项。 在重新安装 Code Warrior 5.1 后,我重新安装了 USBDM 及其驱动程序,并将 USBDM 插入电脑。 为了检查 USBDM 未出现在 "代码勇士连接 "菜单中是否是因为 USBDM 不支持 68HC912B32,我尝试选择了 USBDM 支持的其他芯片。 我选择了 MC9S12A128B。 现在 “连接” 菜单增加了 3 个条目:" TBDML ", " HCS 串行监测 " & " USBDM "。请参阅所附屏幕截图 Code-warrior2-MC68HC9S12A128B+USBDM.jpg。 除了尝试修改 USBDM Tcl 代码以支持 68HC912B32 外,是否还有任何其他软件/硬件应用程序或其他选项可与 USBDM pod 一起使用以对该芯片进行编程? 如果没有,是否有其他支持 S/W 的硬件/软件选项可以让我对 68HC912B32 的闪存进行编程? 我的板只有用于调试/编程的 6 针 BDM 插槽 —— 所以必须假设制造商最初就是这样编程的,除非它是在焊接之前断路完成的,这似乎不太可能... 谢谢! 汤姆 Re: Programming a 68HC912B32 with usbdm 嗨,汤姆 很抱歉,我已经无法访问 Codewarrior(或 Windows!),因此无法亲自检查。 当我在恩智浦网站(https://www.nxp.com/products/68HC912B32)上搜索 68HC912B32 时,最终会找到您下载的 Codewarrior 版本,因此这似乎是正确的版本。 我不知道为什么 B32 没有出现。 对不起! Re: Programming a 68HC912B32 with usbdm 嗨,Pgo、 感谢您的跟进。 我已经部分拆解了之前转储的图像,所以应该可以拼凑出一个 .asm文件放入代码勇士项目中。 我找不到 Codewarrior 第 6 版的下载地址,但还是从https://www.nxp.com/design/design-center/software/development-software/codewarrior-development-tools/codewarrior-legacy/codewarrior-development-studio-for-hcs12x-microcontrollers-classic-ide-v5-2:CW-HCS12X下载了。 链接。 它被列为版本 5.2,重要的是,在 " 支持的设备 " 的 " Expand All " 复选框下列出了 68HC912B32。 安装 + 运行应用程序并检查版本号,显示的是 5.9 而不是 5.2。请参见所附截屏图片。 正在调用 " 启动对话框..." 和 " 创建新项目 " 提供了一个可选择芯片系列的弹出窗口。请参阅所附的截屏图片。 它只列出了 HCS12 & HCS12X 系列。 将这些节目扩展到家庭成员。请参阅所附的截屏图片。不出所料,其中没有 HCS912B32。 是我做错了什么,还是漏掉了什么显而易见的东西? 非常感谢 汤姆-克兰 Re: Programming a 68HC912B32 with usbdm 嗨,汤姆 很抱歉,USBDM 编程器不太可能适用于对您的芯片进行编程。 正如其他主题所指出的,这需要开发 TCL 脚本来完成基本工作(芯片启动、大量擦除等),并开发目标代码来完成块编程。 这是一项艰巨的工作,而且不能保证这种方法一定有效,因为 USBDM 采用的方法可能与早期的芯片不兼容。 可以使用位于 https://github.com/podonoghue/usbdm-eclipse-makefiles-build 的代表为 Linux 版本 USBDM。 我认为最好的办法是检查 Codewarrior V6(我认为)是否支持该芯片的 TBDML(USBDM 与之兼容)。 我不确定这是否允许独立编程,而不是从源代码进行调试开发。 仅适用于窗口。 再见
記事全体を表示
在 S32K358 上配置 AUTOSAR 4.7.0 中的接收中断 大家好, 我们目前正在将我们的项目从 RTD 迁移到 AUTOSAR 4.7.0(SW 版本 3)。 发送和接收均配置为中断模式。 在 RTD 设置中,每个报文对象都有自己的缓冲区。当收到消息时,将触发信号接收 IRQ 功能,通过使用消息对象编号,可以访问和处理相应的缓冲区。 现在,在 AUTOSAR 中,我不知道如何正确配置接收中断处理。 如何在 AUTOSAR 中为接收中断分配或访问消息对象缓冲区? 是否有实现或配置接收 ISR 回调(例如通过 CanIf 或 CanDrv)的推荐方法? 此工作流程有任何示例或文档参考吗? 我查看了多个示例,但没有找到一个能说明接收中断处理的示例。 如有任何提示或配置示例,敬请垂询! Re: Configuring Reception Interrupts in AUTOSAR 4.7.0 on S32K358 你好,我是@thorben_kamp、 我猜您说的 SW 版本 3 指的是 S32K3 RTD v3.0.0 ASR21-11。 RTD 代码包为 S32K358 CAN 通信提供了 AUTOSAR 示例例程: Snag_12dd019.png 不过,它被配置为环回操作,这意味着输出引脚上看不到信号。您需要配置输出引脚(S32K3X8EVB 中 CAN0 的 PTA6/7),并将 CAN 实例模式从环回改为正常/用户模式。 您还需要根据硬件配置初始化 CAN 收发器。 这里发布了一个基于中断 MCAL 的 S32K3X4EVB-T172 示例:[RTD600 MCAL & IP] S32K3X4EVB-T172 FlexCAN 示例中断 /轮询——恩智浦社区。它基于 S32K344,但可以使用相同的主程序。请记住,该示例只是展示了最基本的配置,完全不符合 AUTOSAR 标准。 致以最诚挚的问候, Julián
記事全体を表示
使用 MCAL 向传输 FIFO 执行 S32K312 LPUART0 DMA 传输。 你好 我确认中断方法正常工作。 但是,DMA 方法不起作用。 在 Mcl_Init(NULL_PRT);中出现硬故障。 uart dma 相关示例使用的是 flexio dma,所以我不确定问题出在哪里。 请检查一下。 Re: Use MCAL to perform S32K312 LPUART0 DMA transfer to the transfer FIFO. 终于解决了 我漏掉了 "dma mux source: enable"。 seop79_0-1753430524322.png Re: Use MCAL to perform S32K312 LPUART0 DMA transfer to the transfer FIFO. 你好,Robin Shen。 按照您的指示,激活 DMAMUX_0 不会导致任何错误。 然而,它仍然不起作用。 对于 tx,没有任何操作;对于 rx,当从终端接收到第一 和第二个字节时,会发生 “LPUART_UART_IP_STATUS_RX_OVERRUN”。 这种情况已经持续两周了。 如果您能提供更详细的信息,我将不胜感激。 此外,没有出现 dmarx 和 dmatx 中断。 已使用 DeepL.com 翻译(免费版) seop79_2-1753427584155.png seop79_1-1753427358084.png seop79_0-1753428166250.png seop79_1-1753428179936.png Re: Use MCAL to perform S32K312 LPUART0 DMA transfer to the transfer FIFO. 你好 请配置 McuPeripheral -> 外设时钟启用 看来你忘记启用这些外设的时钟门了:EDMA\DMAMUX_0 祝好, Robin ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"ACCEPT AS SOLUTION" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题并参考已关闭的主题。 -------------------------------------------------------------------------------
記事全体を表示
恩智浦 OTA 示例中的不可缓存区域 亲爱的各位, 我试图使用这里给出的 OTA 机制示例: https://github.com/nxp-mcuxpresso/mcuxsdk-examples/tree/release/25.09.00-pvw1/_boards/evkbmimxrt1170/ota_examples/mcuboot_opensource 链接器脚本中有一节: /* Specify the memory areas */ MEMORY { m_flash_config (RX) : ORIGIN = 0x30000400, LENGTH = 0x00000C00 m_ivt (RX) : ORIGIN = 0x30001000, LENGTH = 0x00001000 m_interrupts (RX) : ORIGIN = 0x30002000, LENGTH = 0x00000400 m_text (RX) : ORIGIN = 0x30002400, LENGTH = TEXT_SIZE m_qacode (RX) : ORIGIN = 0x00000000, LENGTH = 0x00040000 m_data (RW) : ORIGIN = 0x20240000, LENGTH = 0x00040000 m_data2 (RW) : ORIGIN = 0x202C0000 + RPMSG_SHMEM_SIZE, LENGTH = 0x00080000 - RPMSG_SHMEM_SIZE rpmsg_sh_mem (RW) : ORIGIN = 0x202C0000, LENGTH = RPMSG_SHMEM_SIZE m_core1_image (RX) : ORIGIN = CORE1IMAGE_START, LENGTH = 0x00040000 } Then later there is: __NDATA_ROM = __ram_function_flash_start + (__ram_function_end__ - __ram_function_start__); .ncache.init : AT(__NDATA_ROM) { __noncachedata_start__ = .; /* create a global symbol at ncache data start */ *(NonCacheable.init) . = ALIGN(4); __noncachedata_init_end__ = .; /* create a global symbol at initialized ncache data end */ } > m_data2 . = __noncachedata_init_end__; .ncache : { *(NonCacheable) . = ALIGN(4); __noncachedata_end__ = .; /* define a global symbol at ncache data end */ } > m_data2 这将额外的不可缓存部分定义为 OCRAM2 的剩余部分(从 202C_0000 到 2033_FFFF - 512KB)。 不过,Board_ConfigMPU 确实: https://github.com/nxp-mcuxpresso/mcuxsdk-examples/blob/release/25.09.00-pvw1/_boards/evkbmimxrt1170/board.c #if defined(CACHE_MODE_WRITE_THROUGH) && CACHE_MODE_WRITE_THROUGH /* Region 6 setting: Memory with Normal type, not shareable, write through */ MPU->RBAR = ARM_MPU_RBAR(6, 0x20200000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_1MB); /* Region 7 setting: Memory with Normal type, not shareable, write trough */ MPU->RBAR = ARM_MPU_RBAR(7, 0x20300000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_512KB); #else /* Region 6 setting: Memory with Normal type, not shareable, outer/inner write back */ MPU->RBAR = ARM_MPU_RBAR(6, 0x20200000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_1MB); /* Region 7 setting: Memory with Normal type, not shareable, outer/inner write back */ MPU->RBAR = ARM_MPU_RBAR(7, 0x20300000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_512KB); #endif 将此内存扇区标记为可缓存。 有谁能告诉我,示例代码是否真的将 m_data2 的提醒标记为不可缓存? 或者换句话说--谁能告诉我如何实现这一目标--在我们的应用程序中,我们希望将这一 ram 部分的剩余部分用作非高速缓存。 感谢您的支持 Re: Non-Cachable region in NXP OTA example 你好@jslota13245、 感谢您对 NXP MIMXRT 系列的关注! OCRAM 是一个可缓存区域。针对您的应用场景,请参考本指南: https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/Using-NonCached-Memory-on-i-MXRT/ta-p/1183369 致以最诚挚的问候, Gavin
記事全体を表示
RW612 FlexSPI PORTB1 アクセス RW612 チップセットを外部 XIP モードで使用しています。コードは FlexSPI PortA1 から実行され、PSRAM (APS6404L) を FlexSPI PortB1 に接続しています。SDKs (25.06 バージョン) が提供する構成を使用してポート B1 にアクセスしています。 PSRAM ID を読み取ろうとすると、PortB1 (CLCK/CS) で信号アクティビティが表示されません。 これらの信号が欠陥のある部品によって保持されていないことを確認するために、SPARM を取り外しました。 これは、APS6404 が DQS 信号を使用しないという事実に関係していますか? DQS を使用しないように PortB1 を構成するにはどうすればよいでしょうか? FlexSPI が PortA1 アクセス用に初期化された後は、FLEXSPI_Init 関数を呼び出すことができないことがわかっています。 ご協力とお時間をありがとうございました。 Re: RW612 FlexSPI PORTB1 access こんにちは、ローマン。 ご協力ありがとうございます。この問題は、バスの実行中に FlexSPI クロックを設定しようとしたことに関連していました。次の行をコメント アウトしました。 CLOCK_EnableClock( kCLOCK_Flexspi ); BOARD_SetFlexspiClock(FLEXSPI、5U、3U); FlexSPI ポート B1 は現在実行されており、AHB キャッシュを使用して PSRAM への書き込み/読み取りをCAN。 助けてくれてありがとう、本当に感謝してるよ。 Re: RW612 FlexSPI PORTB1 access こんにちは@khalidL 。 下の画像のように、MCU 設定で PSRAM メモリ セクションを定義しましたか? RomanVR_1-1753912826626.jpeg プロジェクトのアプリケーション コード ハブ投稿に記載されている手順を必ず実行し、問題が解決しない場合はお知らせください。 Re: RW612 FlexSPI PORTB1 access こんにちは、ローマン。 ご協力とご協力に感謝いたします。上記の例をプロジェクトに統合する過程で、次の問題が発生しました。メインから関数「 __RAMFUNC(SRAM) status_t BOARD_InitPsRam(void) 」を呼び出すと、コードがサイレントにクラッシュします。 リンカーファイル(main_data.ldt、main_txt.ldt および noinit_noload_section.ldt)board.cをコピーするファイル?BOARD_InitPsRam が RAM に正しくコピーされなかったためにコードがクラッシュしたのではないかと思います。 お時間を割いてご協力いただき、改めて感謝申し上げます。 Re: RW612 FlexSPI PORTB1 access この例は私のボードでは動作します。ご協力ありがとうございます。 Re: RW612 FlexSPI PORTB1 access こんにちは@khalidL 、お元気ですか。 アプリケーション コード ハブには、外部 NOR フラッシュからの XIPに関する例があります。共有されたリンクからサンプルをテストして、プロジェクト要件に適合するかどうかをお知らせください。 プロジェクトを MCUXpresso IDE にインポートするには、「アプリケーション コード ハブからインポート」オプションをクリックします。(このサンプルには SDK バージョン 2.16.00 が必要です) RomanVR_0-1753821216871.png アプリケーション コード ハブ ウィンドウに入ったら、サンプルの名前 (外部 NOR フラッシュからの XIP およびマルチポート FlexSPI モジュールを使用した外部 pSRAM の構成) を検索し、それを選択して「Github リンク」をクリックし、「次へ >」ボタンが使用できるようになるまで待ちます。 RomanVR_1-1753821257434.png 「次へ > 」ボタンをクリックしたら、手順に従って Git リポジトリからプロジェクトをインポートします。最後に、プロジェクトがワークスペースで使用できるようになると、セットアップでフラッシュしてテストできるようになります。 これが役に立つかどうか教えてください。
記事全体を表示