Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
MVR5510 OTPプログラミング 現在、MVR5510AMDA0ESのOTPプログラミングのテストを実施しています。テストモードに入りました。MAIN_TM_STATUS=0X42、FS_STATE_REG=0XA001です。現在、エミュレーションは正常に動作しており、読み取られたOTP値も正しいです。しかし、チップの電源を切ってからOTPの値を再度読み取ると、OTPが完全に空になっていることがわかりました。エミュレーションが正常なときにOTPに書き込んでプログラムを完了するにはどうすればいいですか?現在、VSUP1/2=12V、VDDOTP=8.5V、POWERON1=5V、POWERON2=3.3V なお、OTPのプログラミングには、純正の工場出荷時ツールではなく、I2Cプロトコルを使用しています。OTPに実際に書き込むために実行すべき追加コマンドを教えていただけますか? Re: MVR5510 OTP programming よろしいです。アメリカの同僚にはNXPに連絡するようお願いします。彼らはNXPとのNDAを担当しています。必要であれば、最新情報をお伝えします。 Re: MVR5510 OTP programming 御社はプログラミング会社様のようですね。もしそうであれば、弊社のプログラミングパートナーを希望される第三者企業は、認証を受ける必要があります。ビジネス交渉についてはNXPの現地代理店にご連絡ください。そのため、プログラミングプログラムを直接お渡しすることはできません。 Re: MVR5510 OTP programming 既にお伝えした通り、OTPは多くの機密ルールが含まれており、一般には公開されていないため、独自のボードでのプログラミングはサポートしていません。独自のOTPシステムを作成したい場合は、まず弊社指定のボードを使用する必要があります。通常の状態では、OTPレジスタの値を正しく読み取ることはできません。ご理解いただけましたでしょうか? Re: MVR5510 OTP programming ご返信ありがとうございます。しかし、私にとっては何の役にも立ちません。技術的な問題を解決する必要があるのに、あなたは私に営業提案書を渡しました。上司と相談してみます。 Re: MVR5510 OTP programming 弊社では、お客様ご自身で作成されたボードを使用したOTPテストはサポートしておりません。大量注文の場合は、OTPテストを第三者に委託することも可能です。少量注文の場合、またはお客様ご自身でOTPテストを実施される場合は、以下のボードをご購入いただくことをお勧めします。 SBCおよびPMIC製品向けOTPプログラミングボード|NXPセミコンダクターズ guoweisun_0-1787018585422.pngguoweisun_0-1787018585422.png guoweisun_1-1787018601483.pngguoweisun_1-1787018601483.png この2つの組み合わせは、コストパフォーマンスに優れています。
記事全体を表示
如何在定制的 i.MX95 PCIe 平台上对全新的 Ara240 模块进行编程? 您好,NXP团队, 我们使用定制的基于 i.MX95 的板(不是 FRDM-i.MX95 EVK),并通过 PCIe M-Key 接口连接了Ara240 M.2 模块。 在查阅了 Ara240 Runtime SDK 文档后,我们了解了正常的运行时流程,即在系统启动期间,通过 PCIe 枚举 Ara240 设备,并由 Runtime SDK 进行初始化。 我们希望了解与制造和生产支持相关的首次模块配置/编程要求。 请您澄清以下问题: Ara240 M.2 模块出厂时是否已预先编程,还是首次使用前需要进行初始固件刷新? 如果模块是全新的、空白的,或者板载闪存损坏,建议的恢复或编程步骤是什么? 是否存在任何固件或软件组件,只需在生产过程中进行一次编程? Ara240 运行时 SDK 在每次启动时会自动加载或初始化哪些元器件? 是否有针对使用定制 i.MX95 硬件平台的客户的生产、配置或恢复指南? 与 FRDM-i.MX95 参考平台相比,在定制板上使用 Ara240 是否需要任何额外的步骤? 任何与首次配置、固件恢复或生产部署相关的指导或文档都将不胜感激。 Re: How to Program a Fresh Ara240 Module on a Custom i.MX95 PCIe Platform? Ara240 M.2 模块通常出厂时已预先编程,运行时 SDK 会在启动时处理初始化,但如果板载闪存为空或已损坏,则恢复需要使用 SDK 工具和 NXP 制造指南中概述的配置步骤重新刷写固件。通常情况下,生产过程中只会对基础固件进行一次编程,而运行时组件会在每次启动时自动加载。对于定制的 i.MX95 板,配置流程与 FRDM-i.MX95 相同,但您可能需要调整板特定的 PCIe 和电源时序。NXP 官方提供的配置和恢复文档是生产支持的推荐参考资料。
記事全体を表示
NXP 代码签名工具 (CST) 符合 FIPS 140-3 3 级标准 NXP团队您好, 我们目前使用 NXP 代码签名工具 (CST) 来实现安全启动,并生成/管理用于映像签名的密钥和证书。 作为产品网络安全要求的一部分,我们需要了解基于 CST 的代码签名过程是否符合 FIPS 140-3 3 级标准。 请您澄清以下问题: 1.NXP 代码签名工具 (CST) 本身是否符合 FIPS 140-3 标准或经过验证,特别是符合 FIPS 140-3 3 级要求? 如果符合要求,能否请您提供相关的认证、验证详情或NXP官方文件以证明其合规性? 谢谢 Re: FIPS 140-3 Level 3 Compliance of NXP Code Signing Tool (CST) CST 被记录为 NXP 代码签名工具,而不是 FIPS 140-3 3 级验证的加密模块。
記事全体を表示
FRDM-A-S32K358 引脚图详情 大家好, 我昨天刚购买了 FRDM-A-S32K358 开发套件。正在查找引脚定义详情。 我正在寻找类似文件 S32K144_pinout.png。感谢您的快速回复。 谢谢并致以诚挚的问候 斯里拉姆 Re: FRDM-A-S32K358 Pinout Details 你好VaneB 谢谢你提供的链接,这很有帮助。 Re: FRDM-A-S32K358 Pinout Details 你好@SriramEmbd FRDM-A-S32K358 没有对应的图像。但是,电路板原理图包含一个专门的页面,显示了 Arduino 接头的引脚分配。 原理图可在FRDM-A-S32K358 Design Files.zip软件包中找到。 BR,VaneB
記事全体を表示
Wi-FiチップセットMCU制御 こんにちは、みんな、 AP+STA機能を備えたWi-Fiモジュールを探していました。例えば、NXP、Microchip、Infineonなどのモジュールを見つけました。しかし、ほとんどのモジュールはPCIe経由でWiFiインターフェースを使えず、高度なOSでしか対応していません。 しかし、InfineonのAIROC CYW55X(シリーズ)というMCU+WiFiモジュールのセットを見つけました。 こういったタイプのモジュールの統合や制御に関する経験はありますか?もしそうなら、これまでに使っていて外部MCUとうまく統合できた他のモジュールを教えてもらえますか?私の意図は、データをマイクロコントローラにオフロードするのではなく、例えばメッシュやAPの機能を制御することです。 Wi-Fiモジュールを制御しながら基本的なAIモデルに対して推論を行うために、MCU(例えばSTM)を使っています。 ありがとう、みんな Re: Wi-Fi Chipset MCU Control こんにちは、 ホストMCUとしてSTM32を使う予定なら、Wi-Fiデバイスとして IW612 か IW416 を使うことをおすすめします。その場合、製品ウェブページのソフトウェアセクションにあるSTM32 CMSIS-Packドライバを使用できます。 これらのデバイスは、Wi-FiにはSDIOを、BluetoothにはUARTを使用します。IW612の場合、もし802.15.4を使う予定なら、ホストインターフェースはSPIです。 もう一つの選択肢としては 、RW612 をネットワークコプロセッサ(NCP)として使用することです。RW612はワイヤレスMCUであるため、外部MCUがアプリケーションに集中する間、無線接続スタックを処理できます。 よろしくお願いいたします。 ダニエル Re: Wi-Fi Chipset MCU Control ダニエルが述べたように、RW612は良い解決策となるでしょう。 3-ラジオ対応で、ネットワーク対応アプリケーションの作成に理想的なイーサネットMACも内蔵しています。 RW612はAP+STA対応が可能です。つまり、そのMCUはネットワーク制御とAI機能の両方に使えます。 Web UIと組み込みOTAを備えたすぐに構築できるプロジェクトをお探しなら、 https://mongoose.ws/wizard/をご覧ください。 プロジェクトを開始し、空のディレクトリを選択し、ボードターゲットとしてFRDM-RW612を選択し、WiFiオプションを設定し、「生成」をクリックし、Xpressoでプロジェクトを開き、ビルドとフラッシュを実行し、シリアルコンソールを接続すれば、すぐに動作させることができます。 具体的に何を作っているのか、もう少し詳しく教えてもらえますか?
記事全体を表示
FRDM-A-S32K358 Pinout Details Hello Community,  I just purchased the FRDM-A-S32K358 Development kit yesterday. looking for the Pin out details. I am looking for similar file S32K144_pinout.png. Appreciate your quick response Thanks and Regards Sriram Re: FRDM-A-S32K358 Pinout Details Hello VaneB Thank you for the link, this helps a lot. Re: FRDM-A-S32K358 Pinout Details Hi @SriramEmbd  There is no equivalent image available for the FRDM-A-S32K358. However, the board schematic includes a dedicated page that shows the pin assignments for the Arduino headers. The schematic is available in the FRDM-A-S32K358 Design Files.zip package. BR, VaneB
記事全体を表示
FIPS 140-3 Level 3 Compliance of NXP Code Signing Tool (CST) Hi NXP Team, We are currently using the NXP Code Signing Tool (CST) for secure boot implementation and for generating/managing the keys and certificates used for image signing. As part of our product security requirements, we need to understand the FIPS 140-3 Level 3 compliance of the CST-based code-signing process. Could you please clarify the following: 1. Is the NXP Code Signing Tool (CST) itself FIPS 140-3 compliant or validated, specifically for FIPS 140-3 Level 3 requirements? If yes, could you please share the relevant certification, validation details, or official NXP documentation confirming the compliance? Thanks Re: FIPS 140-3 Level 3 Compliance of NXP Code Signing Tool (CST) CST is documented as an NXP code-signing tool, not as a FIPS 140-3 Level 3 validated cryptographic module.
記事全体を表示
FRDM-A-S32K358のピン配置の詳細 コミュニティの皆様、こんにちは。 昨日、FRDM-A-S32K358開発キットを購入しました。ピン配置の詳細を探しています。 S32K144_pinout.png という類似ファイルを探しています。迅速なご対応に感謝いたします。 よろしくお願いいたします。 スリラム Re: FRDM-A-S32K358 Pinout Details こんにちは、 VaneBさん リンクをありがとうございます。大変参考になりました。 Re: FRDM-A-S32K358 Pinout Details こんにちは、 @SriramEmbdさん FRDM-A-S32K358に対応する画像は存在しません。ただし、基板回路図にはArduinoヘッダーのピン割り当てを示す専用ページが含まれています。 回路図は FRDM-A-S32K358設計Files.zip パッケージで入手可能です。 BR、VaneB
記事全体を表示
Wi-Fi Chipset MCU Control Hello everyone, I was browsing for some wifi modules with AP+STA functionalities. I found some modules from NXP, Microchip, and Infineon for example. However, most of the modules are only enabling wifi interface through PCIe and with advanced OS. However, I found a set of MCU+Wifi module from infineon called AIROC CYW55X (series). Do you have any experience integrating and controlling these type of modules? If so, can you share different modules that you have used before and were able successful to integrate with an external MCU? My intention is not to offload data to the microcontroller, only to control for example the mesh and AP capabilities. I want to use a MCU (STM for example) to perform some inference on some basic AI models while controlling the wifi module. Thanks guys Re: Wi-Fi Chipset MCU Control Hi, If you are planning to use an STM32 as the host MCU, I would recommend using an IW612 or IW416 as the Wi-Fi device. In that case, you can use the STM32 CMSIS-Pack drivers available in the Software section of the product webpage. These devices use SDIO for Wi‑Fi and UART for Bluetooth. For the IW612, if you also plan to use 802.15.4, the host interface is SPI. Another option is to use an RW612 as a Network Co-Processor (NCP). Since the RW612 is a wireless MCU, it can handle the wireless connectivity stack while the external MCU focuses on the application. Regards, Daniel Re: Wi-Fi Chipset MCU Control As Daniel mentioned, RW612 would be a good solition. It is  3-radio, and also has a built-in Ethernet MAC - ideal for making network enabled applications. RW612 can do AP+STA. So you can use that MCU for both network-control and your AI functionality. If you're looking for a ready-to-build project with Web UI and built-in OTA, take a look at https://mongoose.ws/wizard/ Start a project, choose empty directory, choose FRDM-RW612 as a board target,  set WiFi options, click "generate" , open project  in Xpresso, build & flash, attach your serial console, and you'll have it running in a minute. Could you elaborate more on what exactly you're building?
記事全体を表示
Wi-Fi芯片组MCU控制 大家好, 我正在寻找一些具有 AP+STA 功能的 Wi-Fi 模块。例如,我找到了一些来自恩智浦半导体(NXP)、微芯科技(Microchip)和英飞凌科技(Infineon)的模块。然而,大多数模块仅通过 PCIe 和高级操作系统启用 wifi 接口。 不过,我找到了一套来自英飞凌的名为 AIROC CYW55X(系列)的 MCU+Wifi 模块。 您在集成和控制这类模块方面有经验吗?如果可以的话,您能否分享一下您之前使用过并成功与外部MCU集成的不同模块?我的目的不是将数据卸载到微控制器,而只是为了控制例如网状网络和接入点功能。 我想使用 MCU(例如 STM)对一些基本的 AI 模型进行一些推理,同时控制 wifi 模块。 谢谢大家 Re: Wi-Fi Chipset MCU Control 您好, 如果您计划使用 STM32 作为主机 MCU,我建议使用IW612或IW416作为 Wi-Fi 设备。在这种情况下,您可以使用产品网页软件部分提供的 STM32 CMSIS-Pack 驱动程序。 这些设备使用 SDIO 进行 Wi-Fi 通信,使用 UART 进行蓝牙通信。对于 IW612,如果您还计划使用 802.15.4,则主机接口为 SPI。 另一种选择是将RW612用作网络协处理器 (NCP)。由于 RW612 是一款无线 MCU,它可以处理无线连接协议栈,而外部 MCU 则专注于应用程序。 问候, 丹尼尔 Re: Wi-Fi Chipset MCU Control 正如丹尼尔提到的,RW612 会是一个不错的解决方案。 它有 3 个无线电模块,并且内置以太网 MAC——非常适合用于开发网络应用。 RW612 可以实现 AP+STA 功能。因此,您可以将该 MCU 用于网络控制和 AI 功能。 如果您正在寻找一个带有 Web UI 和内置 OTA 功能的现成项目,请查看https://mongoose.ws/wizard/ 启动一个项目,选择空目录,选择 FRDM-RW612 作为开发板目标,设置 WiFi 选项,点击“生成”,在 Xpresso 中打开项目,构建并烧录,连接串口控制台,一分钟内即可运行。 您能否详细说明一下您具体在建造什么?
記事全体を表示
S32K344 FlexIO I2C DMA Hello, I have some questions regarding the FlexIO I2C DMA  on S32K344, and I would appreciate your insights. 1. When using FlexIO to emulate I2C, the Tx length is set to Size + 1. Is this because "The transmit shifter loads one additional word on the last falling edge of the SCL pin"? 1.png1.png1.png1.png 2.png2.png2.png2.png 2. When using DMA for sending data, the MAJORLOOP_COUNT is also set to Size + 1. Is this for the same reason? When using DMA, all transmitted data comes from Master->TxData. When calling Flexio_I2c_Ip_MasterSendData, should the TxBuff length be Size + 1, and should the last byte be 0xFF or 0x00? 3.png3.png3.png3.png 3. For receiving data, the MAJORLOOP_COUNT is set to Size – 1. Why is this? 4. I tested this on the S32K344 and found that when using DMA for FlexIO I2C receiving data, the received data is one byte less than expected. Observing with an oscilloscope, the clock signal for the last byte shows only about five or six bits of waveform. The same test on the S32K312 works fine. S32K344 S32DS3.6.4 RTD700   BR, Jason Re: S32K344 FlexIO I2C DMA Hi @Jason07  As FlexIO is not a dedicated I2C peripheral, its implementation requires additional internal steps to complete the I2C bus sequence correctly. The Size + 1U in the transmission is related to the final shifter load required by FlexIO to complete the I2C frame sequence. This additional transfer does not represent an extra payload byte. Instead, it is used internally by the FlexIO hardware to generate the final clock pulses and correctly transition the bus to the end-of-transfer state. The Size - 1U in the reception is necessary because the last received byte is handled separately. This allows the driver to generate the required NACK and STOP conditions at the correct time. Also, take into consideration that when using DMA transfer mode, data transfers may be affected by cache coherency issues. To avoid potential problems when D-Cache is enabled, ensure that the buffers used as the source and destination of the DMA TCD are allocated in a non-cacheable memory region. There is no need to increase the TRANSFER_SIZE parameter when calling the Flexio_I2c_Ip_MasterReceiveData() function. The driver already handles the required internal adjustments for the receive sequence. By last, while reviewing your configuration, I noticed that the same DMA interrupt callback has been assigned to both DMA channels. According to the descriptions provided in Flexio_I2c_Ip.c, different callbacks should be used for the transmit and receive: FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter0() for the FlexIO Channel 0/1 TX FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter1() for the FlexIO Channel 0/1 RX BR,VaneB Re: S32K344 FlexIO I2C DMA Hi@VaneB I found the code where “the last received byte is handled separately”. However, I still have a question regarding sending. When using interrupt‑driven sending, the length is set to Size + 1. During sending, the code checks whether it is the last byte; if so, it sends 0xFF or 0x00. The actual sent data length is still Size. But when using DMA for sending, the DMA copies Size + 1 bytes from the send buffer, and in the Flexio_I2c_Ip_MasterEndDmaTransfer function, it also fills 0xFF or 0x00 into the ShiftBuffer. This means the actual sent data length is Size + 1, not Size. Why? 1.png1.png1.png 2.png2.png2.png I modified all occurrences of TRANSFER_SIZE + 1 in the attached project to TRANSFER_SIZE (8), and also modified the DMA interrupt callback as described. I also disabled the D‑Cache. When using DMA for FlexIO I2C sending, I observed with an oscilloscope that at -Os optimization level, the clock signal is normal with only 8 bytes. However, at -O0 optimization level, the clock for the first 8 bytes is normal, but after the ACK is sent, the stop signal is not generated as expected; instead, an extra 1‑bit clock pulse appears. 3.jpg3.jpg3.jpg For FlexIO I2C receiving via DMA, LPI2C0 is used as a slave to send 8 bytes (0x10–0x17). At -O0 optimization level, the clock signal becomes abnormal during the transmission of the 7th byte, and the FlexIO receive buffer contains only 6 bytes (0x10–0x15). 4.jpg4.jpg4.jpg At -Os optimization level, the clock signal becomes abnormal during the transmission of the 8th byte, and the FlexIO receive buffer contains only 7 bytes (0x10–0x16). 5.jpg5.jpg5.jpg All of the above issues are reliably reproducible. Re: S32K344 FlexIO I2C DMA Hi @Jason07  I think the key point is that I2C uses open-drain signaling: Logical 0 actively pulls SDA low. Logical 1 releases SDA, allowing the pull-up resistor to drive the line high. Since FlexIO is a programmable peripheral rather than a dedicated I2C controller, the driver must generate I2C protocol events by controlling the bit patterns loaded into the shifters. Because of this, the final 0x00 and 0xFF values should not necessarily be considered additional payload bytes. Instead, they are used to place SDA in the correct state to complete the rotine. When Master->SendStop == TRUE, the driver loads 0x00, forcing SDA low. Once the shifter finishes and FlexIO releases the line, the pull-up brings SDA high while SCL is already high, creating the required STOP condition (SDA: LOW → HIGH while SCL is HIGH). When Master->SendStop == FALSE, the driver loads 0xFF, which keeps SDA released. The pull-up keeps SDA high, preventing a STOP condition and leaving the bus ready for a Repeated START (SDA: HIGH → LOW while SCL is HIGH). Also, I recommend enabling the DMA Optimize mode. An example is available in the thread: Example S32K344 FlexIO I2C with DMA Optimize option S32DS 3.6.0 RTD 6.0.0. By last, Are working with a custom board or an EVB/FRDM?
記事全体を表示
Duplicate variable declarations I am working on a new project using the LPC824 board and the downloaded lpcxpresso824max_new_project. It built, downloaded and debugged without problems. Initially I am trying to implement a 3-digit 7-segment LED display. I added declarations in peripherals.h and an update routine in main.c. When I build I get two errors - duplicated variable declarations. If I comment them out I get a message "undeclared variable". If I change the name of the variable I get the same duplication error. I have searched every source file in the project and cannot find any duplicates. One of the error messages is: - /Applications/MCUXpressoIDE_25.6.136/ide/plugins/com.nxp.mcuxpresso.tools.macosx_25.6.0.202501151204/tools/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: ./source/peripherals.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: multiple definition of `CA_LUT'; ./source/main.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: first defined here Re: Duplicate variable declarations Hello, Could you please share your peripherals.h file and peripherals.c? Or describe how did you add the declaration for CA_LUT? Could you please share how did you use CA_LUT in main.c? Kindly share all the files names in which do you have [#include "peripherals.h"], are those files headers included in main.c? Best Regards, Luis Re: Duplicate variable declarations Hi, It could be that, as you define CA_LUT in peripherals.h both the main and peripherals.c call that file giving the duplicate error "multiple definition". Could you help us try to add the declaration of CA_LUT only in peripherals.c instead of peripherals.h, and retry; Do you have more declarations as this in peripherals.h? and they have the same error? If you have them please also move them to peripherals.c Consider your 7 segments as an external peripheral device. Let me know your findings Best Regards Re: Duplicate variable declarations This is the entry in peripherals.h for both errors // Lookup table for digits 0-9 (0 = ON, 1 = OFF) const uint32_t CA_LUT[10] = { //0: A, B, C, D, E, F are ON; G, DP are OFF ~((1< // 1: B, C are ON ~((1< // 2: A, B, D, E, G are ON ~((1< // 3: A, B, C, D, G are ON ~((1< // 4: B, C, F, G are ON ~((1< // 5: A, C, D, F, G are ON ~((1< // 6: A, C, D, E, F, G are ON ~((1< // 7: A, B, C are ON ~((1< // 8: All segments ON (A-G) ~((1< // 9: A, B, C, D, F, G are ON ~((1< }; // Global variables holding the current numbers to be printed on Digits 1, 2, and 3 volatile uint8_t display_buffer[3] = {1, 2, 3}; // E.g., displays "123" Both errors are used in main.c :- uint8_t numeric_value = display_buffer[current_digit]; uint32_t segment_pattern = CA_LUT[numeric_value]; #include "peripherals.h" appears only in the following files: - main.c, peripherals.c,  AS I mentioned I am coming over from CodeWarrior, so my knowledge of MCUX is probably dangerous (?????). I'm not sure whether a 7-segment display is a peripheral device (peripherals.h and c) or a declaration for a number of pins (pin_mux.h and c), but that can be sorted out later.
記事全体を表示
重复的变量声明 我正在使用 LPC824 板和下载的 lpcxpresso824max_new_project 开发一个新项目。编译、下载和调试过程均未出现问题。我最初尝试实现一个3位数的7段LED显示屏。我在 peripherals.h 中添加了声明。以及 main.c 中的更新例程。编译时出现两个错误——重复的变量声明。如果我把它们注释掉,就会收到“未声明的变量”消息。如果我更改变量名称,也会出现同样的重复错误。我已经搜索了项目中的每个源文件,没有找到任何重复项。其中一条错误信息是:- /Applications/MCUXpressoIDE_25.6.136/ide/plugins/com.nxp.mcuxpresso.tools.macosx_25.6.0.202501151204/tools/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: ./source/peripherals.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: 多个定义“CA_LUT”; ./source/main.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/peripherals.h:57: 首次在此处定义 Re: Duplicate variable declarations 你好, 请问您能否分享一下您的 peripherals.h 文件?文件和外设.c?或者描述一下你是如何添加 CA_LUT 声明的? 请问您能否分享一下在 main.c 文件中是如何使用 CA_LUT 的? 请分享所有包含 [#include "peripherals.h"] 的文件名称,这些头文件是否包含在 main.c 中? 此致敬礼,路易斯 Re: Duplicate variable declarations 这是 peripherals.h 中的条目两种错误 // 数字 0-9 的查找表(0 = 开,1 = 关) const uint32_t CA_LUT[10] = { //0:A、B、C、D、E、F 开启;G、DP 关闭 ~((1< // 1:B、C 均开启 ~((1< // 2:A、B、D、E、G 均开启 ~((1< // 3:A、B、C、D、G 均开启 ~((1< // 4:B、C、F、G 均开启 ~((1< // 5:A、C、D、F、G 开启 ~((1< // 6:A、C、D、E、F、G 开启 ~((1< // 7:A、B、C 均开启 ~((1< // 8:所有段开启(AG) ~((1< // 9:A、B、C、D、F、G 均开启 ~((1< }; // 全局变量,用于保存要打印在第 1、2 和 3 位数字上的当前数字。 volatile uint8_t display_buffer[3] = {1, 2, 3}; // 例如,显示“123” 这两个错误都在 main.c 中使用。:- uint8_t numeric_value = display_buffer[current_digit]; uint32_t segment_pattern = CA_LUT[numeric_value]; #include "peripherals.h"仅出现在以下文件中:- main.c、peripherals.c、 正如我之前提到的,我来自 CodeWarrior,所以我对MCUX 的了解可能很危险(????)。我不确定七段数码管是否属于外围设备(peripherals.h)。c) 或引脚数量的声明(pin_mux.h)c),但这个问题以后可以解决。 Re: Duplicate variable declarations 您好, 可能是因为你在 peripherals.h 中定义了 CA_LUT。主程序和外围程序。c调用该文件时出现重复错误“多重定义”。 能否请您帮忙尝试在 peripherals.c 文件中添加 CA_LUT 的声明?而不是 peripherals.h,然后重试; 你的 peripherals.h 文件中还有其他类似的声明吗?它们也会出现同样的错误吗?如果您有这些文件,请将它们也移动到 peripherals.c 文件中。 把你的7个段想象成一个外部外围设备。 请告诉我你的发现 顺祝商祺!
記事全体を表示
Unexpected BSP changes when upgrading RTD MCU: S32K148 144 pin package IDE: S32DS 3.6.6 on Windows 11 RTOS: Bare metal Driver model: Non-MCAL When I upgraded an existing project from RTD v 3.0.0 to QPL06, I got the following changes auto-inserted into the .mex file (among others, but the others seem mundane) true I am wondering what does the 'enable_parallel_routing' does? And I am puzzled by the 'serdes' tag: does it stand for Serializer-Deserializer? The K148 chip does not have this capability. Why is this needed? Re: Unexpected BSP changes when upgrading RTD Thank you very much for the update. Re: Unexpected BSP changes when upgrading RTD Hello @durga_choudhury, S32DS Config Tools share functionality between other families (such as S32Z, S32N, S32G, etc.). You can see that when selecting a S32K MCU, SERDES Serializer/Deserializer tool (along with DCD, IVT, QuadSPI, DDR, among others) are disabled, since it is not supported: Julin_AragnM_0-1787152919605.pngJulin_AragnM_0-1787152919605.png Same reason for enable_parallel_routing configuration. You can enable/disable this from "Project > Properties > S32 Configuration Tools > Enable Parallel Routing", and it is shared between families using Pins tool. Julin_AragnM_1-1787156448892.pngJulin_AragnM_1-1787156448892.png Even though I was not able to find within the documentation a description for this, when enabled, the Pins tool will prompt the user during signal routing if another signal shares the same physical pin and writes to the same PORT register with the same configuration values. The tool will ask whether to automatically co-route all such signals simultaneously. I can reproduce this by configuring WKPU signal sharing configuration values with ADC in S32K3: Julin_AragnM_2-1787157425075.pngJulin_AragnM_2-1787157425075.png If disabled, this prompt is not present. Best regards, Julián
記事全体を表示
升级 RTD 时出现意外的 BSP 变化 MCU:S32K148 144引脚封装 IDE:Windows 11 上的 S32DS 3.6.6 实时操作系统:裸金属 驱动型号:非MCAL 当我将现有项目从 RTD v 3.0.0 升级到 QPL06 时,以下更改自动插入到 .mex 文件中。文件(以及其他文件,但其他文件似乎很普通) true 我想知道“enable_parallel_routing”参数的作用是什么? 我对“serdes”标签感到困惑:它是否代表串行器-反串行器(Serializer-Deserializer)?K148芯片并不具备这种功能。为什么需要这样做? Re: Unexpected BSP changes when upgrading RTD 你好@durga_choudhury , S32DS 配置工具与其他系列(如 S32Z、S32N、S32G 等)共享功能。您可以看到,在选择 S32K MCU 时,SERDES 串行器/解串器工具(以及 DCD、IVT、QuadSPI、DDR 等工具)被禁用,因为它不受支持: Julin_AragnM_0-1787152919605.pngJulin_AragnM_0-1787152919605.pngJulin_AragnM_0-1787152919605.png 启用并行布线配置的原因相同。您可以在“项目 > 属性 > S32 配置工具 > 启用并行布线”中启用/禁用此功能,并且该配置在使用引脚工具的族之间共享。 Julin_AragnM_1-1787156448892.pngJulin_AragnM_1-1787156448892.pngJulin_AragnM_1-1787156448892.png 尽管我在文档中没有找到对此的描述,但启用此功能后,如果另一个信号与该信号共享同一个物理引脚,并且使用相同的配置值写入同一个端口寄存器,则引脚工具会在信号路由期间提示用户。 该工具会询问是否要自动同时路由所有此类信号。我可以通过在 S32K3 中配置 WKPU 信号共享配置值与 ADC 来重现此问题: Julin_AragnM_2-1787157425075.pngJulin_AragnM_2-1787157425075.pngJulin_AragnM_2-1787157425075.png 如果禁用此功能,则不会显示此提示。 此致, 朱利安 Re: Unexpected BSP changes when upgrading RTD 非常感谢您提供的最新信息。
記事全体を表示
重複した変数宣言 私はLPC824ボードとダウンロードしたlpcxpresso824max_new_projectを使用して新しいプロジェクトに取り組んでいます。ビルド、ダウンロード、デバッグは問題なく完了しました。まず最初に、3桁の7セグメントLEDディスプレイを実装しようとしています。ペリフェラルに宣言を追加しました。そして、main.c に更新ルーチンがあります。ビルド時に、重複した変数宣言という2つのエラーが発生します。それらをコメントアウトすると、「未宣言の変数」というメッセージが表示されます。変数名を変更しても、同じ重複エラーが発生します。プロジェクト内のすべてのソースファイルを調べましたが、重複は見つかりませんでした。エラーメッセージの一つは次のとおりです。 /アプリケーション/MCUXpressoIDE_25.6.136/ide/plugins/com.nxp.mcuxpresso.tools.macosx_25.6.0.202501151204/tools/bin/../lib/gcc/arm-none-eabi/14.2.1/./../../../arm-none-eabi/bin/ld: ./source/ペリフェラル.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/ペリフェラル.h:57: 'CA_LUT'の複数定義; ./source/main.o:/Users/julian/Documents/MCUXpressoIDE_25.6.136/workspace/lpcxpresso824max_new_project/Debug/../source/ペリフェラル.h:57: ここで最初に定義されました Re: Duplicate variable declarations こんにちは、 あなたのペリフェラルを教えていただけますか?ファイルとペリフェラルについて?または、CA_LUTの宣言をどのように追加したか説明してください。 main.cでどのように使ったのか教えていただけますかCA_LUT? どのファイル名に[#include "peripherals.h"】があるのか教えてください。それらのファイルのヘッダーはmain.cに含まれていますか? 敬具、ルイス Re: Duplicate variable declarations こんにちは、 ペリフェラルでCA_LUTを定義しているように、そうかもしれません。メインとペリフェラルの両方です。重複エラー「複数の定義」が発生するファイルを呼び出します。 宣言をペリフェラルにだけ加えるのを手伝っていただけますかCA_LUTペリフェラルの代わりに、そして再試行する。 ペリフェラルに同様の申告を他にも持っていますか?同じエラーが出ているのですか?もし持っているなら、ペリフェラル.c にも移動してください。 7セグメントを外部ペリフェラルと考えてください。 調査結果を教えてください。 よろしくお願いいたします。 Re: Duplicate variable declarations これはペリフェラルのエントリーです。どちらのエラーについても // 数字0~9のルックアップテーブル(0=オン、1=オフ) const uint32_t CA_LUT[10] = { //0: A、B、C、D、E、Fはオン、G、DPはオフ ~((1< // 1: B、Cはオン ~((1< // 2: A、B、D、E、Gがオン ~((1< // 3: A、B、C、D、Gがオン ~((1< // 4: B、C、F、Gがオン ~((1< // 5: A、C、D、F、Gがオン ~((1< // 6: A、C、D、E、F、Gがオン ~((1< // 7: A、B、Cはオンです ~((1< // 8: 全セグメントON (AG) ~((1< // 9: A、B、C、D、F、Gがオン ~((1< }; // 1桁目、2桁目、3桁目に印刷される現在の数値を保持するグローバル変数 volatile uint8_t display_buffer[3] = {1, 2, 3}; // 例: "123" と表示されます どちらのエラーもmain.cで使用されています。:- uint8_t numeric_value = display_buffer[current_digit]; uint32_t segment_pattern = CA_LUT[numeric_value]; #include "ペリフェラル" 以下のファイルにのみ出現します: - main.c、ペリフェラル、 先ほども言いましたが、私はCodeWarriorから来ているので、MCUXの知識はおそらく危険です(?????)。7セグメントディスプレイがペリフェラル(peripherals.h )かどうかはわかりませんc) またはピン数の宣言 (pin_mux.h)そしてc)、でもそれは後で解決できます。
記事全体を表示
i.mx8M Plus 上的 wm8962 错误 我们正在设计基于 NXP i.MX 8M Plus (i.MX8MP) 处理器和 Wolfson WM8962 音频编解码器的定制电路板。我们目前正在将驱动程序移植到Linux 内核 5.4。以下是错误日志和我们的 DTS(设备树源)配置。 日志: [ 2.097680] imx-wm8962 sound-wm8962: 2111111111111111111111111 [ 2.103533] imx-wm8962 sound-wm8962: 22222222222222222222222222 [ 2.109467] imx-wm8962 sound-wm8962: 333333333333333333 [ 2.114705] imx-wm8962 sound-wm8962: 888888888888888888 [ 2.119953] imx-wm8962 sound-wm8962: failed to find codec platform device [ 2.126759] imx-wm8962: probe of sound-wm8962 failed with error -22 [ 2.995796] wm8962 2-001a: afrrgrgtrggggggggggggggggggg [ 3.001038] wm8962 2-001a: bbbbbbbbbbbbbbbbbbbbbbbbb [ 3.008259] random: fast init done [ 3.011807] wm8962 2-001a: customer id 0 revision F​ DTS:   sound-wm8960-forenex { compatible = "fsl,imx-audio-wm8962"; model = "wm8962-audio"; audio-codec = <&codec>; audio-cpu = <&sai3>; audio-routing = "Headphone Jack", "HPOUTL", "Headphone Jack", "HPOUTR", "Ext Spk", "SPKOUTL", "Ext Spk", "SPKOUTR", "AMIC", "MICBIAS", "IN3R", "AMIC", "IN1R", "AMIC"; }; &i2c3 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c3>; status = "okay"; pca6416: gpio@20 { compatible = "ti,tca6416"; reg = <0x20>; gpio-controller; #gpio-cells = <2>; }; ov5640_1: ov5640_mipi@3c { compatible = "ovti,ov5640"; reg = <0x3c>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_csi0_pwn>, <&pinctrl_csi0_rst>, <&pinctrl_csi_mclk>; clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>; clock-names = "xclk"; assigned-clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO2>; assigned-clock-parents = <&clk IMX8MP_CLK_24M>; assigned-clock-rates = <24000000>; csi_id = <0>; powerdown-gpios = <&gpio4 1 GPIO_ACTIVE_HIGH>; reset-gpios = <&gpio4 0 GPIO_ACTIVE_LOW>; mclk = <24000000>; mclk_source = <0>; mipi_csi; status = "disabled"; port { ov5640_mipi_1_ep: endpoint { remote-endpoint = <&mipi_csi1_ep>; data-lanes = <1 2>; clock-lanes = <0>; }; }; }; codec: wm8962@1a { compatible = "wlf,wm8962"; reg = <0x1a>; clocks = <&audiomix_clk IMX8MP_CLK_AUDIOMIX_SAI3_MCLK1>; clock-names = "mclk"; wlf,shared-lrclk; AVDD-supply = <&reg_audio_pwr>; CPVDD-supply = <&reg_audio_pwr>; DBVDD-supply = <&reg_audio_pwr>; DCVDD-supply = <&reg_audio_pwr>; MICVDD-supply = <&reg_audio_pwr>; PLLVDD-supply = <&reg_audio_pwr>; SPKVDD1-supply = <&reg_audio_pwr>; SPKVDD2-supply = <&reg_audio_pwr>; gpio-cfg = < 0x0000 /* 0:Default */ 0x0000 /* 1:Default */ 0x0000 /* 2:FN_DMICCLK */ 0x0000 /* 3:Default */ 0x0000 /* 4:FN_DMICCDAT */ 0x0000 /* 5:Default */ >; }; };​ 根据我们的分析,当内核尝试初始化 imx-wm8962 机器驱动程序时,I2C 总线上的 WM8962 编解码器尚未完成探测/注册。WM8962 之后才会完成初始化。这种探针顺序不一致会导致驱动程序初始化失败并出现错误。 请问您能否帮忙分析一下这个问题,并提出解决此问题的建议? IMX8MPLUS音频软件 NXP_MICR Android Linux Re: wm8962 on i.mx8M Plus error 当编解码器或 SAI 平台设备未准备就绪时,返回 -EPROBE_DEFER 在你的 imx-wm8962.c 中探测路径,区分以下几种情况: 缺少/无效的 DT 句柄 → 实际错误,返回 -EINVAL; 句柄存在,但引用的设备尚未注册 → 依赖项未准备就绪,返回 -EPROBE_DEFER。 例如,从概念上讲: codec_np = of_parse_phandle(np, "audio-codec", 0); 如果 (!codec_np) { dev_err(&pdev->dev, "音频编解码器缺失或无效\n");         返回-EINVAL; } codec_dev = of_find_i2c_device_by_node(codec_np); 如果 (!codec_dev) { dev_info(&pdev->dev, "编解码器设备未就绪,延迟探测\n"); of_node_put(codec_np); 返回 -EPROBE_DEFER; } 同样适用于 CPU DAI / SAI 节点: cpu_np = of_parse_phandle(np, "audio-cpu", 0); 如果 (!cpu_np) { dev_err(&pdev->dev, "audio-cpu 缺失或无效\n");         返回-EINVAL; } cpu_pdev = of_find_device_by_node(cpu_np); 如果 (!cpu_pdev) { dev_info(&pdev->dev, "SAI 平台设备未就绪,延迟探测\n"); of_node_put(cpu_np); 返回 -EPROBE_DEFER; } 如果您保留当前的机器驱动程序,这是最直接的解决方法。 如果可用,请优先选择 Linux 5.4 fsl-asoc-card 路径。 对于 Linux 5.4 时代的 NXP 内核,compatible = "fsl,imx-audio-wm8962" 由 sound/soc/fsl/fsl-asoc-card.c 处理,其中显式地处理了 WM8962,包括编解码器 DAI 名称 "wm8962" 和 WM8962 时钟/FLL ID。还要验证 snd-soc-fsl-asoc-card.ko 是否已加载或已构建。 这意味着您应该避免让旧版/自定义 imx-wm8962 机器驱动程序和 fsl-asoc-card 尝试绑定同一个兼容字符串。推荐方法: 启用/使用 CONFIG_SND_SOC_FSL_ASOC_CARD; 确保您的声音节点使用兼容的 = "fsl,imx-audio-wm8962";  ; 除非您有意保留,否则请移除或禁用该兼容字符串的旧版/自定义 imx-wm8962 绑定。 确保DTS具有所需的SAI和编解码器DAI属性 您的编解码器节点大致符合预期形状:WM8962 的示例使用 compatible = "wlf,wm8962" 、 reg = <0x1a> 、 clocks、 supply properties 和 gpio-cfg。但是,请确认您的DTS中未显示的部件: &sai3 { #sound-dai-cells = <0>         pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai3>;         assigned-clocks = <&clk IMX8MP_CLK_SAI3>;         assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT> assigned-clock-rates = <12288000>; /* 或板要求的 MCLK */         status = "okay"; }; 此外,编解码器通常还应公开以下内容: 编解码器:wm8962@1a { 兼容 = "wlf,wm8962"; reg =<0x1a> � #sound-dai-cells = <0> clocks = <&audiomix_clk IMX8MP_CLK_AUDIOMIX_SAI3_MCLK1>; 时钟名称 = "mclk"; …… }; 同时确保 reg_audio_pwr 引用的稳压器已定义、已启用,并且具有有效的电压范围。您的编解码器已被检测到,因此电源可能不是造成此特定错误的原因,但不良的电源或 MCLK 设置可能会导致以后的音频故障。 验证 MCLK 是否使能。 已知有一类 WM8962 启动问题,需要在音频机器驱动程序中启用编解码器 MCLK;据报道,在 imx_wm8962_probe() 中添加 clk_prepare_enable(codec_clk) 可以使 WM8962 音频工作。如果编解码器探测成功,但之后播放/捕获失败,请检查在编解码器初始化和流启动期间,SAI3 MCLK 是否实际存在于编解码器引脚上。 检查是否存在重复或冲突的声卡节点 确保只有一个活动的声音节点指向此编解码器/SAI 对,并且模型字符串是唯一的。在 NXP 社区调试中,还出现了类似的故障,即找不到编解码器平台设备,这与声卡命名/重复卡冲突有关。您的节点名称显示为 sound-wm8960-forenex,而兼容/型号为 WM8962;节点名称本身通常不起作用,但我建议您将其重命名以使其更清晰,并确认其他地方没有第二个已启用的 sound-wm8962 节点。 推荐的最短路径 如果可能,请使用适用于 Linux 5.4 的 fsl-asoc-card。 如果 WM8962 节点缺少 #sound-dai-cells = <0>;,请添加它。 确认 &sai3 已启用且已配置时钟/引脚控制。 如果保留自定义的 imx-wm8962 驱动程序,请修补失败的编解码器/CPU 查找路径,使其返回 -EPROBE_DEFER 而不是 -EINVAL。 确认 MCLK 已启用且存在。
記事全体を表示
RTDのアップグレード時に予期せぬBSPの変更が発生する MCU:S32K148 144ピンパッケージ IDE:Windows 11 上の S32DS 3.6.6 RTOS: ベアメタル ドライバーモデル:非MCAL 既存プロジェクトをRTD v 3.0.0からQPL06にアップグレードした際、以下の変更が.mexに自動的に挿入されましたファイル(他にもあるが、他は平凡なものに思える) true 「enable_parallel_routing」は何をするものなのでしょうか? そして、「serdes」というタグが気になります。これはシリアライザー・デシリアライザーの略でしょうか?K148チップにはこの機能はありません。なぜこれが必要なのですか? Re: Unexpected BSP changes when upgrading RTD こんにちは、 @durga_choudhury さん、 S32DSの設定ツールは、S32Z、S32N、S32Gなど他のファミリ間で機能を共有しています。S32K MCUを選択すると、SERDESのシリアルライザー/デシリアライザーツール(DCD、IVT、QuadSPI、DDRなど)が無効化されているのがわかります。これはサポートされていないためです。 Julin_AragnM_0-1787152919605.pngJulin_AragnM_0-1787152919605.pngJulin_AragnM_0-1787152919605.png 構成enable_parallel_routing理由も同じです。「Project > Properties> S32 Configuration Tools > Enable Parallel Routing」から有効・無効にでき、Pinsツールを使ってファミリ間で共有されます。 Julin_AragnM_1-1787156448892.pngJulin_AragnM_1-1787156448892.pngJulin_AragnM_1-1787156448892.png ドキュメントでこれについての説明は見つかりませんでしたが、有効になると、ピンツールは信号ルーティング中に、同じ物理ピンを共有し、同じ設定値の同じポートレジスタに書き込みた場合にユーザーに促します。 このツールは、そのような信号をすべて同時に自動的にルーティングするかどうかを尋ねます。これを再現するには、S32K3でADCとWKPU信号共有設定値を設定することで再現できます。 Julin_AragnM_2-1787157425075.pngJulin_AragnM_2-1787157425075.pngJulin_AragnM_2-1787157425075.png 無効にすると、このプロンプトは表示されません。 よろしくお願いします、 ジュリアン Re: Unexpected BSP changes when upgrading RTD 最新情報をお知らせいただき、誠にありがとうございます。
記事全体を表示
S32K344 FlexIO I2C DMA 你好, 我有一些关于S32K344上的FlexIO I2C DMA的问题,希望您能提供一些见解。 1. 当使用 FlexIO 模拟 I2C 时,Tx 长度设置为 尺寸 + 1。这是因为 “发送移位器在 SCL 引脚的最后一个下降沿加载一个额外的字” ? 1.png1.png1.png1.png 2.png2.png2.png2.png 2. 当使用DMA发送数据时, 主要循环计数 也设置为 大小 + 1。这是出于同样的原因吗?使用 DMA 时,所有传输的数据都来自 Master->TxData 。调用时 Flexio_I2c_Ip_MasterSendData ,应该 德州牛 长度为 大小 + 1 ,最后一个字节是否为 0xFF 或者 0x00 ? 3.png3.png3.png3.png 3. 用于接收数据, 主要循环计数 设置为 尺寸 – 1。这是为什么呢? 4. 我在 S32K344 上进行了测试,发现使用 DMA 进行 FlexIO I2C 接收数据时,接收到的数据比预期少一个字节。用示波器观察,最后一个字节的时钟信号只显示大约五六位波形。在 S32K312 上进行同样的测试没有问题。 S32K344 S32DS3.6.4 RTD700   BR, 杰森 Re: S32K344 FlexIO I2C DMA 嗨@Jason07 由于 FlexIO 不是专用的 I2C 外设,因此其实现需要额外的内部步骤才能正确完成 I2C 总线序列。 传输中的 Size + 1U 与 FlexIO 完成 I2C 帧序列所需的最终移位器负载有关。此次额外传输并不代表额外的有效载荷字节。相反,它被 FlexIO 硬件内部用于生成最终时钟脉冲,并将总线正确转换到传输结束状态。 接收端需要使用 1U 的尺寸,因为接收到的最后一个字节需要单独处理。这样,驱动程序就可以在正确的时间生成所需的 NACK 和 STOP 条件。 另外,请注意,使用 DMA 传输模式时,数据传输可能会受到缓存一致性问题的影响。为避免启用 数据缓存 时出现潜在问题,请确保用作 DMA TCD 源和目标的缓冲区分配在不可缓存的内存区域中。 调用 Flexio_I2c_Ip_MasterReceiveData() 函数时,无需增加 TRANSFER_SIZE 参数。驱动程序已经处理了接收序列所需的内部调整。 最后,在检查您的配置时,我注意到相同的 DMA 中断回调被分配给了两个 DMA 通道。根据 Flexio_I2c_Ip.c 中的描述,发送和接收应该使用不同的回调函数: FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter0() 用于 FlexIO 通道 0/1 TX FlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter1() 用于 FlexIO 通道 0/1 RX BR,VaneB Re: S32K344 FlexIO I2C DMA 您好@VaneB 我找到了“单独处理最后一个接收到的字节”的代码。 然而,关于发送方面我还有一个疑问。使用中断驱动发送时,数据长度设置为 Size + 1。发送过程中,代码会检查是否是最后一个字节;如果是,则发送 0xFF 或 0x00。实际发送的数据长度仍然是 Size。但是,使用 DMA 发送时,DMA 会从发送缓冲区复制 Size + 1 个字节,并且在 Flexio_I2c_Ip_MasterEndDmaTransfer 函数中,也会将 0xFF 或 0x00 填充到 ShiftBuffer 中。这意味着实际发送的数据长度是 Size + 1,而不是 Size。这是为什么呢? 1.png1.png1.png 2.png2.png2.png 我已将附件项目中所有出现的 TRANSFER_SIZE + 1 修改为 TRANSFER_SIZE (8),并按说明修改了 DMA 中断回调。此外,我还禁用了 数据缓存。 在使用 DMA 进行 FlexIO I2C 发送时,我用示波器观察到,在 -Os 优化级别下,时钟信号正常,只有 8 个字节。然而,在 -O0 优化级别下,前 8 个字节的时钟信号正常,但在发送 ACK 之后,并没有按预期生成停止信号;相反,出现了一个额外的 1 位时钟脉冲。 3.jpg3.jpg3.jpg 对于通过 DMA 接收 FlexIO I2C 信号,LPI2C0 用作从设备发送 8 字节(0x10–0x17)。在 -O0 优化级别下,传输第 7 个字节时时钟信号异常,FlexIO 接收缓冲区仅包含 6 个字节(0x10–0x15)。 4.jpg4.jpg4.jpg 在 -Os 优化级别,传输第 8 个字节时时钟信号异常,FlexIO 接收缓冲区仅包含 7 个字节(0x10–0x16)。 5.jpg5.jpg5.jpg 以上所有问题均可可靠地重现。 Re: S32K344 FlexIO I2C DMA 嗨@Jason07 我认为关键在于 I2C 使用的是开漏信号传输: 逻辑 0 会主动将 SDA 拉低。 逻辑 1 释放 SDA,使上拉电阻将线路拉高。 由于 FlexIO 是一个可编程外设,而不是专用的 I2C 控制器,因此驱动程序必须通过控制加载到移位器中的位模式来生成 I2C 协议事件。 因此,最后的 0x00 和 0xFF 值不一定应被视为额外的有效载荷字节。相反,它们用于将 SDA 置于正确的状态以完成循环。 当 Master->SendStop == TRUE 时,驱动程序加载 0x00,强制 SDA 为低电平。当换挡器完成且 FlexIO 释放线路后,上拉电阻会使 SDA 变为高电平,而 SCL 已经为高电平,从而产生所需的停止条件(SDA:低电平 → 高电平,而 SCL 为高电平)。 当 Master>SendStop == FALSE 时,驱动程序加载 0xFF,这将保持 SDA 释放状态。上拉使 SDA 保持高电平,防止出现停止状态,并使总线准备好进行重复启动(SDA:高电平 → 低电平,而 SCL 为高电平)。 另外,我建议启用 DMA 优化模式。线程中提供了一个示例:示例 S32K344 FlexIO I2C 带 DMA 优化选项 S32DS 3.6.0 RTD 6.0.0 。 最后,您使用的是定制电路板还是EVB/FRDM?
記事全体を表示
S32K344 FlexIO I2C DMA こんにちは、 S32K344のFlexIO I2C DMAに関していくつか質問がありますので、ご意見をいただければ幸いです。 1. FlexIOを使用してI2Cをエミュレートする場合、Txの長さは次のように設定されます。 サイズ+1 。これは 「送信シフターは、SCLピンの最後の立ち下がりエッジで追加のワードを1つロードします」 ? 1.png1.png1.png1.png 2.png2.png2.png2.png 2. DMAを使用してデータを送信する場合、 メジャーループ数 また、 サイズ + 1。これは同じ理由ですか? DMA を使用する場合、送信されるすべてのデータは Master->TxDataを呼び出すとき Flexio_I2c_Ip_MasterSendData 、 送信バッファ 長さは サイズ + 1 、最後のバイトは 0xFF または 0x00 ? 3.png3.png3.png3.png 3. データを受信するには、 メジャーループ数 設定されています サイズ – 1。なぜでしょうか? 4. S32K344でこれをテストしたところ、FlexIO I2CでDMAを使用してデータを受信すると、受信データが予想より1バイト少ないことがわかりました。オシロスコープで観測すると、最後のバイトのクロック信号には、わずか5~6ビット程度の波形しか見られない。S32K312での同じテストは問題なく動作します。 S32K344 S32DS3.6.4 RTD700   BR、 ジェイソン Re: S32K344 FlexIO I2C DMA こんにちは、 @Jason07さん FlexIOは専用のI2Cペリフェラルではないため、その実装にはI2Cバスシーケンスを正しく完成させるための追加の内部手順が必要です。 伝送における「サイズ + 1U」は、FlexIOがI2Cフレームシーケンスを完了するために必要な最終的なシフター負荷に関連しています。この追加転送は、追加のペイロードバイトを表すものではありません。その代わりに、FlexIOハードウェア内部で最終的なクロックパルスを生成し、バスを正しく転送終了状態に移行させるために使用されます。 受信時のサイズ指定(-1U)が必要なのは、最後に受信したバイトが個別に処理されるためです。これにより、運転者は必要なNACKおよびSTOP条件を適切なタイミングで生成できます。 また、DMA転送モードを使用する場合、データ転送はキャッシュの一貫性の問題によって影響を受ける可能性があることを考慮してください。Dキャッシュが有効になっている場合に発生する可能性のある問題を回避するため、DMA TCDの送信元および送信先として使用されるバッファは、キャッシュ不可能なメモリ領域に割り当てられていることを確認してください。 Flexio_I2c_Ip_MasterReceiveData() 関数を呼び出す際に、TRANSFER_SIZE パラメータを増やす必要はありません。ドライバーは受信シーケンスの必要な内部調整をすでに処理しています。 最後に、あなたの設定を確認していると、両方のDMAチャネルに同じDMA割り込みコールバックが割り当てられていることに気づきました。Flexio_I2c_Ip.cに記載されている説明によると、送信と受信には異なるコールバック関数を使用する必要があります。 FlexIOチャンネル0/1 TX用のFlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter0() FlexIOチャンネル0/1 RX用のFlexIO_I2c_Ip_DmaTransferCompleteNotificationShifter1() BR、VaneB Re: S32K344 FlexIO I2C DMA こんにちは、@ VaneBさん 「最後に受信したバイトは個別に処理される」というコードを見つけました。 しかし、送信に関してまだ疑問があります。割り込み駆動送信を使用する場合、長さはサイズ+1に設定されます。送信時にコードはそれが最後のバイトかどうかをチェックします。もしそうなら、0xFFか0x00を送ります。実際に送信されるデータの長さは依然としてサイズです。しかしDMAで送信を行う場合、DMAは送信バッファからサイズ+1バイトをコピーし、Flexio_I2c_Ip_MasterEndDmaTransfer関数ではShiftBufferに0xFFまたは0x00も埋めます。つまり、実際に送信されるデータ長はサイズではなくサイズ+1です。なぜでしょうか? 1.png1.png1.png 2.png2.png2.png 添付のプロジェクト内のTRANSFER_SIZE + 1のすべての箇所をTRANSFER_SIZE (8)に変更し、説明されているとおりDMA割り込みコールバックも変更しました。また、Dキャッシュも無効にしました。 FlexIO I2C送信にDMAを使用する際、オシロスコープで観察したところ、-Os最適化レベルではクロック信号は8バイトのみで正常でした。しかし、-O0最適化レベルでは、最初の8バイトのクロックは正常でしたが、ACK送信後に期待どおりストップ信号が生成されず、代わりに1ビットの余分なクロックパルスが現れました。 3.jpg3.jpg3.jpg FlexIO I2C を DMA 経由で受信する場合、LPI2C0 はスレーブとして使用され、8 バイト (0x10~0x17) を送信します。-O0最適化レベルでは、7バイト目の送信中にクロック信号が異常になり、FlexIO受信バッファには6バイト(0x10~0x15)しか含まれません。 4.jpg4.jpg4.jpg -Os最適化レベルでは、8バイト目の送信中にクロック信号が異常になり、FlexIO受信バッファには7バイト(0x10~0x16)しか含まれません。 5.jpg5.jpg5.jpg 上記の問題はすべて確実に再現可能です。 Re: S32K344 FlexIO I2C DMA こんにちは、 @Jason07さん 重要な点は、I2Cがオープンドレイン信号方式を採用していることだと思います。 論理0はSDAを積極的にローに引き下げます。 論理値1はSDAを解放し、プルアップ抵抗によってラインがハイレベルに駆動される。 FlexIOは専用のI2Cコントローラではなくプログラム可能な周辺機器であるため、ドライバはシフターに読み込まれるビットパターンを制御してI2Cプロトコルイベントを生成しなければなりません。 このため、末尾の0x00と0xFFの値は、必ずしも追加のペイロードバイトとみなすべきではありません。むしろ、それらはSDAを適切な状態に配置し、ルーチンを完了させるために使用される。 Master->SendStop == TRUEの場合、ドライバーは0x00をロードし、SDAを強制的に低くなります。シフターの処理が完了し、FlexIOがラインを解放すると、プルアップによってSDAがハイになり、SCLは既にハイになっているため、必要な停止条件(SDA:LOW → HIGH、SCLはHIGH)が生成されます。 Master->SendStop == FALSEの場合、ドライバーは0xFFをロードし、SDAは解放されたままになります。プルアップによりSDAがハイレベルに維持され、停止状態が防止され、バスは繰り返し始動(SCLがハイレベルの間、SDA:ハイレベル→ローレベル)の準備が整います。 また、DMA最適化モードを有効にすることをお勧めします。例はスレッドにあります: S32K344 DMA Optimize オプション S32DS 3.6.0 RTD 6.0.0 を用いた FlexIO I2C の例。 最後に、カスタムボードを使用していますか、それともEVB/FRDMを使用していますか?
記事全体を表示