Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
FRDM Device Trees for Education and Rapid Prototyping To simplify development on the NXP FRDM board family, new device trees have been created for the i.MX91, i.MX93, i.MX95, and i.MX8MP platforms. These device trees are intended to provide a more ready to use out of the box experience by preconfiguring the Raspberry Pi connector with the same peripheral mapping commonly expected on Raspberry Pi compatible hardware. With this approach, developers, students, and makers can use compatible expansion boards and HAT style accessories more easily, without needing to create or significantly modify additional device tree files. Instead of spending time on low level hardware description updates, users can start evaluating peripherals and building applications directly on top of the provided configurations. For convenience, this post includes a .zip package containing: The compiled device tree binaries (.dtb) The device tree source files (.dts) The kernel patch for the NXP Linux Kernel 6.18 required to integrate these changes All files are attached to this post, allowing users to easily reuse, modify, or integrate the device trees into their own projects. To configure a new device tree, compile it, and flash it onto the target, you can refer to the following guides: How to compile Linux Kernel Image and device tree using Yocto SDK Flash customized Linux Kernel Image and device tree using UUU Tool
View full article
MCX N947: FlexSPI と HyperRAM の接続 — 分析と設定 1. Overview MCX N947 チップは、堅牢な処理能力、豊富な周辺機能、高度なセキュリティ機能を備えた高集積マイクロコントローラであり、複雑なアプリケーションにも適しています。その主要な周辺機能の一つが FlexSPI です。 FlexSPI は、QuadSPI NOR フラッシュ、QuadSPI NAND フラッシュ、HyperRAM などのソリッドステート・ストレージ・デバイスを接続するための拡張可能なシリアル・ペリフェラル・インタフェースであり、多様なストレージ・デバイスをサポートできるよう複数のモードに設定できます。 NXP の FRDM-MCXN947 ボードは、MCXN947 デバイスをベースとした低コストの評価用ボードです。NXP では、ハードウェア評価ボード、統合開発環境 (IDE)、サンプル・アプリケーション、ドライバなど、MCXN947 用のツールとソフトウェアを提供しています。デフォルトでは、本ボードの FlexSPI インタフェースは MT35XU512 NOR フラッシュに接続されています。 本資料では、HyperRAM を MCXN947 ボードの FlexSPI インタフェースへ接続する方法について説明します。 ハードウェア環境: 開発ボード: FRDM-MCXN947 HyperRAM: W956D8MBYA ソフトウェア環境: IDE: MCUXpresso IDE v11.9.0 SDK: SDK Builder | MCUXpresso SDK Builder (nxp.com) 2. HyperRAM 回路図 以下に、FRDM-MCXN947 ボードにおける 8 線式フラッシュの公式回路図を示します。HyperRAM の W956D8MBYA パッケージは TFBGA 24 ボール 5 × 5 アレイであるため、そのまま置き換えることができます。 上記回路図を基に、HyperRAM メモリの信号接続を表にまとめました。 HyperRAM信号接続表 HyperRAM チップのピン 機能 MCXN947に接続されています CS CSチップセレクト信号 P3_0/FLEXSPI0_A_SS0_b SCK SCKクロック信号 P3_7/FLEXSPI0_A_SCLK DQS DQS Signal P3_6/FLEXSPI0_A_DQS DQ0 OSPIデータ信号D0 P3_8/FLEXSPI0_A_DATA0 DQ1 OSPIデータ信号D1 P3_9/FLEXSPI0_A_DATA1 DQ2 OSPIデータ信号D2 P3_10/FLEXSPI0_A_DATA2 DQ3 OSPIデータ信号D3 P3_11/FLEXSPI0_A_DATA3 DQ4 OSPIデータ信号D4 P3_12/FLEXSPI0_A_DATA4 DQ5 OSPIデータ信号D5 P3_13/FLEXSPI0_A_DATA5 DQ6 OSPIデータ信号D6 P3_14/FLEXSPI0_A_DATA6 DQ7 OSPIデータ信号D7 P3_15/FLEXSPI0_A_DATA7 3. HyperRAM設定プロセス 3.1 クロック構成 FlexSPI のクロックは正しく設定される必要があります。 プログラミング段階では安全性を考慮して低い周波数を選択する方が望ましく、ここでは 75 MHz を使用します。 3.2 FlexSPI 初期化構成 続いて、FlexSPI 関連の設定を行います。FLEXSPI_GetDefaultConfig を呼び出すことで、FlexSPI 機能構造体 flexspi_config_t のデフォルト設定を取得できます。これらの設定は汎用性が高く、ほとんどの FlexSPI デバイスでそのまま使用できます。W956D8MBYA HyperRAM では、デフォルト設定に加えて次のパラメータを設定します。 config.ahbConfig.enableAHBPrefetch = true; config.ahbConfig.enableAHBBufferable = true; config.ahbConfig.enableReadAddressOpt = true; config.ahbConfig.enableAHBCachable = true; config.rxSampleClock = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad; (1) enableAHBPrefetch — AHB プリフェッチを有効にするかどうか有効にすると、FlexSPI は現在の AHB バースト読み取りより多くのデータを先読みします。 (2) enableAHBBufferable — AHB 書き込みバッファアクセスを有効にするかどうか有効にすると、書き込みコマンドの完了を待たずに戻るため、後続の命令を継続でき、システムの並行性が向上します。 (3) enableReadAddressOpt — AHB 読み取りバーストの開始アドレス整列制限を解除するかどうか有効にすると、バースト読み取りの開始アドレスはバイトアラインメントの制限を受けません。 (4) enableAHBCachable — AHB バスのキャッシュ可能な読み取りを有効にするかどうかキャッシュヒットが発生した場合はキャッシュからデータを取得しますが、データ整合性の確保が必要です。 (5) rxSampleClock — データ読み取りに使用するクロックソースHyperRAM では、デバイス自体がリードストローブパルスを生成し、DQS ピン経由で入力されます。 3.3 FlexSPI 外部デバイス構成構造の詳細説明 FlexSPI が外部デバイスと通信する際には、クロック周波数やデータの有効期間など、デバイスとの通信タイミングを調整する必要があることが多いです。NXPのソフトウェアライブラリは、これらのパラメータを構成するためのflexspi_device_config_t構造体を提供します。 typedef struct _flexspi_device_config { uint32_t flexspiRootClk; bool isSck2Enabled; uint32_t flashSize; flexspi_cs_interval_cycle_unit_t CSIntervalUnit; uint16_t CSInterval; uint8_t CSHoldTime; uint8_t CSSetupTime; uint8_t dataValidTime; uint8_t columnspace; bool enableWordAddress; uint8_t AWRSeqIndex; uint8_t AWRSeqNumber; uint8_t ARDSeqIndex; uint8_t ARDSeqNumber; flexspi_ahb_write_wait_unit_t AHBWriteWaitUnit; uint16_t AHBWriteWaitInterval; bool enableWriteMask; } flexspi_device_config_t; (1) flexspiRootClk = 75 000 000 — 前述の FlexSPI クロック周波数に合わせます。 (2) flashSize = 0x2000 — フラッシュ容量 (KB)。W956D8MBYA の場合、64 Mb = 8 MB = 8 × 1024 KB です。 (3) CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle、このパラメータは CS 信号線間隔の時間単位を設定します。 (4) CSInterval = 2、このパラメータは CS 信号線の有効状態と無効状態を切り替える際の最小時間間隔を、上記 CSIntervalUnit で定義された単位で設定します。 (5) CSHoldTime = 3、このパラメータは FlexSPI ルート・クロック・サイクル数で測定される CS 信号線のホールド時間を設定します。 (6) CSSetupTime = 3、このパラメータは FlexSPI ルート・クロック・サイクル数で測定される CS 信号線のセットアップ時間を設定します。 MCXNx4x のデータシートによると、T_CK = 6ns、最小 T_CSS = 8.3ns、最小 T_CSH = 9.8nsです。75MHzのクロック周期は約13.3ナノ秒です。したがって、CSHoldTimeとCSSetupTimeはどちらも1以上である必要があり、3に設定することができます。 (1)dataValidTime=2、レジスタDLLACRとDLLBCRは通信における有効データ時間を設定するために使用されます。単位はナノ秒です。 (2) columnspace = 3、これは下位列アドレスの幅を示します。本 HyperRAM は行アドレスと列アドレスでアクセスを行い、列アドレスの幅は 3 ビットです。 (3) enableWordAddress = true、このパラメータは 2 バイト アドレス指定機能を有効にするかどうかを設定します。有効にすると、HyperRAM には 16 ビット データ形式でアクセスされます。 (4) AWRSeqIndex = 1、このパラメータは LUT 内の書き込みタイミング シーケンスのインデックスです。 (5)AWRSeqNumber = 1、このパラメータはAHB書き込みコマンドのシーケンス数を設定します。 (6)ARDSeqIndex = 0、このパラメータはLUT内の読み取りタイミングシーケンスのインデックスです。 (7) ARDSeqNumber = 1、このパラメータは AHB 書き込みコマンドのシーケンス数を設定します。 (8) enableWriteMask = true、このパラメータは FlexSPI 経由で外部デバイスに書き込む際、DQS ビットをマスクとして駆動するかどうかを設定します。この機能は、16 ビット データ幅へのアクセス時のアドレス アラインメントに使用されます。 3.4 LUTテーブル構成 以下に、HyperRAM の読み取りおよび書き込みタイミング用 LUT テーブル構成のコード例を示します。 const uint32_t customLUT[CUSTOM_LUT_LENGTH] = { /* Read Data */ [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07), [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write data */ [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07), [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), }; (1) 8 ライン差動 HyperRAM を使用しており、クロックの両エッジを利用します。そのため、外部メモリとの通信に使用されるデータ ライン数は kFLEXSPI_8PAD です。 (2) HyperRAM と HyperFlash は、Cypress Semiconductor 社の HyperBus™ インターフェース仕様に基づいて設計されたメモリ製品です。このオペランドは仕様で定義されているため、読み取り操作のオペランドは 0xA0、書き込みデータのオペランドは 0x20 に固定されています。 (3) CADDR_DDR 列アドレス: 1 回の転送で送られるバイト数は 8 の倍数である必要があるため、指定した行アドレスと列アドレスが対象 HyperRAM の上限を超える場合、FlexSPI は自動的に上位ビットを 0 に設定します。 上の表によれば、下位 16 ビットが列アドレス(有効ビット 3 ビット)、上位 13 ビットは互換性のために予約され 0 に設定する必要があります。したがって、列アドレスに対するタイミング パラメータは 16、すなわち 0x10 に設定します。 (4) RADDR_DDR 行アドレス: 図に示すとおり、FLSHxxCR1[CAS] ビットが 0 でない場合、FlexSPI 周辺回路は実際にマップされたフラッシュ アドレス(メモリのオフセット アドレス)を、行アドレス FA[31:CAS+1] と列アドレス [CAS:1] に分割して転送します。ワード アドレス指定が可能なフラッシュ デバイスでは、フラッシュが 2 バイト単位で読み書きされるため、アドレスの最下位ビットは不要です。 FlexSPI では 1 ワードを 2 バイトと見なすため、2 バイト境界へ合わせる場合、必要なアドレス ビットは 1 ビット減ります。行アドレスと列アドレスの合計は 1 ビット少ない必要があります。W956D8MBYA は 64 Mbit (2^26) です。列アドレスに 3 ビットを割り当てる場合、HyperRAM 全体にアクセスするには理論上 26‑1‑3 = 22 ビットの行アドレスが必要です。その後、8 ビット境界にアラインします。アラインしない場合、FlexSPI が下位ビットを 0 でパディングし、意図しないアドレスへアクセスしてしまいます。したがって、パラメータは 0x18、すなわち 24 ビットです。 4. 実験による検証 単純な AHB 読み取り/書き込み操作により、この HyperRAM が正常に動作するかを検証できます。 コードは次のとおりです。 for (i = 0; i < sizeof(s_psram_write_buffer); i++) { s_psram_write_buffer[i] = i; } memcpy((uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE), s_psram_write_buffer, sizeof(s_psram_write_buffer)); memcpy(s_psram_read_buffer,(uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE) , sizeof(s_psram_read_buffer)); if (memcmp(s_psram_read_buffer, s_psram_write_buffer, sizeof(s_psram_write_buffer)) == 0) { PRINTF("AHB Command Read/Write data successfully !\r\n"); } シリアルポートに「AHB コマンドのデータの読み取り/書き込みが正常に完了しました!」と表示されたら、 これは、HyperRAM への FlexSPI 接続が正常に機能していることを示しています。 ハンズオン・トレーニング MCXN
View full article
MCX N947:FlexSPI 连接到 HyperRAM - 分析与配置 1. Overview MCX N947 芯片是一款高度集成的微控制器,具备强大的处理能力、丰富的外设支持和先进的安全功能,适用于各种复杂应用。其关键外设之一是 FlexSPI。 FlexSPI 是一种可扩展的串行外设接口,主要用于连接固态存储设备,如 QuadSPI NOR 闪存、QuadSPI NAND 闪存和 HyperRAM。FlexSPI 是一种全面、灵活、高性能的解决方案,可以配置为不同模式以支持各种存储设备。 NXP FRDM-MCXN947 开发板是一款基于 MCXN947 设备的低成本设计与评估板。NXP 为 MCXN947 设备提供工具及软件支持,包括硬件评估板、集成开发环境(IDE)软件、示例应用程序和驱动程序。默认情况下,该开发板上的 FlexSPI 接口连接至 MT35XU512 NOR 闪存。 在本文中,我们将探讨如何将 HyperRAM 连接到 MCXN947 板的 FlexSPI 接口。 硬件环境: 开发板:FRDM-MCXN947 HyperRAM:W956D8MBYA 软件环境: IDE:MCUXpresso IDE v11.9.0 SDK:SDK Builder | MCUXpresso SDK Builder (nxp.com) 2.  HyperRAM 原理图 以下是来自 FRDM-MCXN947 的官方八线闪存原理图。由于 HyperRAM W956D8MBYA 封装为 TFBGA 24 引脚 5×5 阵列,因此可直接替换。 根据上述原理图,HyperRAM 存储器的信号连接情况汇总于下表。 HyperRAM 信号连接表 HyperRAM 芯片引脚 功能 连接到 MCXN947 CS CS 片选信号 P3_0/FLEXSPI0_A_SS0_b SCK SCK 时钟信号 P3_7/FLEXSPI0_A_SCLK DQS DQS Signal P3_6/FLEXSPI0_A_DQS DQ0 OSPI数据信号D0 P3_8/FLEXSPI0_A_DATA0 DQ1 OSPI数据信号D1 P3_9/FLEXSPI0_A_DATA1 DQ2 OSPI数据信号D2 P3_10/FLEXSPI0_A_DATA2 DQ3 OSPI数据信号D3 P3_11/FLEXSPI0_A_DATA3 DQ4 OSPI数据信号D4 P3_12/FLEXSPI0_A_DATA4 DQ5 OSPI数据信号D5 P3_13/FLEXSPI0_A_DATA5 DQ6 OSPI数据信号D6 P3_14/FLEXSPI0_A_DATA6 DQ7 OSPI数据信号D7 P3_15/FLEXSPI0_A_DATA7 3. HyperRAM 配置过程 3.1 时钟配置 FlexSPI 的时钟需要正确配置。 在编程阶段,选择较低的频率更为安全;在此,我们选择75MHz。 3.2 FlexSPI 初始化配置结构 接下来,我们配置与FlexSPI相关的设置。我们可以调用 FLEXSPI_GetDefaultConfig 函数来获取 FlexSPI 功能结构体 flexspi_config_t 的默认配置,该结构体具有一定的通用性,并与大多数 FlexSPI 设备兼容。对于W956D8MBYA HyperRAM,在默认配置的基础上,添加以下参数: config.ahbConfig.enableAHBPrefetch = true; config.ahbConfig.enableAHBBufferable = true; config.ahbConfig.enableReadAddressOpt = true; config.ahbConfig.enableAHBCachable = true; config.rxSampleClock = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad; (1) enableAHBPrefetch:是否启用 AHB 预取功能。启用后,FlexSPI 读取的数据量将超过当前 AH B突发读取的数据量。 (2) enableAHBBufferable:是否启用 AHB 写缓冲访问。执行写命令后,无需等待其完成即可返回,允许后续指令继续执行,从而增强系统并发性。 (3) enableReadAddressOpt:控制是否取消AHB读突发起始地址对齐限制。启用后,突发读取地址不受字节对齐限制。 (4) enableAHBCachable:启用 AHB 总线可缓存读取。如果命中缓存,则从缓存中读取数据,但必须确保数据一致性。 (5) rxSampleClock:读取数据时使用的时钟源。对于 HyperRAM,HyperRAM 会提供一个读选通脉冲,并通过 DQS 引脚输入。 3.3 FlexSPI 外部设备配置结构详解 当 FlexSPI 与外部设备通信时,通常需要与设备协调通信时序,如时钟频率和数据有效时长。恩智浦的软件库提供了 flexspi_device_config_t 结构体,专门用于配置这些参数。 typedef struct _flexspi_device_config { uint32_t flexspiRootClk; bool isSck2Enabled; uint32_t flashSize; flexspi_cs_interval_cycle_unit_t CSIntervalUnit; uint16_t CSInterval; uint8_t CSHoldTime; uint8_t CSSetupTime; uint8_t dataValidTime; uint8_t columnspace; bool enableWordAddress; uint8_t AWRSeqIndex; uint8_t AWRSeqNumber; uint8_t ARDSeqIndex; uint8_t ARDSeqNumber; flexspi_ahb_write_wait_unit_t AHBWriteWaitUnit; uint16_t AHBWriteWaitInterval; bool enableWriteMask; } flexspi_device_config_t; (1) flexspiRootClk = 75000000,此参数与之前设置的 FlexSPI 时钟频率相匹配。 (2) flashSize = 0x2000,Flash 的大小,单位为千字节。对于 W956D8MBYA,64Mb = 8MB = 8 * 1024KB。 (3) CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle,此参数配置 CS 信号线间隔的时间单位。 (4) CSInterval = 2,此参数配置 CS 信号线有效与无效状态之间切换的最小时间间隔,以 CSIntervalUnit 成员定义的单位进行测量。 (5) CSHoldTime = 3,此参数设置 CS 信号线的保持时间,以 FlexSPI 根时钟周期为单位进行测量。 (6) CSSetupTime = 3,此参数设置 CS 信号线的建立时间,以 FlexSPI 根时钟周期为单位进行测量。 根据MCXNx4x数据手册,T_CK = 6ns,最小T_CSS = 8.3ns,最小T_CSH = 9.8ns。75MHz的时钟周期约为13.3纳秒。因此,CSHoldTime 和 CSSetupTime 都应大于或等于 1,因此可以将它们配置为 3 (1) dataValidTime=2,寄存器 DLLACR 和 DLLBCR 用于配置通信中的有效数据时间,单位为纳秒。 (2) columnspace = 3,即低位列地址的宽度。对于这款 HyperRAM,它使用行地址和列地址进行访问,列地址宽度为 3 位。 (3) enableWordAddress = true,此参数用于配置是否启用2字节可寻址功能。启用后,HyperRAM 将以 16 位数据格式进行访问。 (4) AWRSeqIndex = 1,该参数是LUT中写入时序的索引。 (5)AWRSeqNumber =1,该参数配置AHB写命令的序列数。 (6) ARDSeqIndex = 0,该参数是读取时序在查找表(LUT)中的索引。 (7) ARDSeqNumber =1,此参数配置 AHB 读命令的序列数量。 (8) enableWriteMask = true,此参数用于设置在通过FlexSPI向外部设备写入数据时,是否将DQS位作为掩码。此功能用于在访问 16 位数据宽度时进行地址对齐。 3.4 LUT表配置 以下是 HyperRAM 读写时序的 LUT 表配置代码示例。 const uint32_t customLUT[CUSTOM_LUT_LENGTH] = { /* Read Data */ [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07), [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write data */ [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07), [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), }; (1) 我们正在使用一个8线差分HyperRAM,该器件在时钟的两个边沿均被利用,因此与外部存储器通信所使用的数据线数量为kFLEXSPI_8PAD。 (2) HyperRAM 和 HyperFlash 是基于 Cypress Semiconductor 的 HyperBus™ 接口规范设计的存储器产品。该操作数在该规范中已有定义,因此,读操作操作数固定为 0xA0,写数据操作数固定为 0x20。 (3) CADDR_DDR 列地址:由于每次传输的字节数必须是 8 的倍数,如果您提供的行地址和列地址超过了特定大小 HyperRAM 的最大行数和列数,FlexSPI 将自动将高位设置为 0。 上表显示,低16位是列地址,其中3位有效,高13位保留用于兼容性,需设置为0。因此,此处的列地址定时参数需填入16,即0x10。 (4) RADDR_DDR 行地址:如图所示,如果 FLSHxxCR1[CAS] 位不为零,则 FlexSPI 外设会将实际映射的 Flash 地址(即内存的偏移地址)在传输时分为行地址 FA[31:CAS+1] 和列地址 [CAS:1] 进行传输。对于字寻址的闪存设备,地址的最后一位是不需要的,因为闪存是以双字节为单位进行读取和编程的。 FlexSPI 将一个字视为两个字节;因此,若需要进行两字节对齐,则所需地址位数会减少一位。行地址和列地址的总和应少一位。W956D8MBYA 的容量为 64Mbit,即 2 的 26 次方;列地址占 3 位,理论上,要访问整个HyperRAM,行地址需要 26-1-3=22 位。然后,将其对齐到 8 位;否则,FlexSPI 会在低位补零,而这并非我们想要访问的地址。因此,该参数为 0x18,即 24 位。 4. 实验验证 我们可以使用简单的AHB读写操作来验证该HyperRAM是否正常工作。 代码如下。 for (i = 0; i < sizeof(s_psram_write_buffer); i++) { s_psram_write_buffer[i] = i; } memcpy((uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE), s_psram_write_buffer, sizeof(s_psram_write_buffer)); memcpy(s_psram_read_buffer,(uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE) , sizeof(s_psram_read_buffer)); if (memcmp(s_psram_read_buffer, s_psram_write_buffer, sizeof(s_psram_write_buffer)) == 0) { PRINTF("AHB Command Read/Write data successfully !\r\n"); } 当你的串口打印出 “AHB 命令读取/写入数据成功!”时, 表明你的 FlexSPI 与 HyperRAM 的连接工作正常。 动手实践培训 MCXN
View full article
MCX N947:FlexSPI Connecting to HyperRAM - Analysis and Configuration 1. Overview The MCX N947 chip is a highly integrated microcontroller with robust processing capabilities, extensive peripheral support, and advanced security features, making it suitable for various complex applications. One of its critical peripherals is FlexSPI. FlexSPI is an expandable serial peripheral interface mainly used to connect solid-state storage devices such as QuadSPI NOR Flash, QuadSPI NAND Flash, and HyperRAM. FlexSPI is a comprehensive, flexible, high-performance solution that can be configured in different modes to support various storage devices. The NXP FRDM-MCXN947 board is a low-cost design and evaluation board based on the MCXN947 device. NXP provides tools and software support for the MCXN947 device, including hardware evaluation boards, integrated development environment (IDE) software, sample applications, and drivers. By default, the FlexSPI interface on this board connects to an MT35XU512 NOR Flash. In this article, we will explore how to connect HyperRAM to the FlexSPI interface of the MCXN947 board. Hardware environment:   Development Board: FRDM-MCXN947   HyperRAM:W956A8MBYA Software environment:   IDE:MCUXpresso IDE v11.9.0   SDK:SDK Builder | MCUXpresso SDK Builder (nxp.com) 2. HyperRAM Schematic Below is the official eight-line Flash schematic from the FRDM-MCXN947. Since the HyperRAM W956D8MBYA package is a TFBGA 24-Ball 5 x 5 Array, it can be directly replaced. Based on the above schematic, the signal connections for the HyperRAM memory are summarized in Table. HyperRAM Signal Connection Table HyperRAM Chip Pin Function Connected to MCXN947 CS CS Chip Select Signal P3_0/FLEXSPI0_A_SS0_b SCK SCK Clock Signal P3_7/FLEXSPI0_A_SCLK DQS DQS Signal P3_6/FLEXSPI0_A_DQS DQ0 OSPI Data Signal D0 P3_8/FLEXSPI0_A_DATA0 DQ1 OSPI Data Signal D1 P3_9/FLEXSPI0_A_DATA1 DQ2 OSPI Data Signal D2 P3_10/FLEXSPI0_A_DATA2 DQ3 OSPI Data Signal D3 P3_11/FLEXSPI0_A_DATA3 DQ4 OSPI Data Signal D4 P3_12/FLEXSPI0_A_DATA4 DQ5 OSPI Data Signal D5 P3_13/FLEXSPI0_A_DATA5 DQ6 OSPI Data Signal D6 P3_14/FLEXSPI0_A_DATA6 DQ7 OSPI Data Signal D7 P3_15/FLEXSPI0_A_DATA7 3. HyperRAM Configuration Process 3.1 Clock configuration The clock for FlexSPI needs to be correctly configured. During the programming phase, it is safer to choose a lower frequency; here, we select 75MHz. 3.2 FlexSPI Initialization Configuration Structure Next, we configure the FlexSPI-related settings. We can call FLEXSPI_GetDefaultConfig to obtain some default configurations for the FlexSPI feature structure flexspi_config_t, which has a certain degree of universality and is compatible with most FlexSPI devices. For the W956D8MBYA HyperRAM, on the basis of the default configuration, add the following parameters: config.ahbConfig.enableAHBPrefetch = true; config.ahbConfig.enableAHBBufferable = true; config.ahbConfig.enableReadAddressOpt = true; config.ahbConfig.enableAHBCachable = true; config.rxSampleClock = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad; (1) enableAHBPrefetch: Whether to enable AHB prefetching. When enabled, FlexSPI reads more data than the current AHB burst read. (2) enableAHBBufferable: Whether to enable AHB write buffer access. After executing a write command, it returns without waiting for its completion, allowing subsequent instructions to continue executing, enhancing system concurrency. (3) enableReadAddressOpt: Controls whether to remove the AHB read burst start address alignment restriction. If enabled, burst read addresses are not restricted by byte alignment. (4) enableAHBCachable: Enables AHB bus cacheable reads. If a hit occurs, data is read from the cache, but data consistency must be ensured. (5) rxSampleClock: The clock source used for reading data. For HyperRAM, HyperRAM provides a read strobe pulse and inputs it through the DQS pin. 3.3 Detailed Explanation of FlexSPI External Device Configuration Structure When FlexSPI communicates with external devices, it often needs to coordinate communication timing with the device, such as clock frequency and data validity duration. NXP's software library provides the flexspi_device_config_t structure specifically for configuring these parameters. typedef struct _flexspi_device_config { uint32_t flexspiRootClk; bool isSck2Enabled; uint32_t flashSize; flexspi_cs_interval_cycle_unit_t CSIntervalUnit; uint16_t CSInterval; uint8_t CSHoldTime; uint8_t CSSetupTime; uint8_t dataValidTime; uint8_t columnspace; bool enableWordAddress; uint8_t AWRSeqIndex; uint8_t AWRSeqNumber; uint8_t ARDSeqIndex; uint8_t ARDSeqNumber; flexspi_ahb_write_wait_unit_t AHBWriteWaitUnit; uint16_t AHBWriteWaitInterval; bool enableWriteMask; } flexspi_device_config_t; (1) flexspiRootClk = 75000000, this parameter matches the previously set FlexSPI clock frequency. (2) flashSize = 0x2000, the size of the Flash in kilobytes. For W956D8MBYA, 64Mb = 8MB = 8 * 1024KB. (3) CSIntervalUnit = kFLEXSPI_CsIntervalUnit1SckCycle, this parameter configures the time unit for the interval between CS signal lines. (4) CSInterval = 2, this parameter configures the minimum time interval for switching between valid and invalid states of the CS signal line, measured in the units defined by the above CSIntervalUnit member. (5) CSHoldTime = 3, this parameter sets the hold time for the CS signal line, measured in FlexSPI root clock cycles. (6) CSSetupTime = 3, this parameter sets the setup time for the CS signal line, measured in FlexSPI root clock cycles. According to the MCXNx4x datasheet,T_CK = 6ns,the minimum T_CSS = 8.3ns,and the minimumT_CSH = 9.8ns。The clock period for 75MHz is approximately 13.3 nanoseconds. Therefore, both CSHoldTime and CSSetupTime should be greater than or equal to 1, So they can be configured to 3 (1) dataValidTime=2,Registers DLLACR and DLLBCR are used to configure the valid data time in communication, with the unit being nanoseconds. (2) columnspace = 3,which is the width of the low-order column address. For this HyperRAM, it uses row and column addresses for access, with a column address width of 3 bits. (3) enableWordAddress = true,this parameter is configured whether the 2-byte addressable function is enabled. Once enabled, HyperRAM will be accessed using a 16-bit data format. (4) AWRSeqIndex = 1,this parameter is the index of the write timing sequence in the LUT. (5) AWRSeqNumber =1,this parameter configures the number of sequences for AHB write commands. (6) ARDSeqIndex = 0,this parameter is the index of the read timing sequence in the LUT. (7) ARDSeqNumber =1,this parameter configures the number of sequences for AHB write commands. (8) enableWriteMask = true,this parameter is used to set whether to drive the DQS bit as a mask when writing to external devices via FlexSPI. This feature is used for address alignment when accessing data widths of 16 bits. 3.4 LUT table configuration Below is a code example of the LUT table configuration for HyperRAM read and write timing. const uint32_t customLUT[CUSTOM_LUT_LENGTH] = { /* Read Data */ [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0xA0, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07), [4 * PSRAM_CMD_LUT_SEQ_IDX_READDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), /* Write data */ [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_DDR, kFLEXSPI_8PAD, 0x20, kFLEXSPI_Command_RADDR_DDR, kFLEXSPI_8PAD, 0x18), [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 1] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_CADDR_DDR, kFLEXSPI_8PAD, 0x10, kFLEXSPI_Command_DUMMY_RWDS_DDR, kFLEXSPI_8PAD, 0x07), [4 * PSRAM_CMD_LUT_SEQ_IDX_WRITEDATA + 2] = FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_DDR, kFLEXSPI_8PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00), }; (1) We are using an 8-line differential HyperRAM, which is utilized on both edges of the clock, hence the number of data lines used for communication with external memory is kFLEXSPI_8PAD. (2) HyperRAM and HyperFlash are memory products designed based on the HyperBus™ interface specification by Cypress Semiconductor. This operand is defined in the specification, therefore the read operation operand is fixed at 0xA0, and the write data operand is fixed at 0x20. (3) CADDR_DDR column address: Since the number of bytes transferred in one transmission must be a multiple of 8, if the row and column addresses you provide exceed the maximum rows and columns of a specific size HyperRAM, FlexSPI will automatically set the higher bits to 0. The table above shows that the lower 16 bits are the column address, with 3 valid bits, and the upper 13 bits are reserved for compatibility and need to be set to 0. Therefore, the timing parameter for the column address here needs to be filled with 16, i.e., 0x10. (4) RADDR_DDR row address: As shown in the figure, if the FLSHxxCR1[CAS] bit is not zero, then the FlexSPI peripheral will split the actual mapped Flash Address (i.e., the memory's own offset address) into a row address FA[31:CAS+1] and a column address [CAS:1] for transmission during transfer timing. For word-addressable flash devices, the last bit of the address is not needed because the flash is read and programmed in two-byte units. FlexSPI considers one word as two bytes; thus, if alignment to two bytes is required, one less bit address is needed. The sum of row and column addresses should be one bit less. W956D8MBYA has 64Mbit, which is 2^26; with 3 bits for the column address, theoretically, 26-1-3=22 bits are needed for the row address to access the entire HyperRAM. Then, align it to 8 bits; otherwise, FlexSPI will pad zeros at the lower bits, which would not be the address we want to access. Therefore, the parameter is 0x18, i.e., 24 bits. 4. Experimental Verification We can use simple AHB read and write operations to verify whether this HyperRAM is functional. The code is as follows. for (i = 0; i < sizeof(s_psram_write_buffer); i++) { s_psram_write_buffer[i] = i; } memcpy((uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE), s_psram_write_buffer, sizeof(s_psram_write_buffer)); memcpy(s_psram_read_buffer,(uint32_t*)(EXAMPLE_FLEXSPI_AMBA_BASE) , sizeof(s_psram_read_buffer)); if (memcmp(s_psram_read_buffer, s_psram_write_buffer, sizeof(s_psram_write_buffer)) == 0) { PRINTF("AHB Command Read/Write data successfully !\r\n"); } When your serial port prints "AHB Command Read/Write data successfully!", it indicates that your FlexSPI connection to the HyperRAM is functioning properly. Hands-On Training MCXN
View full article
Is there mismatch between eIQ guideline? I see these guideline to convert tflite to npu tflite model.  The first guideline: https://docs.nxp.com/bundle/AN14700/page/topics/model_conversion_for_npu.html It is interactive guideline. In this guideline, NXP said that we need to choose right MCUXpresso SDK version. It seems that this guideline is for eIQ Toolkit 1.17.0.110 Ubuntu 20.04.03 Installer. Is that right? The second guideline: https://docs.nxp.com/bundle/AN14700/page/topics/eiq_enablement.html It uses command line neutron-converter --input mobilenet_quant.tflite --output mobilenet_npu.tflite --dump-header-file-input --dump-header-file-output --target imxrt700 --use-sequencer I downloaded eIQ Neutron SDK 3.1.2 (Linux package) and I could run the about command to create npu_tflite model. But in this case, it did not mention about compatible MCUXpresso SDK version. It makes me confused. An I am not sure whether I can used the created npu model in example of MCUXpresso SDK without knowing version. Do you have any comment on this problem?
View full article
在 RT700 的 NPU 上运行图像分类模型时,我应该选择哪个示例? 我看了这份指南 https://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/i-MX-RT700-eIQ-Neutron-NPU-Lab-Guides/ta-p/2202942 然后我为指南文档捕获了如下图片。 橙色矩形由 NXP 绘制,用于 NPU 示例。在这里,我可以选择tflm_cifar10_cm33_core0 (在 NPU 上运行)。是这样吗? 此外,我还看到其他使用 hifi1 或 hifi4(DSP)的例子。据我所知,DSP 是数字信号处理的缩写。音频处理也是如此。是这样吗? 如果我有一个图像分类模型,那么我就不需要使用高保真音响(dsp)。是否正确? 谢谢。 Re: Which example should I choose to run image classification model on NPU of RT700? @Pablo_Ramos 我查看了更多细节。我在这里看到了 2 个图像分类模型的潜在示例。 - 一个带 DSP - 一个不带数字信号处理器 但这 2 个例子都在 eIQ 中。这意味着这些示例使用 NPU 进行加速。 我对使用 DSP 的示例很好奇。正如您所提到的,我们可以将图像预处理卸载到 DSP。在这种情况下,哪个例子的推理时间更长?我想,我的 NPU tflite 型号是否相同? 谢谢。 Re: Which example should I choose to run image classification model on NPU of RT700? @Pablo_Ramos 谢谢您的答复。 导入示例时,您可以搜索 SDK 中可用的 eIQ 示例,如您共享的图片所示。其中包括可以用作参考的不同实现。在您提到的知识库中,它使用了基于 MobileNet 模型的 tflm_label_image_cm33_core0 示例,而 tflm_cifar10_cm33_core0 则使用了基于 CifarNet 的模型。 当然,这意味着我可以将上述示例用于 NPU 上的图像分类模型。因为我没有从事过音频工作,所以不会使用 DSP。 Re: Which example should I choose to run image classification model on NPU of RT700? 您好, 导入示例时,您可以搜索 SDK 中可用的 eIQ 示例,如您共享的图片所示。其中包括可以用作参考的不同实现。在您提到的知识库中,它使用了基于 MobileNet 模型的 tflm_label_image_cm33_core0 示例,而 tflm_cifar10_cm33_core0 则使用了基于 CifarNet 的模型。 关于 HiFi1 和 HiFi4,HiFi4 DSP 位于计算功能域中,用作 DSP 核心,用于执行音频语音编解码器、预处理和后处理模块,以及卸载机器学习功能以加速处理。相比之下,HiFi1 DSP 位于感知功能域中,主要用于不间断的应用程序、低功耗蓝牙音频和传感器相关处理。 在 HiFi1 和 HiFi4 之间做出选择取决于应用,因为它们在功能、性能和功耗方面各不相同。 你可以在 i.MX RT700 跨界微控制器参考手册的第 59 章(HiFi1 DSP 平台)和第 60 章(HiFi4 DSP 平台)中找到这些模块的完整概述。 敬上, Pablo
View full article
SL3S1013FTB0 RFID transponder Questions 1) How can we reduce the UCODE G2iM+ read range? I’m asking this because there are no serial communication lines available to connect to the MCU, so I don’t know how we can control the read range. 2) I have attached the pinouts and connections of UCODE G2iM+. How is this read and written? Is it through the RFID connection? 3) Can you please explain integrated tag tamper alarm, digital switch, external supply mode, data transfer mode, and real read range reduction modes? The reason is that I would like to see how I can utilize those features in my product. 4) Please see the attached picture. The self-powered RFID transponder connection. Please let me know if this connection will result in 2V to 5V Vout from RFID energy harvesting. 5) In a self-power RFID transponder, what is the voltage range at the OUT? 6) In an external-power RFID transponder, what is the voltage range at the OUT? Re: SL3S1013FTB0 RFID transponder Questions hi kaili, Your answer is very brief for my questions. Can you please answer my questions one by one?  Re: SL3S1013FTB0 RFID transponder Questions Hello @pragashsangaran  UCODE G2iM+ is a fully RF-based passive/assisted RFID IC, and all communication is handled via EPC Gen2 air interface without any serial connection. The read range cannot be controlled via MCU, but can be reduced using the built-in Real Read Range Reduction (4R) feature or antenna design. External supply improves sensitivity, while output voltage levels are limited to low-voltage digital levels (~1.5V) rather than power harvesting outputs. Re: SL3S1013FTB0 RFID transponder Questions What is the range of OUT voltage for both self-powered and external power transponder configurations? 
View full article
VS code extension update broke RTOS viewer Hello, Until now we were using vscode tool version 1.9.20 (old), and we were using https://marketplace.visualstudio.com/items?itemName=mcu-debug.rtos-views to view the status of freertos threads (RT1189). After the update the tool no longer works and just shows "RTOS detection did not finish. It will be resumed on the next halt."  Any suggestions? Thanks Re: VS code extension update broke RTOS viewer Hi, MCUXpresso for VS Code has own RTOS viewer for a long time. Please check https://mcuxpresso.nxp.com/mcux-vscode/latest//html/RTOS-Details.html  Also, old change, the extension migrated from using Microsoft C/C++ Debug Adapter to own debug adapter based on Cortex-Debug. You have to create a new Debug Configuration that will automatically create one based on our debug adapter (you'll notice "mcuxpresso-debug" as type). PS. Please be aware that if you are using Segger debug probe, this requires special enablement for RTOS support (see https://mcuxpresso.nxp.com/mcux-vscode/latest//html/Debug-Views.html#enabling-rtos-awareness) Regards, Cristian Re: VS code extension update broke RTOS viewer Ok I got it working, we where compiling with -Og flag in debug and changing that to -O0 made the viewer work. But I guess the tool needs improvement as Og shall be default for standard edit-debug process?. Unrelated to this, I also see this warning in debug console "warning: could not convert ' \Main.cpp' from the host encoding (CP1252) to UTF-32. This normally should not happen, please file a bug report." Thanks Re: VS code extension update broke RTOS viewer Thanks, In fact the message is coming from MCUXpresso RTOS view itself (I incorrectly referred a different plugin).  I have attached the launch.json and custom device script (it is same as MIMXRT1180-EVK.json for Linkserver 26.3.123, but the "connect-script" is "RT1180_reset.scp".  Our app runs in hyperram and uses SDK 2.16. Freertos variables are correctly set. I can debug an step through our app, but RTOS Details view still shows "RTOS detection did not finish. It will be resumed on the next halt."  Thanks Re: VS code extension update broke RTOS viewer @cristiantepus any updates on this? Re: VS code extension update broke RTOS viewer Today I found that MCUXpresso RTOS viewer does not work in release mode, and does not show anything. But https://marketplace.visualstudio.com/items?itemName=mcu-debug.rtos-views works with -Og and in release modes, but cannot work with current mcuxpresso vscode plugin (gets disabled?). Is there a way to bring that back? Re: VS code extension update broke RTOS viewer Hi @arunkumar_g, The RTOS details view we offer is relying on the existence of some symbols inside the ELF file (e.g. "FreeRTOSDebugConfig", "pxCurrentTCB", "uxCurrentNumberOfTasks", and many more). I agree that the "RTOS detection did not finish. It will be resumed on the next halt." does not guide on what went wrong and we'll make sure to make this clearer. Regarding the results you obtained for "debug" vs. "release", I'd say this is the result of compiler/linker optimizations -- required symbols are stripped-out so any consumer will not find these. In this case, not only the RTOS Details view will fail but the low-level GDB Thread Awareness (LinkServer, J-Link, PEmicro) will be unable to show and debug FreeRTOS tasks in Call Stack view. In this case, I can only suggest you make sure you update the code so that you ensure the presence of the required symbols in both, "debug" and "release" build modes. We'll make sure to update the documentation and the information from the tool to make it clear what symbols are required but are missing -- thus making the views unable to show data. You also mentioned that MCU Debug RTOS view is working in this particular case. Could be, but the last time I checked there was no support any kind of versioning support (version is found by inspecting "FreeRTOSDebugConfig"). And keep in mind that the FreeRTOS data structures are really specific to the RTOS version. To enable MCU Debug views you could ask the maintainers how to add the "mcuxpresso-debug" debug adapter (MCUXpresso specific) in the supported list. Given that you're using a project based on an old SDK 2.16, I'd also suggest switching to the latest MCUXpresso SDK based on CMake & Kconfig.   Some useful links: - RTOS Details: RTOS Details — MCUXpresso for VS Code 26.04 documentation - MCUXpresso SDK: MCUXpresso SDK Documentation — MCUXpresso SDK Documentation   Thanks, Adrian
View full article
关于 MIMX9352XVVXMAC 电压裕量的问题 亲爱的技术社区团队 我们有几个关于 MIMX9352XVVXMAC 处理器电源轨的问题。在我们目前的设计中,供电电压可能会略微超出数据表中规定的最大工作电压范围。 为了帮助我们确保设计的可靠性,请澄清以下几点: 轻微过压的影响:如果电源轨超过最大运行极限几毫伏 (mV),对设备的潜在风险或长期影响是什么? 安全裕度:数据表中定义的工作电压范围是否包括固有的安全余量?如果是,具体幅度是多少? 温度依赖性:这些绝对最大值和推荐工作电压范围如何随温度变化而变化,特别是在高工作温度下? 感谢您的时间和帮助。我们期待您的指导。
View full article
i.Mx8mm HABv4 hangs when calling hab_rvt_authenticate_image from arm_smccc_smc Hello  I am experiencing an issue when trying to use HABv4 on an i.Mx8mm processor. To be precise hab_rvt_authenticate_image hangs when being called over the "Secure Monitor Call Calling Conventions" (smccc) in U-Boot proper. It hangs when trying to authenticate my Bootscript (boot.scr). In SPL the direct call (from elevation level 3) to the ROM function works correctly.  I have blown the SRK_Hash Fuses, but the rest of the System is still in an open configuration. What is interesting is the fact, that when I take an Image built from our Github Pipeline, where a different set of keys is used, the System is able to boot, generating the expected HAB Events as the SRK Hashes obviously don't match. Comparing the working and non working boot scripts shows no difference in the IVT and CST headers.  Using csf_parse from the CST also produces the same results from both files.  I have verified the adresses and arguments passed to the authenticate function. The bootcontainer is located inside the eMMC while the Rest of the Image (Bootscript, Kernel, Rootfs) is on the sd card. Booting an unsigned image without IVT and csf header works, as it will not call the authenticate function at all. Board: Toradex Verdin imx8mm Uboot Version: 2024.07 Images were signed using CST 3.4.0 Do you have any idea as to why the authenticate call never returns when using one set of keys (the one matching to the SRK_HASHes in the fuses) while using the wrong one? Thanks a lot for your help i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Security Re: i.Mx8mm HABv4 hangs when calling hab_rvt_authenticate_image from arm_smccc_smc 1. Can you share your csf file, genIVT.sh file and signed bootscript? and running commands to sign bootscript? 2. Did you read SNVS status in u-boot command line? Please share log before and after authenticate signed bootscript. u-boot => md.l 0x30370000 0x40 Re: i.Mx8mm HABv4 hangs when calling hab_rvt_authenticate_image from arm_smccc_smc Hello  Thanks for your response 1. I have put together the script parts used to sign the bootscript as an attachment. Please note that we use a custom build system that also does other stuff. This is where some of the ENV variables are coming from, which is not directly visible in the snippets. I have also attched the signed boot script (boot.scr) as well as the boot.cmd. They are in the boot.zip folder. 2. Here is the output from your command before running the auth. Unfortunately i can't get it after, because the system hangs and will eventually be reset by the watchdog. Verdin iMX8MM # md.l 0x30370000 0x40 30370000: 00000000 80002100 00000000 00000000 .....!.......... 30370010: 00000000 80009b00 00002000 00000000 ......... ...... 30370020: 00000000 00000000 00000000 00000000 ................ 30370030: 00000000 00000000 00000020 00000000 ........ ....... 30370040: 00000000 00000000 00000000 40000000 ...............@ 30370050: 00000000 00000000 00000000 00000000 ................ 30370060: 00000000 41736166 00000000 00000000 ....fasA........ 30370070: 00000000 00000000 00000000 00000000 ................ 30370080: 00000000 00000000 00000000 00000000 ................ 30370090: 00000000 00000000 00000000 00000000 ................ 303700a0: 00000000 00000000 00000000 00000000 ................ 303700b0: 00000000 00000000 00000000 00000000 ................ 303700c0: 00000000 00000000 00000000 00000000 ................ 303700d0: 00000000 00000000 00000000 00000000 ................ 303700e0: 00000000 00000000 00000000 00000000 ................ 303700f0: 00000000 00000000 00000000 00000000 ................ The file U-Boot-Output.txt contains the output of uboot. Note that I have added in some additional debug print statements. Let me know if you have any questions regarding the content of the files
View full article
--sequencerモードは、変換されたNPU tfliteモデルの精度に影響を与えましたか? tflite2NPUtfliteへの変換時に、--sequencerモードに関するこのセクションを読みました。 https://docs.nxp.com/bundle/AN14700/page/topics/model_conversion_for_npu.html#topic_af7d69e5-3c74-457d-8a9a-a320489a0e5d 私の理解では、--sequencerオプションの有無にかかわらず、モデルサイズと推論時間はトレードオフの関係にある。しかし、このセクションではNPU tfliteモデルの精度については触れられていませんでした。 --sequencerフラグはNPUモデルの精度に影響しますか?
View full article
RT700のNPUで画像分類モデルを実行する場合、どの例を選択すればよいでしょうか? こちらのガイドhttps://community.nxp.com/t5/i-MX-RT-Crossover-MCUs-Knowledge/i-MX-RT700-eIQ-Neutron-NPU-Lab-Guides/ta-p/2202942を見て、ガイドのドキュメント用に以下の画像をキャプチャしました。 オレンジ色の長方形は、NXPがNPUの例として描いたものです。ここから、 tflm_cifar10_cm33_core0 (NPUで実行)を選択できます。それで合っていますか? さらに、hifi1やhifi4(DSP)を使った他の例も見かけます。私の理解では、DSPはデジタル信号処理の略です。オーディオ プロセッシングの場合も同様です。それで合っていますか? 画像分類モデルがあれば、ハイファイ(DSP)を使用する必要はありません。それは正しいですか? ありがとう。 Re: Which example should I choose to run image classification model on NPU of RT700? こんにちは、 サンプルをインポートする際には、共有いただいた画像に示されているように、SDKで利用可能なeIQのサンプルを検索できます。これらには、参考として利用できるさまざまな実装例が含まれています。ご指摘の知識ベースの場合、MobileNetモデルに基づいたtflm_label_image_cm33_core0の例を使用していますが、tflm_cifar10_cm33_core0はCifarNetに基づいたモデルを使用しています。 HiFi1とHiFi4に関して言えば、HiFi4 DSPは演算領域に配置されており、オーディオ音声コーデック、前処理および後処理モジュールの実行、そしてプロセッシング速度向上のための機械学習機能のオフロードを行うDSPコアとして機能します。一方、HiFi1 DSPはセンスドメインに属し、主に常時オンのアプリケーション、Bluetooth LEオーディオ、およびセンサー関連プロセッシングを目的としています。 HiFi1とHiFi4のどちらを選ぶかは、アプリケーションによって異なります。両者は機能、性能、消費電力において異なるためです。 これらのモジュールに関する詳細な概要は、i.MX RT700クロスオーバーマイクロコントローラリファレンスマニュアルの第59章(HiFi1 DSPプラットフォーム)および第60章(HiFi4 DSPプラットフォーム)に記載されています。 よろしくお願いします、 パブロ Re: Which example should I choose to run image classification model on NPU of RT700? @Pablo_Ramos こんにちは。ご返信ありがとうございます。 サンプルをインポートする際には、共有いただいた画像に示されているように、SDKで利用可能なeIQのサンプルを検索できます。これらには、参考として利用できるさまざまな実装例が含まれています。ご指摘の知識ベースの場合、MobileNetモデルに基づいたtflm_label_image_cm33_core0の例を使用していますが、tflm_cifar10_cm33_core0はCifarNetに基づいたモデルを使用しています。 はい、それはつまり、上記の例をNPU上の画像分類モデルに使用できるということですね。私はオーディオ関連の仕事をしたことがないので、DSPは使用しません。 Re: Which example should I choose to run image classification model on NPU of RT700? @Pablo_Ramos さらに詳細を確認します。画像分類モデルの潜在的な例を2つ見つけました。 - DSP搭載モデル - DSP非搭載モデル しかし、これら2つの例はeIQに掲載されています。つまり、これらの例ではNPUを使って処理速度を向上させているということです。 DSPを使った例に興味があります。ご指摘のとおり、DSP向けに画像前処理をオフロードすることが可能です。この状況では、どちらの例の方が推論時間が短くなるでしょうか?私のNPUはtfliteモデルと同じものだと思いますか? ありがとう。
View full article
S32K396 LPSPI DMA 你好 我无法让带有 dma 的 lpspi 正常工作。我研究了许多示例项目和社区帖子,但似乎无法解决我的问题。很多帖子和示例都是针对 s32k344 或类似产品的。我想我漏掉了 S32k396 的一些信息。以下是我的设置。我使用的是 S32K3 实时驱动程序 AUTOSAR R23-11 版本 7.0.0。 当我禁用 DMA 时,SPI 运行正常。因此,引脚和端口应该是正确的。 Mcl: 我已启用 DMA 支持。 与 Rx 相同,只是名称不同 ("Tx" -> " Rx") 麦库 在 Mcu/McuModuleConfiguration/McuModeSettingConf/McuPeripheral 中,我启用了以下外设时钟:eDMA、eDMA_TCD_0 和 eDMA_TCD_1、DMAMUX_0、LPSPI_1。 RM: 我启用了 dma mux 支持,并启用了全局启动。 SPI: IntCtrl_Ip: 最后,是我的启动: // MCAL Autosar 驱动程序的初始化 //CLK 如果(Clock_Ip_Init(&Mcu_aClockConfigPB_BOARD_InitPeripherals[0]) == CLOCK_IP_ERROR){ 返回假的 }//else CLOCK_IP_SUCCESS //MCU Mcu_Init(&Mcu_Config_BOARD_InitPeripherals); //端口 Port_Init(&Port_Config_BOARD_InitPeripherals); //中断 如果(IntCtrl_Ip_Init(&IntCtrlConfig_0) == intctrl_ip_status_error){ 返回假的 } //DMA Rm_Init(&Rm_Config_BOARD_INITPERIPHERALS); Mcl_Init(&Mcl_Config_BOARD_InitPeripherals); //LPSPI1 Lpspi_Ip_StatusTypelpspi_status = Lpspi_Ip_Init(&Lpspi_Ip_PhyUnitConfig_SpiPhyUnit_1_Instance_1_BOARD_InitPeripherals); 如果(lpspi_status==lpspi_ip_status_success){ Lpspi_Ip_UpdateTransferMode(Lpspi_Ip_DeviceAttributes_SpiExternalDevice_1_Instance_1_BOARD_InitPeripherals.实例, lpspi_IP_interrupt); //传输:中断 Lpspi_Ip_UpdateLsb(&Lpspi_Ip_DeviceAttributes_SpiExternalDevice_1_Instance_1_BOARD_InitPeripherals, 0); //0=MSB(大二进制) }否则 返回假的 发送时,我使用这样的方式: Lpspi_Ip_AsyncTransmit(&Lpspi_Ip_DeviceAttributes_SpiExternalDevice_1_Instance_1_BOARD_InitPeripherals, tx_buffer、 rx_buffer、 1, lpspi1_callback ); 感谢您的帮助! 路易斯 Re: S32K396 LPSPI DMA 你好@Luis1 首先,根据所提供的信息,您似乎在混合低级驱动程序(IP 层)和高级驱动程序(MCAL)。一般不建议采用这种方法,特别是如果您的实现打算符合 AUTOSAR 标准。 关于您的配置,我有以下看法: 对于 LPSPI1,您已将 AIPS_PLAT_CLK 指定为 SpiPhyUnitClockRef。但是,它的源时钟是 AIPS_SLOW_CLK。因此,您需要在 MCU 驱动程序的 McuClockReferencePoint 配置中包含该时钟,并相应地将其分配给该 SPI 实例。 关于你的代码,如前所述,你混合了两个软件层,不建议这样做。使用低级驱动程序时会有一些例外情况,因为某些模块仅在 MCAL(例如 RM)中可用,在那里可能需要混合层。 我建议查看以下话题,其中提供了两个示例:一个使用 IP 层,另一个使用 MCAL。这将有助于您了解每种方法所需的应用程序接口的差异。请注意,这些示例并非专门针对 S32K396 设备,但它们仍然可以作为有用的参考。 使用 DMA DS3.5 RTD500 的 S32K344 SPI 发送和接收示例 BR、VaneB Re: S32K396 LPSPI DMA 你好@VaneB 感谢您的回复。现在可以用了 .这些都是我必须做的: 首先,你说得完全正确。LPSPI 1-5 的时钟与 LPSPI0 的时钟不同。就这样,我在瞄准镜上看到了一个 CLK 和一个 CS,但仍然没有数据。 然后,在您提供的一个示例的帮助下,我从 IntCtrl_Ip 驱动程序切换到符合 AUTOSAR 标准的 Platform 驱动程序。现在我的元器件看起来像这样: 现在(或者说在使用新驱动程序之前),我在某些时候有了新的数据,但大部分时间还是老样子。将 spi 传输缓冲区更改为非缓存区后,我终于找到了窍门。您在此处进行了解释:S32K344 - LPSPI 和 DMA 配置 以下是我的代码,其中没有可缓存区域: #definespi_start_sec_var_cleared_unspecified_no_cacheable #include "Spi_MemMap.h" __attribute__((对齐(32))) uint8tel_rx_dma[MAX_BYTES_RX_TX_ARRAY]; __attribute__((对齐(32))) uint8tel_tx_dma[MAX_BYTES_RX_TX_ARRAY]; #definespi_stop_sec_var_cleared_unspecified_no_cacheable #include "Spi_MemMap.h" 之后,我很快就把 LPSPI0 作为从设备运行起来(LPSPI1 是主设备)。 谢谢@VaneB! 路易斯 Re: S32K396 LPSPI DMA 你好@Luis1 很高兴听到问题解决了!
View full article
i.MX RT1176 - SDRAMからのデュアルコアXIPおよびCM4コード実行 NXPサポートチーム様 私たちはi.MX RT1176プロセッサを使用しており、CM7コアとCM4コアの両方を使用する予定です。両方のプログラムイメージは、FlexSPI1を介して接続された単一のQSPIフラッシュに保存されます。 質問が2つあります。 1. デュアルコアXIP CM7とCM4の両方が、同じQSPIフラッシュから同時にXIP(Execute in Place)操作を実行できるかどうかを知りたいです。 RT1176では、単一のFlex SPIフラッシュからのデュアルコアXIPの同時実行はサポートされていますか? 両方のコアが同じフラッシュインターフェースから同時に命令を取得する場合、パフォーマンスやバスアービトレーションに関して考慮すべき点はありますか? この構成を示すNXP SDKのサンプルやアプリケーションノートはありますか? 2. SDRAMからのCM4コード実行 ほとんどの例では、CM4イメージをITCM RAMにロードして実行していることがわかっています。しかし、CM4上でより負荷の高いタスクを実行する予定であり、ITCMが提供する以上のコード領域が必要になる可能性があります。CM4コアは、ITCMではなくSDRAM(SEMC経由)からコードを実行することは可能でしょうか?もし可能であれば、このアプローチを扱ったサンプルやアプリケーションノートはありますか? 何かアドバイスをいただければ幸いです。 よろしくお願いします、 カリクスト・システムズ株式会社 Re: i.MX RT1176 - Dual-core XIP and CM4 code execution from SDRAM NXPサポート様、こんにちは。 これらの質問に関して、何か最新情報やガイダンスがあるかどうか確認させてください。 ご回答をお待ちしています。
View full article
Running 2 M7 binaries for M7_0 and M7_1 from SD card on S32G-VNP-GLDBOX3 (S32G399) Hello, I have created two projects in S32 DS, for M7_0 and M7_1, I have tested via debugger that both cores are executing the respective applications. Now I want to test by running both binaries from SD card. Previously I have tried running one application with DCD and IVT setup and flashed via S32 Flashing tool. It works but I am not sure how to flash two binaries with the same workflow or will it be a different workflow altogether. The goal is to have them running out of SD card. In future there will be a total of 4 binaries for each M7 core. Thanks, Rizwan. Re: Running 2 M7 binaries for M7_0 and M7_1 from SD card on S32G-VNP-GLDBOX3 (S32G399) This is how I was able to boot both M7_0 and M7_1 binaries without NXP autosar bootloader: let ROM boot only one IVT image from SD make that IVT image contain one combined application payload place both M7_0 and M7_1 raw binaries into that payload at their correct linked SRAM offsets let M7_0 start M7_1 at runtime using the normal core-start mechanism The important point is that ROM does not boot two independent M7 application images for you. It loads one application image. So two separate .bin files cannot just be flashed independently and expected to boot together from SD. What I did My linker placements are: M7_0 load base: 0x34304000 M7_1 load base: 0x34D04000 M7_1 start/vector address is: 0x35204400 M7_0 entry address is: 0x34304010 So the combined payload has to look like this in memory: offset 0x00000000 -> M7_0 binary at 0x34304000 offset 0x00A00000 -> M7_1 binary at 0x34D04000 This means you must create a padded combined binary. Simple concatenation is wrong unless the second image is linked immediately after the first one. Why this is needed ROM copies one contiguous application image to SRAM. If M7_1 is linked at a higher SRAM address, the gap between the two images must exist in the combined payload as padding. So the image creation logic is: choose base load address = M7_0 load address place M7_0.bin at offset M7_0_ADDR - BASE place M7_1.bin at offset M7_1_ADDR - BASE fill the gap with 0x00 use the combined file as the application payload for IVT packaging My IVT/application values For my current build: application load address: 0x34304000 application entry address: 0x34304010 combined payload size: 0xF3C008 Tools I used I made a small Python helper plus a .bat wrapper: image_util.py combine_m7_bins.bat The batch file runs the combine command directly and outputs: artefacts/combined_m7.bin I will attach/upload those files separately. Important runtime note Combining the binaries is only the image-loading part. You still need correct multicore runtime behavior: M7_0 must start M7_1 M7_1 must be started at the correct vector/start address global init must be coordinated between cores In my setup, M7_0 is responsible for releasing M7_1.
View full article
KW47 ROM 引导加载程序如何决定哪个映像是最新的? 您好,NXP团队: 我正在研究 KW47双映像启动/OTA更新概念,我想澄清一下 ROM引导加载程序在启动期间如何选择最新的镜像。 据我所知,在双镜像设置中,内部闪存中可能有两个有效的应用程序镜像: 主映像 -> 地址由 ROMCFG/IFR0 次 映像中的启动映像基本地址配置-> 地址由 FLW 区域/ABASE 在 ROMCFG/I FR0 中配置 在 RESET 期间,ROM 引导加载程序会检查两个映像并决定应启动哪一个映像。 我的疑问主要在于这一点: KW47 ROM 引导加载程序如何知道哪个映像较新?
View full article
How does the KW47 ROM Bootloader decide which image is newest? Hi NXP Team, I am working on the KW47 dual-image boot / OTA update concept, and I would like to clarify how the ROM bootloader selects the newest image during boot. From my understanding, in a dual-image setup we may have two valid application images in internal flash, for example: Primary Image -> Address configured by Boot Image Base Address in ROMCFG / IFR0 Secondary Image -> Address configured by FLW region / ABASE in ROMCFG / IFR0 During reset, the ROM bootloader checks both images and decides which one should be booted. My doubt is mainly about this point: How does the KW47 ROM bootloader know which image is newer?
View full article
在 S32G-VNP-GLDBOX3 (S32G399) 上从 SD 卡运行 2 个 M7_0 和 M7_1 的 M7 二进制文件 您好, ,我在 S32 DS 中为 M7_0 和 M7_1 创建了两个项目,我通过调试器测试了两个内核都在执行各自的应用程序。现在我想通过运行 SD 卡中的两个二进制文件来进行测试。 之前,我曾尝试使用 DCD 和 IVT 设置运行一个应用程序,并通过 S32 闪存工具进行闪存。它可以运行,但我不确定如何使用相同的工作流程刷新两个二进制文件,还是完全不同的工作流程。目标是让他们用完 SD 卡。将来,每个 M7 内核总共有 4 个二进制文件。 谢谢, Rizwan。 Re: Running 2 M7 binaries for M7_0 and M7_1 from SD card on S32G-VNP-GLDBOX3 (S32G399) 这就是我能够在没有恩智浦 autosar 引导加载程序的情况下同时启动 M7_0 和 M7_1 二进制文件的原因: 让 ROM 只从 SD 启动一个 IVT 镜像 使 IVT 图像包含一个组合应用有效载荷 将 M7_0 和 M7_ 1 原始二进制文件以正确的链接 SRAM 偏移量放入该负载中 让 M7_0 在运行时使用正常的核心启动机制启动 M7_1 重要的一点是,ROM 无法为您启动两个独立的 M7 应用程序映像。它加载一个应用程序图像。因此,不能单独刷新两个单独的.bin 文件并期望从 SD 一起启动。 我做了什么 我的链接器位置是 M7_0 负载基数: 0x34304000 M7_1 负载基数: 0x34D04000 M7_1 起始/向量地址为: 0x35204400 M7_0 输入地址为: 0x34304010 因此,合并后的有效载荷在内存中必须是这样的: 偏移量 0x00000000 -> M 7_0 二进制位于 0x34304000 偏移量 0x00a00000 -> M7_1 二进制位于 0x34d04000 这意味着你必须创建一个填充的组合二进制文件。简单的连接是错误的,除非第二张图片紧接在第一张图片之后。 为什么需要这样做 ROM 将一个连续的应用映像拷贝到 SRAM 中。如果 M7_1 连接到更高的 SRAM 地址,则两个图像之间的间隙必须作为填充存在于组合有效载荷中。 因此,创建图像的逻辑是 选择基本负载地址 = M7_0 负载地址 将 M7_0.bin 在偏移量 M7_0_ADDR- BASE 将 M7_1.bin 在偏移量 M7_1_ADDR- BASE 用 0x00 填补空白 使用合并文件作为 IVT 包装的应用有效载荷 我的 IVT/应用程序值 对于我目前的版本: 应用程序加载地址: 0x34304000 应用程序入口地址: 0x34304010 组合有效载荷大小: 0xF3C008 我使用的工具 我制作了一个小型 Python 辅助程序和一个 .bat 封装程序: image_util.py combine_m7_bins.bat 批处理文件直接运行合并命令并输出: artefacts/combined_m7.bin 我将单独附上/上传这些文件。 重要运行注意事项 合并二进制文件只是图像加载部分。 您仍然需要正确的多核运行时行为: M7_0 必须启动 M7_1 M7_1 必须以正确的矢量/起始地址启动 全局启动必须在核心之间协调 在我的设置中, M7_0 负责发布 M7_1。
View full article
AAOS OTA アップグレード失敗: スロット切り替え後にデバイスがブートローダーで停止します (Android オートモーティブ 13.0.0_2. NXPサポートチームの皆様、こんにちは。 問題報告: Android オートモーティブ 13.0.0_2.3.0 (Linux 6.1.36_2.1.0BSP) → Android オートモーティブ 14.0.0_1.1.0(LF_v6.1.55BSP) OTAアップグレード失敗(A/Bスロットスイッチがブートローダーで停止) **環境:** * ソースバージョン(動作確認済み): * Android オートモーティブ OS: 13.0.0_2.3.0 * BSP: Linux 6.1.36_2.1.0 * 対象バージョン(アップグレード): * Android オートモーティブ OS: 14.0.0_1.1.0 * BSP: LF_v6.1.55 * ビルドタイプ: * ユーザーデバッグ(ソースビルドとターゲットビルドの両方) * ハードウェアプラットフォーム: * i.MX8Q (mek_8qxp mek) --- **OTAパッケージの詳細:** * OTAタイプ:A/B OTA(payload.binベース) * ペイロードの位置: 「`」 /data/ota_package/payload.bin 「`」 * プロパティファイル: 「`」 /data/ota_package/payload_properties.txt 「`」 --- **使用されたOTAコマンド:** 「`」 update_engine_client \ --payload=file:///data/ota_package/payload.bin \ - アップデート \ --headers="$(cat /data/ota_package/payload_properties.txt)" 「`」 --- **観察された行動:** 1. OTAアップデート処理は、直ちにエラーなく完了します。 2. アップデート後にデバイスが再起動する。 3. アクティブスロットの変更: 「`」 getprop ro.boot.slot_suffix _a → _b(期待される動作) 「`」 4.しかし、デバイスはAndroid 14で起動しません。 5. デバイスがブートローダーのループに陥る: 「`」 U-Boot SPL 2023.04 (2026年5月1日 15:11:21 +0530) 通常起動 MMC1から起動しようとしています 認証キーはまだプログラムされていません bootloader_bから起動しています... 「`」 (繰り返し) --- **その他の所見:** * OTAアップデート前: 「`」 getprop ro.build.version.release 13 「`」 * 再起動後: * スロットスイッチが正しく作動します * しかし、Androidのユーザー空間は一度も登場しない 追加のログや詳細情報が必要な場合はお知らせください。 再開まで今しばらくお待ちください。 よろしくお願いします、 ハリシュ・K 評価ボード Re: AAOS OTA Upgrade Failure: Device Stuck in Bootloader After Slot Switch (Android Automotive 13.0. こんにちは、 セキュリティ保護されたデバイス(閉じる)を使用してテストしていますか? また、ヘッダーがpayload_properties.txtの内容と完全に一致していることを確認してください。「スペース」や「リターン」文字はもう使用できません。 よろしくお願いいたします。 アルド。
View full article
S32DS_ARM_Win32_v2.2 アクティベーションコード取得問題 S32DS_ARM_Win32_v2.2 公式サイトでは現在アクティベーションコードが提供されておらず、リンクも見つかりません。しかし、お客様のソフトウェアの有効期限が切れているため、バージョン2.2を引き続き使用したいのですが、アクティベーションコードの提供をお手伝いいただけますか? Re: S32DS_ARM_Win32_v2.2 激活码获取问题 申し訳ありませんが、S32DS_Power_Win32_v2.1です Re: S32DS_ARM_Win32_v2.2 激活码获取问题 こんにちは、 S32DS ライセンスが延長されました。 Re: S32DS_ARM_Win32_v2.2 激活码获取问题 私のS32DS_ARM_Win32_v2.2ライセンスも期限切れです。ライセンスを延長していただけますか? 59DD-0D10-2BAA-6F30 Software Activation Code is already used on this station for 3 Activated 2.2.   愛润色 130 / 5000   これが私の認証コードです。B029-D748-6F13-04AD ソフトウェアのアクティベーションコードは、このステーションで既に3つのアクティベート済み2.2に使用されています。 手伝っていただけませんか?ありがとう!! Re: S32DS_ARM_Win32_v2.2 激活码获取问题 您好,我的也無法激活,显表示「あなたのソフトウェア アクティベーション コードは別の機能用です。返却しますか?」能帮我解决一下吗? Re: S32DS_ARM_Win32_v2.2 激活码获取问题 製品:S32 Design Studio for ARM アクティベーションID: 9123-5215-159A-B8D0 ライセンスの延長にご協力いただけますでしょうか?ありがとう。 回复: S32DS_ARM_Win32_v2.2 激活码获取问题 現在の免許証の有効期限が切れたので、新しい免許証の申請手続きを手伝っていただけますか? 4249-2545-9811-9321 よろしくお願い申し上げます。
View full article