Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
[Introduction to NXP Microcontrollers] [Motor Control] [Basics Part 3] How Permanent Magnet Synchronous Motors Work and How to Control Them (Japanese blog) table of contents   [Introduction to NXP Microcontrollers] [Motor Control] [Basics Part 3] Mechanism and Control Method of Permanent Magnet Synchronous Motors The unsung hero! What are Clark Transform and Park Transform? It all began with the complex waves of three-phase AC Step 1: Clarke Transformation - Simplifying 3D into 2D Step 2: Park Transformation - "The Magic of the Merry-Go-Round" - Freeze the Moving World Why go through such a tedious conversion process? What are the huge benefits? Summary: The power of mathematics to manipulate complex waves at will [Introduction to NXP Microcontrollers] [Motor Control] [Basics Part 3] Mechanism and Control Method of Permanent Magnet Synchronous Motors The unsung hero! What are Clark Transform and Park Transform? Hello! When an electric vehicle (EV) takes off smoothly and a high-performance air conditioner operates surprisingly quietly, microcomputers perform complex calculations at ultra-high speeds and skillfully control the motor. This time, let's unravel the mysteries of the "Clark Transformation" and the "Park Transformation" (transformations named after two great experts who work in " vector control ," the heart of control technology), with the GIF animation below! (function() { var wrapper = document.getElementById('lia-vid-6377224605112w540h540r855'); var videoEl = wrapper ? wrapper.querySelector('video-js') : null; if (videoEl) { if (window.videojs) { window.videojs(videoEl).ready(function() { this.on('loadedmetadata', function() { this.el().querySelectorAll('.vjs-load-progress div[data-start]').forEach(function(bar) { bar.setAttribute('role', 'presentation'); bar.setAttribute('aria-hidden', 'true'); }); }); }); } }})(); (View My Videos) It all began with the complex waves of three-phase AC First, the top row. This is the world of three-phase AC , the basic energy required to run a motor. Graph on the right (Three-Phase Sine Waves) : Three waves, A, B, and C, are constantly changing in magnitude and direction as they flow. These three waves are interconnected, but as they are, it is extremely difficult to intuitively determine how much force should be applied to the motor at any given time. It's like trying to conduct three musicians who are each playing different pieces of music at the same time. Left graph (Rotating Vector) : However, when the forces of these three waves are combined, something interesting happens. A single force ( rotating vector ) is created that rotates smoothly and constantly, while maintaining a constant magnitude. Physically, this is the " rotating magnetic field " created by the stator coil. It is this rotating magnetic field that attracts the rotor magnet and is the source of the force that turns the motor. Problem: How can we easily and accurately control these "three constantly changing waves" using a microcontroller? Step 1: Clarke Transformation - Simplifying 3D into 2D The first magic is the " Clark transformation ," which transforms a complex 3D world into a more understandable 2D world. The calculation formula is as follows: In normal motor control, the following simplified formula is used, assuming amplitude invariant transformation (K=2/3) and balanced three-phase (i_a+i_b+i_c=0).   ​ The graph on the right (Two-Phase Sine Waves α-β) : Look! The three waves have been consolidated into two waves, α (alpha) and β (beta). The wave shape (alternating current) is still there, but one variable has been removed, making it much easier to see. Graph on the left (Clarke Transformation α-β) : This shows the world as seen from two axes (α, β) that intersect at right angles to the rotation vectors seen from three axes (A, B, C). It's like turning a solid object seen from an angle into a flat view from directly above. The rotation vector itself continues to rotate in the same way without any change. [Key points of Clarke conversion] Without losing any information, we simplified the problem by converting from the somewhat difficult to handle three-phase coordinate system to Cartesian coordinates (α-β stationary coordinate system), which are familiar from mathematics. Step 2: Park Transformation - "The Magic of the Merry-Go-Round" - Freeze the Moving World The values of α and β are still changing like waves, and it is difficult to keep track of them. This is where the essence of vector control, the " Park transformation ," comes in! The calculation formula is as follows: ​​ This is a major shift in thinking : "Let's stop looking at the rotating vector from the stationary ground (α-β coordinates) and jump on a merry-go-round that rotates at the same speed as the rotating vector!" This new rotating coordinate system is called the " dq rotating coordinate system ." Right graph (Two-Phase Value dq) : What an amazing result! The two waves that had been changing so drastically have now turned into **almost constant values (direct current)** called d and q! Left graph (Park Transformation dq) : You can see that the dq coordinates rotate in perfect synchronization with the rotation vector. If you stand right next to a horse on a merry-go-round, the horse appears stationary to you, right? It's the exact same principle. From the perspective of the rotating object, it appears stationary. [Points to note about park conversion] By observing from a coordinate system (dq coordinates) that rotates at the same speed as the rotating vector, AC values can be treated as DC values. Why go through such a tedious conversion process? What are the huge benefits? This two-step transformation brings us a tremendous benefit: overwhelming simplification of control . Controlling constantly changing AC values is difficult, but what about DC values? If it's higher than the target value, lower it; if it's lower, raise it. With this simple operation (PID control) that even an elementary school student can understand, you can achieve perfect control of a motor. The DC values of d and q each have an important physical meaning. q-axis value (Quadrature-axis): This directly controls the motor's torque (rotational force). When you step on the accelerator of an EV, the car accelerates sharply because the microcomputer is raising the target value of this q-axis. It is truly a "power dial." d-axis value (Direct-axis): Controls the motor's magnetic flux (magnet strength). In the case of a permanent magnet motor, the strength of the rotor magnet is constant, so basically it is most efficient to control the d-axis current to zero. It is truly an "efficiency dial." In other words, the Clarke and Park transformations are magical in that they separate the "power" and "efficiency" elements of a motor, which are normally mixed together, into two independent DC dials (d and q) . Summary: The power of mathematics to manipulate complex waves at will The complex wave of three-phase AC creates a rotating force (rotation vector) inside the motor. Clarke transformation simplifies the problem by redrawing the three-dimensional world into two dimensions (α-β). The park transformation involves riding on a rotating merry-go-round (dq coordinates) and converting AC values into DC values. The DC torque (q) and magnetic flux (d) values can be easily and accurately controlled using a PID controller! This series of elegant mathematical processes is the basis of "vector control," which supports modern high-performance motors. It is this magic that allows us to enjoy the full benefits of powerful, quiet, and energy-efficient motors. Thank you for reading to the end! If you would like to read the next basic chapter, click here ↓ [Basics Part 4] Practice! Let's see how vector control works using a block diagram! Click here for an explanation of the specific setup method and how to run the sample code. [Introduction to NXP Microcontrollers] [Motor Control] [Practical Part 1] Mechanism and Control Method of Permanent Magnet Synchronous Motors (Japanese blog) Here is a website that compiles articles about NXP motor control: NXP Motor Control - Summary Page - (Japanese blog) =========================​ We are currently unable to respond to comments in the " Comment " section of this post . We apologize for the inconvenience, but when making inquiries, please refer to " How to contact NXP with technical questions ( Japanese blog ) " . (If you are already an NXP distributor or have a relationship with NXP , you may contact the person in charge directly. ) This article will provide an easy-to-understand explanation of motor control using the NXP FRDM board "FRDM-MCXA156." It is divided into a basic section and a practical section, so we hope you will refer to the section that interests you. ・Basics ①~⑦, Practical ①~③ This time, as part 3 of the Basics, we will explain the mechanism and control method of permanent magnet synchronous motors using NXP microcontrollers. MCUXpresso MCUXpresso IDE MCUXpresso SDK MCX Motor Control Technology Focus Japanese Blog
查看全文
Viable replacement for DSP56F807 Hi team, We have a customer seen the EOL that was sent out on the DSP56F807, specifically we use the DSP56F807VF80E. Since we are faced with having to tackle this and there were no direct replacements listed, I was wondering what the most similar part would be from your point of view? We are thinking if we can find anything that requires little to no redesign work. Thank you for any support you can give on this.
查看全文
您知道 PCA9698 的状态吗? 我想我可能需要这样的东西。其现状如何?有没有更新的类似产品? 兰迪 Re: Do you know the status of PCA9698 ? 你好,兰迪、 PCA9698 目前仍在生产,但 HVQFN56 版本 (PCA9698BS) 已经停产。TSSOP56 版本(PCA9698DGG)仍然完全有效并受支持,是新设计的推荐选择。没有较新的恩智浦设备能够在单芯片中提供相同的 40 位 GPIO 数量和电流能力,因此,如果需要该功能,PCA9698DGG 仍然是最合适的解决方案。 BRs, Tomas
查看全文
LED code example does not work I was following this example on my s32k116: https://www.nxp.com/design/design-center/training/TIP-GET-TO-KNOW-THE-USER-FRIENDLY-MBDT-D0609 I did exactly what was shown in the video to get the LED working. My code builds too. But the LED wont turn on when I turn the potentiometer. I have attached a picture of the board for reference. Kindly guide me on where I might be going wrong Re: LED code example does not work Hello, Please note that the video you mentioned uses another evaluation kit (S32K144EVB) and the pins might not be the same for S32K116. Did you check the schematic to see the pins used by the potentiometer and the LED? As a recommendation, try to use the FreeMASTER tool to visualize the data on the board. You have to add data store memory blocks to save the data from the ADC and the state of the LED. Please set them to Volatile (in order to see them in FreeMASTER).  Another variant is to use the S32 Design Studio to directly debug the application, by placing breakpoints at specific lines and see the values read from the potentiometer. Best regards, Sorin Bancila  Re: LED code example does not work I tried doing that but when I try to start a session on freemaster, it cannot detect the board information. And I set the block state ("pot_adc") as Volatile which is why is shows up as a symbol when I go to the symbol table preview . Here is the screenshot. I am not sure why the board is not responding
查看全文
Homebrew RF 设计挑战赛获胜者 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 描述 第一名 第二名 第三名 结束语 描述 今年早些时候,恩智浦为业余无线电爱好者组织了一次促销机会,让他们发挥创造力,构建自己的功率放大器设计。 NXP 在这次竞争激烈的 Homebrew RF 设计挑战赛中收到了大量富有创意的作品。我们感谢社区的奉献和热情,使这次比赛取得了成功。 第一名 MRF101AN 宽带放大器设计,具有 1 W 输入、100 W 输出 1.8-54 MHZ 放大器平台。(更多信息请访问: NXP MRF-101 - RFPowerTools ) 该放大器带宽为1.8MHz至54MHz。最大输出功率在30MHz时为100W,在50MHz时为70W。 最大电源50V至4A,电压驻波比最大为1.5:1。 PCB 的设计尺寸为 5x5 厘米(2x2 英寸)。包括风扇和散热器在内重量为310克。 第二名 采用经济实惠的 LDMOS 器件的 600W 宽带 HF 放大器(更多信息请访问: https ://qrpblog.com/2019/10/a-600w-broadband-hf-amplifier-using-affordable-ldmos-devices/) 该项目旨在展示 MRF300 晶体管作为 2-50MHz 范围内的线性宽带设备的能力,并供无线电爱好者用作中高功率放大器的起点。这也是我参加 2019 年 NXP Homebrew RF 设计挑战赛的作品。 为了实现 600W 输出的目标,同时最大限度地降低偶次谐波的水平,使用了两个晶体管的“推挽”配置。幸运的是,制造商提供了两个具有镜像引脚排列的版本(MRF300AN 和 MRF300BN),从而可以轻松设计此类产品的 PCB 布局。采用常见的TO-247封装,源极接极耳。 每个 MRF300 LDMOS 晶体管的额定输出功率为 330W,工作频率范围为 1.8-250MHz,最大增益为 28dB,效率超过 70%。建议的电源范围是 30-50Vdc。通过研究规格,看起来通过正确的宽带匹配和一些操作安全裕度,我们可以在相当大的带宽上以大约 45V 的电压获得接近 600W 的输出;目标是覆盖 1.8 至 54MHz。 设计该放大器时的主要挑战是在整个频率范围内实现良好的输入和输出匹配以及保持高而平坦的增益。良好的线性度和低水平的谐波产物是必需的。由于 TO-247 不是专门为高功率射频设计的封装,因此在热设计和 PCB 布局方面也存在一些挑战。 信息取自获奖者的文章。 第三名 用于立方体卫星等离子推进器的高效开关模式射频放大器,采用 MRF101AN LDMOS 器件(更多信息请访问:研究 - SuperLab@Stanford ) E 类放大器利用有源器件作为开关,仅在截止(关闭)和饱和(打开)条件下工作。这最大限度地减少了电压和电流的重叠,减少了有源器件的损耗。为了进一步减少损耗,E 类放大器利用电感调谐谐振网络实现零电压开关,在开启之前将开关两端的电压降至零,从而消除有源器件输出电容中存储的否则会耗散的能量。这是通过电感调谐串联谐振输出滤波器实现的。 在 E 类放大器中,损耗几乎完全由有源器件传导的电流决定,因此需要较高的漏极阻抗来最大限度提高效率。漏极阻抗最终受开关额定电压的限制。对于我们期望的 40W 输出功率和 MRF101AN 的最大额定电压 133V,该阻抗仍然小于 50 欧姆,因此使用 L 匹配电路将漏极阻抗匹配至 50 欧姆。我们设计中的负载网络提供了15.4+12.8j的漏极阻抗。 由于 MRF101AN 将在饱和状态下运行,因此需要较高的驱动水平。为了消除对前置放大器的需求并允许数字控制,我们使用开关模式电源中通常使用的高速栅极驱动芯片 LMG1020 来驱动 MRF101AN,而不是 RF 前置放大器。谐振网络用于提供基波和三次谐波的电压增益,在栅极上提供准方波,有助于确保器件保持饱和状态。 结束语 这是一场惊险刺激且竞争非常激烈的比赛!每位参与者都以自己富有创意、独特且令人印象深刻的方式展示这些新部件的功能。 NXP 始终致力于迎接新的设计挑战。 准备好迎接下一个挑战了吗? 汽车电子 工业控制 移动设备 回复:自制射频设计挑战赛获胜者 展示设备实际用户的应用程序是一个非常好的主意。
查看全文
EB tresos 许可证到期 我的 EB Tresos 许可证有效期至 2025 年 12 月 31 日(即将到期)。 如何在过期前获得新的激活码? Re: Expiration of EB tresos license 嗨,Joung、 请注意,在圣诞假期期间,我们的支持响应时间可能会比平时长。在某些情况下,您的请求可能会在新年后得到处理。感谢您的理解。 几天前,我给 [email protected] 发了电子邮件,提醒他们更新 EBTresos 激活码,但至今没有收到回复。 恐怕要到新年后才能更新。 很抱歉给您带来不便! 祝好, Robin ------------------------------------------------------------------------------- 注: - 如果本帖回答了您的问题,请点击"ACCEPT AS SOLUTION" 按钮。谢谢! - 我们会在最后一次发帖后的 7 周内跟踪主题,之后的回复将被忽略 如果您以后有相关问题,请另开新主题,并参考已关闭的主题。 -------------------------------------------------------------------------------
查看全文
EIQ 時系列生成モデルは、PowerQuad DSP または Neutron N1-16 NPU を使用して高速化されます。 質問: PowerQuad DSP または Neutron N1-16 NPU を使用して EIQ 時系列生成モデルを高速化するにはどうすればよいですか? 図に示すように、別のライブラリ ファイルを追加する必要がありますか、それとも生成されたモデルの静的ライブラリにはすでに PowerQuad DSP または Neutron N1-16 NPU アクセラレーションが含まれていますか? 想定される回答:PowerQuad DSPまたはNeutron N1-16 NPUアクセラレーションを使用したドキュメントまたはプロジェクトをご提供ください。TSSで更新可能な関連プロジェクトはありますか? マクネン NPU|ML Re: eiq time series 生成模型使用PowerQuad DSP or Neutron N1-16 NPU加速 こんにちは@xiaobai_226 アクセラレータのサポート。  PowerQuad : NXP ハードウェア IP は、FFT 計算を高速化するのに役立ちます。選択したターゲットにこのハードウェア モジュールが含まれている場合は、デフォルトで表示され、有効になります。 Neutron NPU : NXP ハードウェア IP はディープラーニング モデルの予測を高速化するのに役立ちます。これは、選択したデバイスにこのハードウェア モジュールが含まれている場合にサポートされます。 BR ハリー Re: eiq time series 生成模型使用PowerQuad DSP or Neutron N1-16 NPU加速 こんにちは、ハリー TSS によって生成されたライブラリ ファイルには、すでに加速プロセッシングユニットが組み込まれているということをおっしゃっているのでしょうか?.lib 以降TSSによって生成されたファイルには、プロセッシングユニットが含まれているかどうかが明示的に示されておらず、SDKの例とTensorFlow for NPUの両方でNPUは.aの形式で提供されることを考えると、ファイルでは、TSS で生成されたファイルに加速ユニットが含まれているかどうかは不明のままです。テストに使用する評価ボードは MXCN947EVK です。
查看全文
Wi-Fi Easy Connect (DPP) Between Two MediaTek Genio-510 Boards Hi NXP Community, Problem Statement I am trying to connect two MediaTek Genio-510 EVK boards using Wi-Fi Easy Connect (DPP). Board A → AP + DPP Configurator (hostapd) Board B → STA + DPP Enrollee (wpa_supplicant) DPP authentication succeeds, but configuration fails with the error: DPP-FAIL Configurator rejected configuration DPP-CONF-FAILED I would like to understand what is causing the configurator to reject the configuration, even though DPP authentication completes successfully. Board Configuration Details 🔹 Board A (AP + DPP Configurator) hostapd version: v2.10 Interface: wlp1s0 Mode: AP Security: DPP only /etc/hostapd_nxp3.conf ctrl_interface=/var/run/hostapd interface=wlp1s0 driver=nl80211 ssid=DPP_AP111 hw_mode=g channel=1 country_code=IN ieee80211n=1 ieee80211w=2 wmm_enabled=1 auth_algs=1 # ---- DPP CONFIG ---- wpa=2 wpa_key_mgmt=DPP rsn_pairwise=CCMP dpp_connector=1 Start command: hostapd /etc/hostapd_nxp3.conf -B AP verification: iw dev # Interface wlp1s0 # type AP # ssid DPP_AP111 # channel 1 (2412 MHz) 🔹 Board B (STA + DPP Enrollee) wpa_supplicant version: v2.10 Mode: Managed (STA) /etc/wpa_supplicant_nxp.conf ctrl_interface=/var/run/wpa_supplicant update_config=1 pmf=2 dpp_config_processing=2 Start command: wpa_supplicant -i wlp1s0 -D nl80211 -c /etc/wpa_supplicant_nxp.conf -B DPP Procedure Followed On Board A (Configurator) hostapd_cli Commands executed: dpp_configurator_add dpp_bootstrap_gen type=qrcode chan=81/1 mac=a8:41:f4:89:a2:5d dpp_bootstrap_set 1 conf=sta-dpp ssid=DPP_AP111 configurator=1 dpp_bootstrap_get_uri 1 dpp_listen 2412 Result: DPP Authentication → SUCCESS DPP Configuration Sent → ✅ Relevant logs: DPP-AUTH-SUCCESS init=0 DPP-CONF-REQ-RX DPP-CONF-SENT On Board B (Enrollee) wpa_cli Commands executed: DPP_QR_CODE dpp_auth_init peer=1 role=enrollee Logs observed: DPP-AUTH-SUCCESS init=1 GAS-QUERY-DONE result=SUCCESS DPP-FAIL Configurator rejected configuration DPP-CONF-FAILED Questions Why does the configurator reject the configuration even though authentication succeeds? Should the configurator send PSK/SAE credentials instead of sta-dpp? Is this a driver or firmware limitation on MediaTek Genio-510 for full DPP support? Any guidance or working reference configuration for Genio-510 DPP AP ↔ STA would be very helpful.
查看全文
88Q9098: 能否在 STA 模式下启用/禁用 ofdma/mu-mimo? 我一直在苦苦寻找答案,但就是找不到。 我想添加启用/禁用功能 下一次连接到接入点时为 DL-OFDMA、UL-OFDMA、DL-MU-MIMO、UL-MU-MIMO 我知道启用这些功能是由接入点完成的、 但我并不关心它以何种形式出现,比如改变能力,或者其他、 我只是想让它以这种方式工作: 当我启用 DL-OFDMA 时,如果接入点尝试使用,它就会工作、 而当我在 STA 中禁用它时,即使 AP 尝试禁用,也不会起作用。 如果可能,那就再好不过了、 但即使不可能,我也会非常感激。 我真的需要你的帮助。 谢谢! Re: 88Q9098: Is it possible to enable/disable ofdma/mu-mimo in STA mode? 感谢您的支持 Re: 88Q9098: Is it possible to enable/disable ofdma/mu-mimo in STA mode? 你好@nhk OFDMA/MU-MIMO 功能只能由 AP 端配置。STA 无法禁用它。STA 将使用 AP 指定的通信协议进行通信。 顺祝商祺! 肖恩
查看全文
FormatKeyCatalog 返回不同的错误代码 你好@lukaszadrapa 我在 S32K344 上运行 HSE 的同一个项目有 2 种不同的版本配置,我遇到了一个奇怪的问题,那就是我的 FormatKeyCatalog API 在项目 A 中返回 HSE_SRV_RSP_OK,而在项目 B 中它在同一硬件上返回 HSE_SRV_RSP_NOT_SUPPORTED。 我还附上了两个方案的 SS。两种配置均在禁用 D-Cache 的情况下运行。 Re: FormatKeyCatalog returns different error codes 请注意,在圣诞假期期间,我们的支持响应时间可能会比平时长。在某些情况下,您的请求可能会在新年后得到处理。感谢您的理解。 Re: FormatKeyCatalog returns different error codes 你好@R_S002 " 同一个项目的 2 种不同的版本配置 " 是什么意思? 两个项目的目录是否相同?或者有什么区别?我需要更多的详细信息,以便提供一些帮助。 此致, Lukas
查看全文
使用直接内存寻址进行 CRC 评估 大家好 我使用的是 S32K358 MCU、MBD Toolbox v1.6.0 和 Matlab R2024a。 我知道工具箱不支持 Crc 模块,所以我配置了 .mex然后,我编写了一个 Matlab 函数,以便作为自定义代码手动调用"Crc_SetChannelCalculate" 函数。 这样做效果很好,我可以正确评估数组等数据流的 CRC。 现在我想做的是,直接使用内存地址作为数据输入,对内存区域进行 CRC 评估。如果我使用 S32DS IDE(在 Matlab 之外)手动编写代码"" ,代码看起来像这样: //--- 代码开始 uint32 CrcResult; uint8 *data; data = (uint8 *)0x40A1F0; // 为开始计算而选择的任意地址 CrcResult = Crc_SetChannelCalculate(CRC_LOGIC_CHANNEL_2, data, 16, 0, TRUE); //用这种方式我计算 16 字节的 CRC,起始值 = 0,直接从地址 0x40a1f0 开始在闪存中读取 //--- 当然,在此之前,我用适合我的应用的属性初始化了逻辑通道 CRC_LOGIC_CHANNEL_2。 这段代码运行良好,但我无法在 Matlab 上已翻译 " 它,因为我没有找到合适的方法来进行直接内存寻址(而且,如果我没错的话,Matlab 不支持这种可能性)。" 请问谁有办法解决这个问题? 感谢您的帮助和支持。 丹尼尔
查看全文
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
查看全文
IMX8mini Yocto Linux 的 rootfs 大小 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 对不起,我必须在这里提出这个问题。 [我的情况]: imx8mini,8G emmc,运行 Yocto Linux,Linux 4.14.98 电路板支持包。 [问题]: 默认情况下,Yocto Linux 版本的 rootfs 大概是 1.3GB,当我把它刷到 EVK 时,整个系统显示的只有 1.3GB,这绝对不合理,因为我的 emmc 是 8GB。 [我目前得到的解决方案] 在上网搜索 Yocto 之后,我知道可以使用 IMAGE_ROOTFS_EXTRA_SPACE=" xxxxxx" 或IMAGE_ROOTFS_SIZE="xxx" 来扩展整个大小。 [我的问题] 但是,如果这样做,我发现我的 rootfs 也会被强制放大到文件大小以上。 e,g,如果我将 IMAGE_ROOTFS_EXTRA_SPACE= " xxxxx " 设置为 8GB,那么版本 rootfs 图像大小也是 8GB!!!!!!!!!!!! 真糟糕,rootfs 添加了这么多无用的零填充,真正的 rootfs 只有 800MB,为什么要添加这么多无用的数据,强行放大到无用的 8GB?????!!!!!!!!!!!这导致我花了太多无用的时间将无用的 8GB 数据闪存到 EMMC!!!!!!!! 这既浪费了闪存图像时间,也浪费了我的硬盘存储!!!!!!!!! 为什么 Yocto 的设计如此糟糕??????? 为什么不使用 Android 的智能方式?????对于 Android,整个 system.img 只有大约 800MB,闪存到 EVK 后,整个系统(/)仍然显示 8GB emmc,而不是 800MB。 有谁能帮助我解决这个令人沮丧的问题?非常感谢。 i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus Linux Re: rootfs size for IMX8mini Yocto Linux 嗨,@Yuri、 我们使用的是 i.MX8M Plus EVK,它有 32 MB QSPI 闪存。 我们的目标是完全从 QSPI 闪存启动 U-Boot、Linux 内核、设备树和 initramfs (rootfs.img)。 我们能够成功启动: U-Boot(来自 flash.bin) Linux 内核(Image.gz) 设备树 (imx8mp-evk.dtb) 但是,我们在从 QSPI 闪存加载和使用 initramfs/rootfs 映像时遇到了问题。内核启动成功,但内核在 Waiting for removable media(等待可移动媒体)处挂起....,请参阅下面附带的日志。 -----Flash 布局和图像大小---------------- QSPI 闪存大小:32 MB flash.bin (U-Boot + SPL) ~2.3 MB Image.gz (内核) ~13.5 MB imx8mp-evk.dtb ~86 KB rootfs.img ~12.6 MB ----QSPI 偏移布局---------- flash.bin @ 0x00000000 Image.gz @ 0x00240000 imx8mp-evk.dtb @ 0x01000000 rootfs.img @ 0x01080000 ------ 将文件编入 QSPI(来自 SD 卡)--------- sf probe 0 sf erase 0x0 0x2000000 fatload mmc 1${loadaddr} flash.bin sf 写${loadaddr} 0x0${filesize} fatload mmc 1${loadaddr} Image.gz sf 写${loadaddr} 0x240000${filesize} fatload mmc 1${loadaddr} imx8mp-evk.dtb sf 写${loadaddr} 0x1000000${filesize} fatload mmc 1${loadaddr} rootfs.img # initramfs (cpio.gz) sf 写${loadaddr} 0x1080000${filesize} ------闪烁后,重启板------------------ 从 u-boot 启动后,为 Linux 内核 (Image.gz)、设备设置环境变量树 (imx8mp-evk.dtb),rootfs.img。 sf probe 0 setenv loadaddr 0x40480000 // 核心 setenv fdt_addr 0x43000000 //dtb setenv initrd_addr 0x43800000 //rootfs setenvkernel_comp_addr_r 0x50000000 setenv kernel_comp_size 0x04000000 sf read${loadaddr} 0x240000 0xCD3CE2 sf read${fdt_addr} 0x1000000 0x14360 sf read${initrd_addr} 0x1080000 0xC04DB0 setenv bootargs"console=ttymxc1,115200 root=/dev/ram0 rw" setenv bootcmd 'sf probe 0; sf read${loadaddr} 0x240000 0xCD3CE2; sf read${fdt_addr} 0x1000000 0x14360; sf read${initrd_addr} 0x1080000 0xC04DB0; booti${loadaddr} ${initrd_addr} ${fdt_addr} ' saveenv ----------------------------------------------------------------------- 1. 使用 SD 卡 Wic 文件在分区(启动/根目录)上运行良好。 2.We genarated Two yocto images ==> 1.bitbake core-image-minimal-initramfs (generated initramfs.cpio.gz)这个 cpio.gx 使用这个 cmd mkimage-A arm-O linux-T ramdisk-d (来自 linux 用户指南)== > 2. 还从 yocto 中生成了使用 bitbake core-image-tiny 生成的微小 rootfs。 core-image-tiny-imx8mp-evk.tar.zst,该 tar 已解压缩到 SD 卡中的 EXT4 分区,并成功加载了微小的 rootfs。 3.但正如第二点所说,rootfs.img 也被放入了 SD 卡的 EXT4 根分区,但却无法加载 rootfs。 ------------------------------------------------------------------------------------------- 1. 这是启动 initramfs (rootfs.img) 的正确方法吗从 QSPI 直接连接 i.MX8M Plus EVK? ----------------------------------------------------------------------------------------------- 3. 有没有推荐的恩智浦参考镜像用于在 i.MX8MP(Linux 内核 (Image.gz)、设备上完全从 QSPI 启动内核和 initramfs树 (imx8mp-evk.dtb),rootfs.img)? 4.如何在 I.MX8MP 上从 QSPI 闪存加载 rootfs.img? Re: rootfs size for IMX8mini Yocto Linux <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> [email protected] 你好 以下是文档,描述了如何版本和使用分区。 分区用户手册 也许使用大尺寸图片会更容易些:-( 此致, 尤里。 Re: rootfs size for IMX8mini Yocto Linux <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,尤里、 谢谢您的帮助。但对于 此外,还可以使用parted之类的实用程序来版本小尺寸的 文件系统并调整部分大小。 如何做到这一点?我很难理解这一点。这是否意味着有一种名为"parted" 的工具可以做到这一点?还是别的什么? 我用"Yocto + parted 谷歌了一下,没有得到任何有用的信息。" 谢谢! Re: rootfs size for IMX8mini Yocto Linux <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好 无论如何,使用 Yocto 方法生成 Linux 系统需要 大量主机资源。如恩智浦Linux文档中所述,客户只需版本一次 文件系统,然后在没有Yocto环境的情况下重新编译U-启动和/ 或内核。此外,还可以使用parted之类的实用程序来构建小尺寸的 文件系统并调整部分大小。 此致, 尤里。
查看全文
S32K312:如何设置芯片的低电压检测 你好,NXT 团队   我只能找到 LVRBLPEN,描述如下   LVRBLP 在 LPM 期间启用位控制 VD D_HV_B 功率域上的低压 RESET 检测 (LVRBLP) 在 LPM 中处于活动状态还是非活动状态   然而,312 引脚上没有 VDD_HV_B,这让我很困惑   顺祝商祺! 赵 Re: S32K312:How to set low voltage detection for chips 你好,彼得 感谢您的回复 我能这样理解吗,低压检测只能在 LPM 模式下关闭? 如果不能关闭,能否配置这个阈值? 我目前正在测试RESET将在2.8V左右触发信号 顺祝商祺! 赵 Re: S32K312:How to set low voltage detection for chips 你好 请问我是否要禁用低电压RESET功能,我需要操作哪个寄存器? 您无法在此设备上禁用低压检测。它会导致意想不到的行为,最后肯定会RESET。 我也认为没有理由这样做,因为我们只保证 uC 的运行符合规范。 顺祝商祺! Peter Re: S32K312:How to set low voltage detection for chips 你好,彼得 感谢您的回复请 问我是否要禁用低电压RESET功能,我需要操作 哪个寄存器? 看来将LVRBLPEN寄存器设置为0将阻止MCU在LPM模式下RESET,在其他模式下应该控制 哪个寄存器? 顺祝商祺! 赵 Re: S32K312:How to set low voltage detection for chips 你好 LVRBLPEN 控制 VDD_HV_B 功能域的低电压 RESET 检测在电源模式 (LPM) 期间是否保持活动状态。 术语 VDD_HV_B 是指内部电源功能域,而不是物理引脚。它是 MCU 内部高压功能域的一部分,为某些外设和逻辑模块供电。 以下是 S32K312 的功率域: 和 S32K312 的耗材表: 该手册在 S32K3xx 系列中很常见。因此,通常所有功能都是笼统描述的,然后有必要注意哪些功能对您的设备衍生产品真正有效。 顺祝商祺! Peter Re: S32K312:How to set low voltage detection for chips 你好,彼得 感谢您的回复 我目前的检测结果是 该芯片将直接在2.8V左右RESET,这是预期的 但是 5.8V 无法RESET 此中断必须配对,并且必须在中断本身内调用RESET函数 请问高低压RESET的不同表现是否归因于芯片的特殊设计 顺祝商祺! 赵 Re: S32K312:How to set low voltage detection for chips 你好 我能这样理解吗,低压检测只能在 LPM 模式下关闭?如果无法将其关闭,我们可以配置这个阈值吗? 我目前正在测试RESET将在2.8V左右触发信号 不能配置其阈值。恩智浦工厂对其进行了微调。 请遵守数据表中规定的操作条件。 顺祝商祺! Peter Re: S32K312:How to set low voltage detection for chips 你好 即使禁用了 LVDIE,设备仍将 RESET 为相同的 2.8 V 阈值。 这种行为(没有 ISR 输入并在低电压跳闸点立即 RESET)是预期的操作,还是低压检测应该能够在 RESET 之前执行其中断处理程序? 这是意料之中的行为。我不清楚 S32K3 是如何实现的,但通常有两套 LVD。一种触发信号中断,另一种在电压下降时触发信号RESET。 这就是你的 2.8 伏电压。因为中断没有意义。因为你的内存、内核执行、寄存器设置可能已经损坏。你也不会因为故障而中断任何操作。 顺祝商祺! Peter Re: S32K312:How to set low voltage detection for chips 你好 请问高低压RESET的不同表现是否归因于芯片的特殊设计 我不明白这个问题。 您可以在低压检测或 HVD 支持的标志上配置中断: 但是 5.8V 无法RESET 但是为什么要RESET呢?高电压不会像低电压一样导致设备故障。 1* - 最高 6.0 伏,使用寿命 10 小时;最高 7.0 伏,使用寿命 60 秒。 甚至可以在 7V 电压下运行。 请遵守数据表的绝对最大额定值。 顺祝商祺! Peter Re: S32K312:How to set low voltage detection for chips 你好 Peter 谢谢你的回复,抱歉,我之前可能没有明确我的问题。 当我启用高压检测中断启用 (HVDIE) 时,调试器可以在中断服务例程的电压约为 5.8 V 时停止。 但是,当我启用低压检测中断启用 (LVDIE) 时,MCU 会立即 RESET 于 ≈ 2.8 V,我永远无法进入 ISR。 即使禁用了 LVDIE,设备仍会在相同的 2.8 V 阈值处触发 RESET。 这种行为(没有 ISR 输入并在低压检测低电压跳闸点立即 RESET)是预期的操作,还是低压检测应该能够在 RESET 之前执行其中断处理程序? 致以最崇高的敬意 Zhao Re: S32K312:How to set low voltage detection for chips 你好 对于 RESET 级别的低压检测(在我的测试中以 2.8 V 跳闸的那个),数据表中是否列出了任何允许我移动其阈值的用户可见的微调位、寄存器字段或出厂配置选项,还是固定、不可屏蔽的电压监测? 客户看不到。此外,每个芯片都有自己的调节器校准值,这些校准值在恩智浦工厂进行修整,以满足规范要求。 对于中断级低压检测(应该更早触发的那个,在 3 V—4 V 左右),手册是否提供了可编程的寄存器场(例如LVDVSEL、LVDSEL 或类似),让我选择其确切的跳变点,如果可以,允许的步长/分钟-最大范围是多少? S32K3 (PMC‑LVDSC1) 上的中断级低压检测不提供 LVDVSEL 或 LVDSEL 等可编程阈值场。其跳闸点在出厂前已校准,无法通过软件进行调整。 如果两个阈值都有记录,请注明寄存器名称和位域;如果其中一个是硬接线,请说明哪一个是固定的 两者都无法让用户访问。 两个跳闸点都是硬接线。 顺祝商祺! Peter Re: S32K312:How to set low voltage detection for chips 你好, 我将 VDD 从 5 V 慢慢降低, 我预计中断电平低压检测将会在更高的阈值(3 V,3.2 V,不管配置如何)下触发,这样我的 ISR 才能在电源变得临界之前运行,只有在导轨最终达到 2.8 V 硬复位跳闸点时,MCU 才会 RESET。 对于 RESET 级别的低压检测(在我的测试中以 2.8 V 跳闸的那个),数据表中是否列出了任何允许我移动其阈值的用户可见的微调位、寄存器字段或出厂配置选项,还是固定、不可屏蔽的电压监测? 对于中断级低压检测(应该更早触发的那个,在 3 V—4 V 左右),手册是否提供了可编程的寄存器场(例如LVDVSEL、LVDSEL 或类似),让我选择其确切的跳变点,如果可以,允许的步长/分钟-最大范围是多少? 如果两个阈值都有文件记录,请注明寄存器名称和位字段;如果其中一个是硬连线,请说明哪个是固定的 最佳问候, Zhao Re: S32K312:How to set low voltage detection for chips 您好 以HVD为例,电压调节至6V,根据MCAL配置项的描述,PMC中断会在HVDAF寄存器被置1时触发,我在触发POWER_IP_E_ISR_HIGH_VOLTAGE事件后在McuErrorIsrNotification回调函数中执行了复位操作,复位后看到HVDAF寄存器被清0,但不会再被置1,所以PMC中断只会触发一次,只执行了一次复位操作,请问这个现象是正常的吗 顺祝商祺 liao
查看全文
What could be the reason for the ABIST2_EXT self-test failure of the S32K3X4EVB-T172? I am using the S32K3X4EVB-T172 for development. I tried using Sbc_fs26_PerformAbist2Check to check: SBC_FS26_MOR_VPRE = 0 SBC_FS26_MOR_VCORE = 1 SBC_FS26_MOR_LDO1 = 2 SBC_FS26_MOR_LDO2 = 3 SBC_FS26_MOR_TRK1 = 4 SBC_FS26_MOR_TRK2 = 5 SBC_FS26_MOR_VREF = 6 SBC_FS26_MOR_VEXT = 7 However, I found that only Sbc_fs26_PerformAbist2Check(SBC_FS26_MOR_VEXT) makes ABIST2_PASS of FS_DIAG_SAFETY1 show as 0 / ABIST2 Fail or not executed, but I don't know why? Could the issue be due to an incompatible OTP configuration of the FS26 part number PFS2613AMDA2AD used in the S32K3X4EVB-T172, or is it a faulty FS26 IC? Re: What could be the reason for the ABIST2_EXT self-test failure of the S32K3X4EVB-T172? I confirmed on EVB that it's the OTP that's causing it, same as I said before. If the OTP turns off the VMON behind it, you don't need to configure the bit of the corresponding channel. Re: What could be the reason for the ABIST2_EXT self-test failure of the S32K3X4EVB-T172? Yes, when executing ABIST2 self-tests, only ABIST2_EXT fails and shows ABIST2_PASS = 0, which may be a failure or not executed, but I can't think of a reason, but all other ABIST2 self-tests work and show 1 for PASS = ABIST2_PASS.
查看全文
支持 S32K344 的 MATLAB 和 S32DS 您好,先生, 我正在尝试为 S32K344 制作一个简单的版本模型,并使用 S32 配置工具对其进行配置。但是,它并没有像预期的那样工作,我觉得我可能遗漏了一些步骤。 我已经查看了恩智浦网站上的论坛和视频,但仍然无法解决这个问题。 我附上了一些我的工作截图,供您审阅。 我恳请您就正确的程序或我可以遵循的任何文件提供指导。非常感谢你们的支持。 谢谢! Re: Support on MATLAB and S32DS for S32K344 你好 我检查了您所附的图片,似乎您正确地将 PTB26 配置为输出引脚。 您遇到的问题是,在应用程序刷新到板后,PTB26 的逻辑电平仍然很低。我说得对吗? 为了更好地理解这个问题,你能告诉我你正在使用的开发板的确切模型吗?您安装的是什么版本的 S32K3?您使用的是哪个版本的 MATLAB? 顺祝商祺! 索林-伊万尼德-班奇拉 Re: Support on MATLAB and S32DS for S32K344 你好 我昨天漏查了一件事。 除了引脚和 DIO 元器件外,您还需要将端口元器件配置为使用指定的引脚。由于您使用的是旧版本的工具箱,端口引脚不会根据引脚配置自动更新(这也是它能在 S32DS 中工作的原因)。 总而言之 1。打开配置项目并导航到 Port 元器件。 2.在Dio 端口容器中,添加一个新的端口引脚 ,其 MSCR 为所需引脚的 MSCR(在本例中,对于 PTB28,MSCR 为 60)。 如果这能解决你的问题,请告诉我。 顺祝商祺! 索林-伊万尼德-班奇拉 Re: Support on MATLAB and S32DS for S32K344 感谢您的回复。 所需的详细信息请参见下文: MATLAB 版本:R2022a 开发板:S32K344-172 S32K3 软件包版本:1.6 与此同时,我们还使用 PTA27 进行了测试,但观察到了相同的行为。这让我们怀疑在 DIO 配置和引脚配置之间可能缺少一个环节。我们恳请就正确的程序提供指导,以确保不遗漏任何配置步骤。 关于我前面提到的一点:当我说它可以使用"嵌入式代码时," ,我的意思是我们通过 S32DS 平台使用嵌入式 C 代码测试了相同的逻辑,在这种情况下,引脚的表现与预期完全一致。该问题仅在使用 MATLAB/Simulink 生成的代码时出现。 Re: Support on MATLAB and S32DS for S32K344 是的,现在 Dio 的问题已经解决,而且工作正常。 Re: Support on MATLAB and S32DS for S32K344 你好 我们刚刚发布了 S32K3 工具箱的新版本 (1.8.0)。如果你想升级到最新版本,请前往 MATLAB 中的插件管理器并搜索 nxp_support_package_s32K3。安装支持软件包后,你可以运行 GettingStarted.mlx 脚本,该脚本将指导你安装最新版本。 顺祝商祺! 索林-班奇拉 Re: Support on MATLAB and S32DS for S32K344 您好,感谢您的回复。 您提到的是旧版本的软件。为了便于配置,你能否与我们联系应该使用哪个版本? Re: Support on MATLAB and S32DS for S32K344 你好,@chaudharimohit73、 如果建议的解决方案解决了您的问题,请告诉我。 顺祝商祺! 索林-班奇拉 Re: Support on MATLAB and S32DS for S32K344 您好, DIO 配置成功后,我现在正试图配置 CAN。我想使用混合标准报文和扩展报文的 CAN。 能否请您指导我完成配置步骤?
查看全文
lwip HandsOn hi, I am using the s32K148 development board and use the Ethernet function. Can you please send the two projects to me also, they seem to be helpful for me also, lwip_s32k148_HandsOn_Server lwip_s32k148_HandsOn_Client Neither of these routines can be found online. My email is   [email protected] Looking forward to your reply.Thanks. Re: lwip HandsOn Hi @G_Z, I've sent you a private message. lwip HandsOn Could you please send the two projects to me. lwip_s32k148_HandsOn_Server lwip_s32k148_HandsOn_Client My email is [email protected] Re: lwip HandsOn Thanks! Re: lwip HandsOn Hi @lengrudie, I sent you a private message regarding these projects. Best regards, Julián.
查看全文
SPI总线概述(日语博客) 0. 目录 目录 什么是SPI? 1.1 历史和规格 1.2 控制器/目标或主节点/子节点(子节点) 物理/电气特性 2.1 信号线数量:信号名称 2.2 推挽式。不传输时处于高阻抗状态 2.3 时钟频率 协议 3.1 模式 3.2 数据传输 连接拓扑 4.1 并行连接和带片选功能的菊花链连接 参考资料 1. 什么是SPI? 1.1 历史和规格 SPI总线是由美国摩托罗拉公司(现为恩智浦半导体公司)提出的一种串行总线规范。该规范据称于20世纪80年代中期制定。SPI代表“串行外设接口”,最初开发为一种用于连接处理器和外围芯片的四线串行总线。三线SPI总线也作为衍生规范存在,但最初的四线系统才是基础。 SPI 通信方法有多种变体,例如信号极性和数据同步时序设置,因此在使用时需要注意这一点。 与 I²C 类似,SPI 也用于在芯片之间交换数据,但两者各有优缺点,如[表 1] 所示。 SPI 适用于需要更快数据传输的应用。这是由于其电气规格不同:I²C 使用开漏驱动信号,而 SPI 使用推挽驱动信号,因此更容易实现更高的传输速度。此外,在数据传输速度方面,SPI 的特点是能够执行全双工通信,从而允许同时进行发送和接收。 另一方面,SPI也存在一些缺点。传输数据长度和时钟极性是针对每个目标设备单独指定的,这使得混合连接多种类型的设备变得困难。此外,连接多个相同类型的设备时,每个设备都需要一个片选信号,这会增加信号线的数量;而且,在级联设备时,数据传输长度也必须进行调整。   I²C SPI 行数 2 数据来源:SDA 时钟:SCL 4 数据:SDO、SDI(MOSI、MISO) 时钟:SCLK 芯片选择:CS 速度 约400kHz 根据模式不同,频率分别为 1MHz、3.4MHz 或 5MHz。 几百千赫兹到几十兆赫兹 沟通方向 双向半双工 双向全双工 连接方式 多点(并行) 多个控制器与多个目标 并行或菊花链式单控制器对多个目标 信号驱动 明渠 (需要上拉电阻) 推拉 表1:I²C和SPI的比较   1.2 控制器/目标或主节点/子节点(子节点) 在SPI协议中,数据传输也是以主从关系进行的。过去常用“主设备”和“从设备”这两个术语,但现在已改为“控制器”和“目标设备”。 它们也被称为主节点/子节点(简称“子节点”),保留了之前角色名称中的首字母“M/S”。从现在开始,本博客将特意使用“主节点/子节点”(简称“子节点”)这一术语。 在SPI协议中,不能存在多个主设备。通信始终发生在单个主设备和一个或多个目标设备之间。 2. 物理/电气特性 2.1 信号线数量:信号名称 SPI总线是一种四线同步串行接口。同步串行接口是一种利用其中一条信号线作为时钟信号,与时钟信号同步发送和接收数据的方法。 数据信号线有两条。一条用于主设备到子设备的数据传输,另一条用于子设备到主设备的数据传输。还有一条是片选信号。SPI 协议本身没有指定传输目标地址的方法。因此,片选信号用于指定目标设备[图 1]。 信号名称可能有多种叫法。以下是OSHWA使用的信号名称: SDO :数据输出 SDI :数据输入 SCK :串行时钟 CS :芯片选择:CS 在上述示例中,SDO 和 SDI 的名称是根据每个芯片上的数据输入/输出方向来命名的。在这种情况下,引脚名称很明确,但难以区分主输出和子输出之间的信号方向。 相反,电路图等中通常使用以下信号名称。本博客将遵循这些术语。 MOSI :主输出到子输出的数据(主输出 子输入) MISO :从子系统到主系统的数据(主系统输入/子系统输出) SCLK :串行时钟 CS :芯片选择:CS 在这些信号中,只有MISO信号是从子系统发往主系统的信号,其余信号都是从主系统发往子系统的信号。通信过程中信号方向保持不变。 图 1:控制器和目标。信号名称 例如,当通信只是单向进行时,为了节省信号数量,可以省略其中一条数据线。 还有一些目标设备支持时分复用传输和接收,从而只需使用一条数据线。在这种情况下,在主侧,MOSI/MISO 通过电阻短路以合并信号。 2.2 推挽式。不传输时处于高阻抗状态 信号以推挽方式输出。当没有数据传输时,MOSI 和 MISO 输出端处于高阻抗状态。这样做是为了防止多个子节点并联连接时相互干扰。 信号电压由子节点设备决定,因此必须进行相应的调整。如果主节点和子节点之间的电压不同,则需要进行电压转换。 2.3 时钟频率 关于时钟频率没有具体规定。通常使用数百 kHz 到数 MHz 范围内的时钟频率,上限由子节点器件的规格决定。需要高速数据传输的应用可能会使用数十 MHz 的时钟频率。此外,在存储器件和其他应用中,也有使用多条 MOSI 和 MISO 数据线来提高传输速率的例子。 3. 协议 数据传输协议没有严格的规定,每个子节点设备都可以自由选择协议。主微控制器具有支持各种子节点设备的设置。 基本的传输过程始于将连接到目标子节点的 CS 信号置位。当 CS 信号置空时,传输结束。CS 信号通过低电平和高电平信号置位和置空,但极性由子节点设备的规格决定。许多设备使用最高有效位 (MSB) 在前进行数据位排序,但也存在例外情况。此外,传输单元的位数也没有具体规定。我见过一些解释说传输单元是 2 到 16 位,但这并不准确,因为有些子节点使用更大的位长度作为传输单元(例如,64 位)。 3.1 模式 SPI 具有称为“模式”的设置,指的是时钟极性和边沿选择的组合,共有四种模式,每种模式有两种设置[图 2]。 时钟极性是一个名为CPOL 的设置,它决定在没有数据传输时 SCLK 是低电平还是高电平。在主电路中,将其设置为 0 会将其设置为低电平,设置为 1 则会将其设置为高电平。边沿选择(相位)称为CPHA 。此设置决定数据是在第一个时钟边沿还是第二个时钟边沿被锁存(接收)。设置为 0 选择第一个边沿,设置为 1 选择第二个边沿。CPOL 和 CPHA 有时可以组合使用,以表示模式 0 到 3 [表 2]。 另外,请注意,还有一些子节点的片选极性相反。 图 2:模式(CPOL、CPHA)     中央警察 CPHA 模式=0 0 0 模式=1 0 1 模式=2 1 0 模式=3 1 1 表 2:模式和 CPOL、CPHA 什么是“锁存数据的边缘”? 数据的发送和接收与时钟同步,但数据会在时钟的上升沿或下降沿发生变化。图 3 显示了数据在下降沿发生变化的示例。主节点的 MOSI 输出和子节点的 MISO 输出会随着主节点 SCLK 输出的下降沿而变化。下一个数据会在下一个下降沿发生变化,但在此之前,状态保持稳定。时钟的上升沿恰好出现在这段时间内,因此数据会根据这个时间点相互捕获。这就是所谓的“锁存边沿”。 图 3:数据(MOSI/MISO)和时钟(SCLK)同步 3.2 数据传输 片选信号置位后,数据会与时钟同步发送和接收。当子节点接收到自身的片选信号置位时,它会与时钟同步接收和输出数据。 图 4 展示了一个 SPI 数据传输示例。数据根据时钟信号进行交换,同时 CS 信号保持有效。熟悉逻辑电路的人会发现,这是通过一个简单的移位寄存器电路实现的。 图 4:SPI 传输示例   4. 连接拓扑 4.1 并行连接和带片选功能的菊花链连接 如图 5 所示,多个子节点连接在一起。每个子节点都提供一个片选信号,通信通过每个信号指定发送方和接收方来实现。或者,为了减少片选信号的数量,可以使用菊花链连接,并将子节点视为一个具有扩展比特长度的单个子节点来进行通信(如图 6 所示)。 如前所述,将多种类型的子节点连接到同一SPI总线时必须格外小心。正如前文所述,它们的“模式”、片选极性和数据位长度可能不同。因此,每次与每个子节点通信时,您可能都需要切换设置或在硬件中进行调整。 图 5:并联连接   图 6:菊花链连接 5. 参考资料 OSHWA 角色和信号名称[英文] 关于“SPI”的维基百科页面:本博客中的信号名称和主节点/子节点名称均基于此描述。 Interface 2024 年 3 月刊(CQ Publishing) :专题文章“从零开始的串行通信 [使用 Pico 进行 UART/I2C/SPI 通信]” NXP 系统管理 I²C、I3C、SPI 选择器指南 NXP社区博客:I3C:下一代串行总线 NXP社区博客:I²C总线概述 [本文最初发表于《Interface》杂志2024年3月刊(CQ Publishing出版),标题为“从零开始构建I2C和SPI ④……SPI通信标准”,第71-73页。本文摘录并修订了其中解释通信规范的部分。] 更改历史记录: 2025年2月3日:第一版 2025-02-25:在“5. 参考资料”部分添加了“NXP 系统管理 I²C、I3C、SPI 选择器指南”的链接。 2025-05-01:更正了目录(删除了项目),更正了第 2.2 节中的项目名称。 2026-07-24:修复了“2.1 信号线数量:信号名称”和“5. 参考资料”中指向“OSHWA 角色名称和信号名称”的损坏链接。 ========================= 我们目前无法回复此帖子“评论”部分的评论。 对于由此造成的不便,我们深表歉意。如有任何疑问,请参阅“ NXP技术问题-如何联系我们(日语博客) ”。 (如果您已经是恩智浦的分销商或与恩智浦有合作关系,您可以直接询问负责人。) SPI总线用于微控制器/处理器与外围设备之间的通信。 虽然这种串行总线应用非常广泛,但我还是想借此机会简要介绍一下它的起源。 通信标准 界面 日本博客
查看全文
揭开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
查看全文
S32G VNP RDB2 Rev.E 上的 LLCE CAN 传输问题 尊敬的恩智浦社区成员: 当我尝试通过 S32G2 LLCE 模块的 BCAN0 发送 CAN 帧时,我遇到了一个问题。我正在使用演示板 S32G-VNP-RDB2 Rev.E。 我已经通过模拟器看到,当我弹出 BLROUT FIFO 以获取 Tx 传输表的索引时,一切都运行良好,之后我将消息填充到共享内存中,然后通过 BLRIN FIFO 发回索引。 问题是 CAN 总线上没有任何反应。因此,弹出索引 15 后,BLROUT 返回 0xFFFFFFFF。 为了启用 BCAN,我们需要设置什么配置吗? 仅供参考,固件对我发送的命令响应良好,并且我已正确配置 SIUL2 来配置 LLCE_CAN_0 的 Tx 和 Rx 引脚。 我们还观察到,当我们驱动 LLCE_CAN0_TXD 信号时,BCAN0(U17)的收发器并没有改变 LLCECAN0H 和 LLCECAN0L 的逻辑电平。我们还检查了信号LLCE_CAN01_EN处于高逻辑电平。 感谢您的支持。 顺祝商祺! 回复:@Re: S32G VNP RDB2 Rev.E 上的 LLCE CAN 传输问题 是的,我错了,我实际上有2个节点,第二个是CAN日志工具。 此致,
查看全文