Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
如何启用DDR模式 众所周知,RT 系列微控制器支持 XIP(就地执行)模式,并通过减少引脚数量而受益。串行 NOR 闪存最常用,因为 FlexSPI 模块可以高效地从串行 NOR 闪存中提取代码和数据供 Cortex-M7 执行。 获取方式是通过使用 Quad IO Fast Read 命令实现,同时,串行 NOR flash 在 SDR(Single Data Transfer Rate)模式下工作,它在 SCLK 上升沿接收数据,并在 SCLK 下降沿传输数据。与 SDR 模式相比,DDR(双数据传输速率)模式具有更高的吞吐量。它是否能为 XIP 模式提供更好的性能,如果我们希望串行 NOR 闪存以 DDR(双数据传输速率)模式工作,该如何实现? SDR & DDR mode SDR模式: 在 SDR(单数据传输率)模式下,数据仅在时钟的一个边沿(上升沿或下降沿)上计时。这意味着,为了使SDR能够以X Mbps的速率传输数据,时钟位速率需要为2X Mbps。 DDR mode: 对于 DDR(双数据传输速率)模式,也称为 DTR(双传输速率)模式,数据在时钟的上升沿和下降沿传输。这意味着数据以 X Mbps 的速度传输时,仅需时钟位速率为 X Mbps,从而使带宽翻倍(如图 1 所示)。   图1 启用DDR模式 以下步骤说明了如何使 i.MX RT1060 从 QSPI 启动并在 DDR 模式下工作。 注意:开发板是MIMXRT1060,IDE 是MCUXpresso IDE 打开名为“hello_world”的模板 修改FDCB(Flash设备配置块) a)将controllerMiscOption参数设置为支持DDR读命令。 b) 将串行闪存频率设置为 60 MHz。 c)将 DDR 读取命令解析为命令序列。 下表显示了 DDR Quad IO FAST READ 指令的模板命令序列,它与 IS25WP064 的 FRQDTR(Fast Read Quad IO DTR)序列几乎匹配(如图 2 所示)。   图2 FRQDTR序列 d)调整虚拟周期。 虚拟周期应与特定的串行时钟频率相匹配,FRQDTR序列命令的默认虚拟周期为6(如下表所示)。   然而,当串行时钟频率为 60MHz 时,虚拟周期应变为 4(如下表所示)。   因此,需要通过在 FDCB 中手动添加“SET READ PARAMETERS”命令序列(如图 3 所示),配置读取寄存器的 [P6:P3] 位(如下表所示)。 图 3 SET READ PARAMETERS 命令序列 此外,在 DDR 模式下,SCLK 周期是串行根时钟周期的两倍。操作数值应设置为 2N、2N-1 或 2*N+1 ,具体取决于器件数据表中定义的虚拟周期。 最后,我们可以得到一个调整后的 FCDB,如下所示。 // Set Dummy Cycles #define FLASH_DUMMY_CYCLES 8 // Set Read register command sequence's Index in LUT table #define CMD_LUT_SEQ_IDX_SET_READ_PARAM 7 // Read,Read Status,Write Enable command sequences' Index in LUT table #define CMD_LUT_SEQ_IDX_READ 0 #define CMD_LUT_SEQ_IDX_READSTATUS 1 #define CMD_LUT_SEQ_IDX_WRITEENABLE 3 const flexspi_nor_config_t qspiflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackFromDqsPad, .csHoldTime = 3u, .csSetupTime = 3u, // Enable DDR mode .controllerMiscOption = kFlexSpiMiscOffset_DdrModeEnable | kFlexSpiMiscOffset_SafeConfigFreqEnable, .sflashPadType = kSerialFlash_4Pads, //.serialClkFreq = kFlexSpiSerialClk_100MHz, .serialClkFreq = kFlexSpiSerialClk_60MHz, .sflashA1Size = 8u * 1024u * 1024u, // Enable Flash register configuration .configCmdEnable = 1u, .configModeType[0] = kDeviceConfigCmdType_Generic, .configCmdSeqs[0] = { .seqNum = 1, .seqId = CMD_LUT_SEQ_IDX_SET_READ_PARAM, .reserved = 0, }, .lookupTable = { // Read LUTs [4*CMD_LUT_SEQ_IDX_READ] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xED, RADDR_DDR, FLEXSPI_4PAD, 0x18), // The MODE8_DDR subsequence costs 2 cycles that is part of the whole dummy cycles [4*CMD_LUT_SEQ_IDX_READ + 1] = FLEXSPI_LUT_SEQ(MODE8_DDR, FLEXSPI_4PAD, 0x00, DUMMY_DDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES-2), [4*CMD_LUT_SEQ_IDX_READ + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00), // READ STATUS REGISTER [4*CMD_LUT_SEQ_IDX_READSTATUS] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, 0, 0, 0), // WRTIE ENABLE [4*CMD_LUT_SEQ_IDX_WRITEENABLE] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x00), // Set Read register [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x63, WRITE_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM + 1] = FLEXSPI_LUT_SEQ(STOP,FLEXSPI_1PAD, 0x00, 0, 0, 0), }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, }; DDR模式真的更好吗? 根据 RT1060 的数据手册,下表展示了 FlexSPI 操作的最大频率。由于 MIMXRT1060 板载的 QSPI 闪存为IS25WP064AJBLE,该芯片不包含 MQS 引脚,因此将 MCR0.RXCLKsrc 设置为 1(内部虚拟读取时钟脉冲,从 DQS 引脚环回)是最优选项。 工作模式 RXCLKsrc=0 RXCLKsrc=1 RXCLKsrc=3 SDR 60 MHz 133 MHz 166 MHz DDR 30 MHz 66 MHz 166 MHz 换句话说,QSPI 在 SDR 模式下最高可达 133 MHz,而在 DDR 模式下则为 66 MHz。从吞吐量来看,它们几乎相同。似乎 DDR 模式并非 IS25WP064AJBLE 的较优选择,后续实验将验证这一假设。 实验 mbedtls_benchmark 我使用 mbedtls_benchmark 作为第一个测试演示,并在以下条件下运行该演示: 100MH,SDR模式; 133MHz, SDR mode; 66MHz, DDR mode; 根据相应的打印信息(如下所示),我制作了一张比较表,并在上述三种条件下标出了实施项目中表现最差的项,如图 4 所示。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PllPfd2Clk is 720000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 18139.63 KB/s, 27.10 cycles/byte SHA-1 : 44495.64 KB/s, 12.52 cycles/byte SHA-256 : 47766.54 KB/s, 11.61 cycles/byte SHA-512 : 2190.11 KB/s, 267.88 cycles/byte 3DES : 1263.01 KB/s, 462.49 cycles/byte DES : 2962.18 KB/s, 196.33 cycles/byte AES-CBC-128 : 52883.94 KB/s, 10.45 cycles/byte AES-GCM-128 : 1755.38 KB/s, 329.33 cycles/byte AES-CCM-128 : 2081.99 KB/s, 279.72 cycles/byte CTR_DRBG (NOPR) : 5897.16 KB/s, 98.15 cycles/byte CTR_DRBG (PR) : 4489.58 KB/s, 129.72 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1297.53 KB/s, 448.03 cycles/byte HMAC_DRBG SHA-1 (PR) : 1205.51 KB/s, 486.04 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1786.18 KB/s, 327.70 cycles/byte HMAC_DRBG SHA-256 (PR) : 1779.52 KB/s, 328.93 cycles/byte RSA-1024 : 202.33 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 9.00 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 5.00 handshake/s ECDH-secp256r1 : 9.33 handshake/s DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PllPfd2Clk is 396000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 16047.13 KB/s, 27.12 cycles/byte SHA-1 : 44504.08 KB/s, 12.54 cycles/byte SHA-256 : 47742.88 KB/s, 11.62 cycles/byte SHA-512 : 2187.57 KB/s, 267.18 cycles/byte 3DES : 1262.66 KB/s, 462.59 cycles/byte DES : 2786.81 KB/s, 196.44 cycles/byte AES-CBC-128 : 52807.92 KB/s, 10.47 cycles/byte AES-GCM-128 : 1311.15 KB/s, 446.53 cycles/byte AES-CCM-128 : 2088.84 KB/s, 281.08 cycles/byte CTR_DRBG (NOPR) : 5966.92 KB/s, 97.55 cycles/byte CTR_DRBG (PR) : 4413.15 KB/s, 130.42 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1291.64 KB/s, 449.47 cycles/byte HMAC_DRBG SHA-1 (PR) : 1202.41 KB/s, 487.05 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1748.38 KB/s, 328.16 cycles/byte HMAC_DRBG SHA-256 (PR) : 1691.74 KB/s, 329.78 cycles/byte RSA-1024 : 201.67 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 8.67 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 4.67 handshake/s ECDH-secp256r1 : 9.00 handshake/s 图4 性能比较 我们发现,当 QSPI 以 DDR 模式运行且频率为 66 MHz时,大多数实现项的性能表现最差。 Coremark 演示 第二个演示是在上述三种条件下运行Coremark演示,结果如下所示。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PLL3 PFD0 is 720000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391889200 Total time (secs): 16.328717 Iterations/Sec : 2449.671999 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.671999 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK SDR Mode run at 133 MHz. FlexSPI clock source is 3, FlexSPI Div is 4, PLL3 PFD0 is 664615368 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391888682 Total time (secs): 16.328695 Iterations/Sec : 2449.675237 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.675237 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PLL3 PFD0 is 396000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391890772 Total time (secs): 16.328782 Iterations/Sec : 2449.662173 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.662173 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK 在比较 CoreMark 分数后,当 QSPI 以 DDR 模式运行且频率为 66 MHz 时,其 CoreMark 分数最低。但实际上它们非常接近。 通过上述两项测试,我们可以得出结论:DDR 模式可能不是更好的选择,至少对于 i.MX RT10xx 系列 MCU 而言。 i.MXRT 102x i.MXRT 105x i.MXRT 106x
記事全体を表示
BMS & MBDT - MC33771B/MC33772BにおけるS32KとのTPL通信 1. はじめに 前回の記事では、従来のSPIプロトコルを使用してS32KをMC33771B/MC33772Bに接続する方法を学びました。その方法を用いると、アプリケーションは最大14セルのバッテリー・パックを管理できます。 この記事では、S32K1xxボードとMC3377xBTPLバッテリー・セルコントローラ間のTPL通信セットアップについて詳しく説明します。ここでは、14を超えるセルを直列接続できるバッテリー・パック用に、モデル・ベース設計ツール・ボックスを使用して設計されたバッテリー・マネジメント・システム・モデル用ハードウェアおよびソフトウェアのセットアップを取り扱います。この記事を読むと、ユーザーはバッテリー・セルコントローラのハードウェアを設定し、セルおよびパックの電圧、電流、温度、故障状態を読み取るSimulinkモデルをデザインできるようになります。測定値はFreeMasterを利用してホストPCに表示されます。 2. ハードウェア 14を超えるセルで構成される大型のバッテリー・バックを制御するには、バッテリー・パックを6セルまたは14セル(NXPセル・コントローラが接続できる最大数)のモジュールに「分割」し、各モジュールを監視する必要があります。メインMCUは、必要な情報を取得または設定するために、すべてのコントローラと通信する必要があります。この通信を実現するために、すべてのセル・コントローラをデイジー・チェーン・トポロジで接続し、トランシーバを使用してメインMCUをTPLネットワークに接続します。 このセットアップは以下のパーツで構成されます。 S32K144 EVB FRDM33664BEVB 1~15個のFRDM33771BTPLEVBまたはFRDM33772BTPLEVB 各セル・コントローラに対するBATT-6EMULATORまたはBATT-14EMULATOR S32K144EVB用のUSBケーブル、各エミュレータ用の12V電源 MC33664トランシーバをS32Kボードに接続します。これには2つの方法があります。1つは変換器ボードを使用する方法(UM1114の第2.4.3章のFRDM33664BEVB構成(TPL通信モード)を参照)、もう1つはワイヤで直接接続する方法です。上の写真では後者のアプローチを採用しましたが、UM11143 [1] の表6の説明に従って、ワイヤの代わりにパーフボードを使用しました。 ツイストペア・ケーブルを使用して、最大15個のバッテリー・セルコントローラを接続します(OUT+からIN+、OUT-からIN-)。 各EMULATORボードの電源を入れます。 3.ソフトウェア ソフトウェアのアプローチはSPIと非常によく似ています。このモデルには、MBD_S32K1xx_Config_Informationブロックと、FreeMaster通信用のFreeMaster_Configが必要です。 3.1 バッテリーセルコントローラー構成ブロック 前回の記事では、1つのSPIインスタンスのみを使用して、1つのBCCデバイスと通信しましたが、今回のTPLでは2つのSPIインスタンスが必要です。1つはスレーブ、もう1つはマスターとして構成します。ユーザーは、モデルに2つのLPSPI構成ブロックを追加して、使用するハードウェアインスタンスを選択する必要があります。 バッテリー・セルコントローラの [Configuration(構成)] には、同じMC3377xB_Configブロックを追加する必要があります。ここでは、モードをTPLに設定し、デバイス番号はBCCデバイス番号(この場合は2)に合わせて設定します。 次の [SPI] タブでは、マスターとスレーブのインスタンス番号、およびTPLトランシーバに接続されたチップ・セレクトを選択する必要があります。マスターSPIインスタンスでは、ハードウェア設計者がハードウェアSPIとは別のピンを割り当てた場合に、ユーザーが通常のGPIOをチップ・セレクト・ピンとして使用することもできます。 3.2 測定 値を読み取るには、SPI と同じブロックを使用しますが、今回は、読み取りたいバッテリーセルコントローラの CID を指定する必要があります。 上の図からわかるように、このアプリケーションでは2台のMC33772BTPLデバイスを使用しています。MC3377xB_Get_Valuesブロックは2つ追加しました。1つはCIDが1のデバイス用、もう1つはCIDが2のデバイス用です。合計のパック電圧は、各モジュール・スタック電圧の測定値の和です。すべてのセルが直列に接続されているため、CID1のデバイスについてのみパック電流を測定します。 4.例と検証 この記事には、上記の例が含まれています。あなたのセットアップでモデルを実行することは、プロジェクトの良い出発点となる可能性があります。コードが正常に生成され、ターゲットに展開された後、FreeMasterをUART経由でボードに接続し、以下のアプリケーションのようにホストPCで値を監視することができます。 5. リソース 5.1.  UM 11143 https://www.nxp.com/webapp/Download?colCode=UM11143&location=null 5.2. FRDM33664BEVB https://www.nxp.com/design/development-boards/analog-toolbox/...  5.3. FRDM33771BTPLEVB https://www.nxp.com/docs/en/user-guide/FRDM33771BTPLEVBUG.pdf 5.4. FRDM33772BTPLEVB https://www.nxp.com/docs/en/user-guide/FRDM33772BTPLEVBUG.pdf 5.5. S32K144 EVB https://www.nxp.com/design/development-boards/automotive-development-...  この記事では、S32K1xxボードとMC3377xBTPLバッテリー・セルコントローラ間のTPL通信セットアップについて詳しく説明します。ここでは、14を超えるセルを直列接続できるバッテリー・パック用に、モデル・ベース設計ツール・ボックスを使用して設計されたバッテリー・マネジメント・システム・モデル用ハードウェアおよびソフトウェアのセットアップを取り扱います。この記事を読むと、ユーザーはバッテリー・セルコントローラのハードウェアを設定し、セルおよびパックの電圧、電流、温度、故障状態を読み取るSimulinkモデルをデザインできるようになります。測定値はFreeMasterを利用してホストPCに表示されます。
記事全体を表示
DDRモードを有効にする方法 ご存知のように、RTシリーズMCUはXIP (Execute in place) モードをサポートしており、ピン数を節約できるという利点があります。FlexSPIモジュールはシリアルNORフラッシュからコードとデータを非常に効率的に取得してCortex-M7を実行できるため、シリアルNORフラッシュが最も一般的に使用されています。 フェッチ方法はQuad IO Fast Readコマンドを利用して実装されています。一方、シリアルNORフラッシュはSDR(単一データ転送レート)モードで動作し、SCLKの立ち上がりエッジでデータを受信し、SCLKの立ち下がりエッジでデータを送信します。SDRモードと比較すると、DDR(デュアルデータ転送レート)モードはスループット容量が高く、XIPモードでより良いパフォーマンスを提供できるかどうか、またシリアルNORフラッシュをDDRモードで動作させる方法について教えてください。 SDR & DDR mode SDRモード: SDR(シングルデータ転送レート)モードでは、データはクロックの一方のエッジ(立ち上がりエッジまたは立ち下がりエッジ)でのみクロックされます。つまり、SDRでデータがX Mbpsで送信されるには、クロック・ビット・レートが2X Mbpsである必要があります。 DDR mode: DDR(デュアルデータ転送レート)モード(DTR(デュアル転送レート)モードとも呼ばれる)では、データはクロックの立ち上がりエッジと立ち下がりエッジの両方で転送されます。これは、データがX Mbpsで伝送される場合、クロック・ビット・レートもX Mbpsである必要があり、したがって帯域幅が2倍になることを意味します(図1を参照)。   図1 DDRモードを有効にする 以下の手順は、DDRモードで動作するi.MX RT1060をQSPIから起動する方法を示しています。 注記:ボードは MIMXRT1060、IDEは MCUXpresso IDEです hello_worldをテンプレートとして開きます FDCB(フラッシュデバイス構成ブロック)を変更する a) controllerMiscOptionパラメータをDDR読み取りコマンドをサポートするように設定してください。 b) シリアル・フラッシュ周波数を60MHzに設定します。 c) DDR読み出しコマンドをコマンド・シーケンスに解析します。 次の表は、DDR Quad IO FAST READ 命令のテンプレートコマンド・シーケンスを示しており、IS25WP064のFRQDTR (Fast Read Quad IO DTR) シーケンスとほぼ一致しています(図2を参照)。   図2 FRQDTRシーケンス d)ダミーサイクルを調整します。 ダミーサイクルは特定のシリアルクロック周波数と一致する必要があり、FRQDTRシーケンスコマンドのデフォルトのダミーサイクルは6です(以下の表に示すように)。   しかし、シリアルクロックの周波数が60MHzの場合、ダミーサイクルは4に変更する必要があります(以下の表を参照してください)。   そのため、FDCB に SET READ PARAMETERS コマンドシーケンス(図 3 参照)を手動で追加し、読み取りレジスタの [P6:P3] ビット(下表参照)を設定する必要があります。 図3 SET READ PARAMETERS コマンドシーケンス さらに、DDRモードでは、SCLKサイクルはシリアル・ルート・クロック・サイクルの2倍になります。オペランドの値は、デバイスのデータシートでダミー・サイクルがどのように定義されているかに応じて 2N、2N-1、または2*N+1 に設定する必要があります。 最終的に、以下のように調整されたFCDBを取得できます。 // Set Dummy Cycles #define FLASH_DUMMY_CYCLES 8 // Set Read register command sequence's Index in LUT table #define CMD_LUT_SEQ_IDX_SET_READ_PARAM 7 // Read,Read Status,Write Enable command sequences' Index in LUT table #define CMD_LUT_SEQ_IDX_READ 0 #define CMD_LUT_SEQ_IDX_READSTATUS 1 #define CMD_LUT_SEQ_IDX_WRITEENABLE 3 const flexspi_nor_config_t qspiflash_config = { .memConfig = { .tag = FLEXSPI_CFG_BLK_TAG, .version = FLEXSPI_CFG_BLK_VERSION, .readSampleClksrc=kFlexSPIReadSampleClk_LoopbackFromDqsPad, .csHoldTime = 3u, .csSetupTime = 3u, // Enable DDR mode .controllerMiscOption = kFlexSpiMiscOffset_DdrModeEnable | kFlexSpiMiscOffset_SafeConfigFreqEnable, .sflashPadType = kSerialFlash_4Pads, //.serialClkFreq = kFlexSpiSerialClk_100MHz, .serialClkFreq = kFlexSpiSerialClk_60MHz, .sflashA1Size = 8u * 1024u * 1024u, // Enable Flash register configuration .configCmdEnable = 1u, .configModeType[0] = kDeviceConfigCmdType_Generic, .configCmdSeqs[0] = { .seqNum = 1, .seqId = CMD_LUT_SEQ_IDX_SET_READ_PARAM, .reserved = 0, }, .lookupTable = { // Read LUTs [4*CMD_LUT_SEQ_IDX_READ] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xED, RADDR_DDR, FLEXSPI_4PAD, 0x18), // The MODE8_DDR subsequence costs 2 cycles that is part of the whole dummy cycles [4*CMD_LUT_SEQ_IDX_READ + 1] = FLEXSPI_LUT_SEQ(MODE8_DDR, FLEXSPI_4PAD, 0x00, DUMMY_DDR, FLEXSPI_4PAD, FLASH_DUMMY_CYCLES-2), [4*CMD_LUT_SEQ_IDX_READ + 2] = FLEXSPI_LUT_SEQ(READ_DDR, FLEXSPI_4PAD, 0x04, STOP, FLEXSPI_1PAD, 0x00), // READ STATUS REGISTER [4*CMD_LUT_SEQ_IDX_READSTATUS] = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_READSTATUS + 1] = FLEXSPI_LUT_SEQ(STOP, FLEXSPI_1PAD, 0x00, 0, 0, 0), // WRTIE ENABLE [4*CMD_LUT_SEQ_IDX_WRITEENABLE] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0x00), // Set Read register [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM] = FLEXSPI_LUT_SEQ(CMD_SDR,FLEXSPI_1PAD, 0x63, WRITE_SDR, FLEXSPI_1PAD, 0x01), [4*CMD_LUT_SEQ_IDX_SET_READ_PARAM + 1] = FLEXSPI_LUT_SEQ(STOP,FLEXSPI_1PAD, 0x00, 0, 0, 0), }, }, .pageSize = 256u, .sectorSize = 4u * 1024u, .blockSize = 64u * 1024u, .isUniformBlockSize = false, }; DDRモードは本当に優れていますか? RT1060のデータシートによると、以下の表はFlexSPI動作の最大周波数を示しています。MIMXRT1060のオンボードQSPIフラッシュはIS25WP064AJBLEで、MQSピンは含まれていません。MCR0.rxclksrc=1セット(内部ダミー・リード・ストロボとDQSからのループバック)が最も最適なオプションです。 動作モード RXCLKsrc=0 RXCLKsrc=1 RXCLKsrc=3 SDR 60 MHz 133 MHz 166 MHz DDR 30 MHz 66 MHz 166 MHz 言い換えると、QSPIは、SDRモードでは最大133 MHzまで動作できるのに対し、DDRモードでは66 MHzです。スループット容量の観点から見ると、ほぼ同じです。DDRモードはIS25WP064AJBLEにとってより良いオプションではないようで、次の実験でその仮定が検証されるでしょう。 実験 mbedtls_benchmark 最初のテスト・デモとして mbedtls_benchmarkを使用し、以下の条件でデモを実行します。 100MH、SDRモード; 133MHz, SDR mode; 66MHz, DDR mode; 対応するプリントアウトの情報(以下に示すように)に基づいて、比較用の表を作成し、図4に示すように、上記の3つの条件の中で実装項目のパフォーマンスが最悪のものをマークしました。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PllPfd2Clk is 720000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 18139.63 KB/s, 27.10 cycles/byte SHA-1 : 44495.64 KB/s, 12.52 cycles/byte SHA-256 : 47766.54 KB/s, 11.61 cycles/byte SHA-512 : 2190.11 KB/s, 267.88 cycles/byte 3DES : 1263.01 KB/s, 462.49 cycles/byte DES : 2962.18 KB/s, 196.33 cycles/byte AES-CBC-128 : 52883.94 KB/s, 10.45 cycles/byte AES-GCM-128 : 1755.38 KB/s, 329.33 cycles/byte AES-CCM-128 : 2081.99 KB/s, 279.72 cycles/byte CTR_DRBG (NOPR) : 5897.16 KB/s, 98.15 cycles/byte CTR_DRBG (PR) : 4489.58 KB/s, 129.72 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1297.53 KB/s, 448.03 cycles/byte HMAC_DRBG SHA-1 (PR) : 1205.51 KB/s, 486.04 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1786.18 KB/s, 327.70 cycles/byte HMAC_DRBG SHA-256 (PR) : 1779.52 KB/s, 328.93 cycles/byte RSA-1024 : 202.33 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 9.00 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 5.00 handshake/s ECDH-secp256r1 : 9.33 handshake/s DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PllPfd2Clk is 396000000 mbedTLS version 2.16.6 fsys=600000000 Using following implementations: SHA: DCP HW accelerated AES: DCP HW accelerated AES GCM: Software implementation DES: Software implementation Asymmetric cryptography: Software implementation MD5 : 16047.13 KB/s, 27.12 cycles/byte SHA-1 : 44504.08 KB/s, 12.54 cycles/byte SHA-256 : 47742.88 KB/s, 11.62 cycles/byte SHA-512 : 2187.57 KB/s, 267.18 cycles/byte 3DES : 1262.66 KB/s, 462.59 cycles/byte DES : 2786.81 KB/s, 196.44 cycles/byte AES-CBC-128 : 52807.92 KB/s, 10.47 cycles/byte AES-GCM-128 : 1311.15 KB/s, 446.53 cycles/byte AES-CCM-128 : 2088.84 KB/s, 281.08 cycles/byte CTR_DRBG (NOPR) : 5966.92 KB/s, 97.55 cycles/byte CTR_DRBG (PR) : 4413.15 KB/s, 130.42 cycles/byte HMAC_DRBG SHA-1 (NOPR) : 1291.64 KB/s, 449.47 cycles/byte HMAC_DRBG SHA-1 (PR) : 1202.41 KB/s, 487.05 cycles/byte HMAC_DRBG SHA-256 (NOPR) : 1748.38 KB/s, 328.16 cycles/byte HMAC_DRBG SHA-256 (PR) : 1691.74 KB/s, 329.78 cycles/byte RSA-1024 : 201.67 public/s RSA-1024 : 7.00 private/s DHE-2048 : 0.40 handshake/s DH-2048 : 0.40 handshake/s ECDSA-secp256r1 : 8.67 sign/s ECDSA-secp256r1 : 4.67 verify/s ECDHE-secp256r1 : 4.67 handshake/s ECDH-secp256r1 : 9.00 handshake/s 図4 パフォーマンス比較 ほとんどの実装項目は、QSPIが66MHzのDDRモードで動作しているときに最悪のパフォーマンスを示すことがわかります。 Coremarkデモ 2番目のデモは、上記の3つの条件下でCoremarkデモを実行しており、その結果は以下に示されています。 SDR Mode run at 100 MHz. FlexSPI clock source is 3, FlexSPI Div is 6, PLL3 PFD0 is 720000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391889200 Total time (secs): 16.328717 Iterations/Sec : 2449.671999 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.671999 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK SDR Mode run at 133 MHz. FlexSPI clock source is 3, FlexSPI Div is 4, PLL3 PFD0 is 664615368 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391888682 Total time (secs): 16.328695 Iterations/Sec : 2449.675237 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.675237 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK DDR Mode run at 66 MHz. FlexSPI clock source is 2, FlexSPI Div is 5, PLL3 PFD0 is 396000000 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 391890772 Total time (secs): 16.328782 Iterations/Sec : 2449.662173 Iterations : 40000 Compiler version : MCUXpresso IDE v11.3.1 Compiler flags : Optimization most (-O3) Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x25b5 Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 2449.662173 / MCUXpresso IDE v11.3.1 Optimization most (-O3) / STACK CoreMarkスコアを比較した後、QSPIが66 MHzのDDRモードで動作しているときに、CoreMarkスコアが最も低くなります。しかし、実際にはかなり近いです。 上記の2つのテストから、少なくともi.MX RT10xxシリーズMCUにおいて、DDRモードはおそらく最良の選択肢ではないことがわかります。 i.MXRT 102倍 i.MXRT 105倍 i.MXRT 106倍
記事全体を表示
SENT transmitter using FLEXIO/PWM/...等 Hi, FLEXIO/PWMを使用して、実際のSENT TXモジュールなしでSENT TXパルスを生成することは可能ですか。等。NXPポータルでは、実際のSENTトランスミッターなしでSENT TX機能を実現できるという投稿を見かけます。 EVB S12ZVCA192持っています。実際のSENTトランスミッターがない場合、SENT送信TXパルスを送信したい。これをどのように実装できますか?S12ZVCファミリのマイクロには、これに対するサンプルコードはありますか? Re:FLEXIO / PWM /...等 こんにちは @UmaMaheswaraReddy、 私はちょうどこのトピックに関するあなたの他のスレッドに返信しました: https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SENT-Transmitter-channels/td-p/1963655 よろしくお願いします。 Daniel
記事全体を表示
LPCのシステムクロック このドキュメントでは、LPCデバイスに存在するシステムクロックを生成する際に使用される各種ソースクロックと、それらのクロックソースを管理する主要モジュールについて説明します。 デバイスで利用可能な各種クロックソースを把握することは重要です。デフォルトのクロック構成を変更する目的には、プロセッサ性能の向上、シリアル通信の特定ボーレート達成、省電力、あるいはタイマの基準クロック取得などが挙げられます。 本ドキュメントで使用したハードウェアは以下のとおりです。 LPC: LPCXpresso55S69 本ドキュメントで説明しているハードウェアおよびクロック管理モジュールは、各プラットフォームの概要を示したものであり、上記に列挙したデバイスはあくまで参考例です。同一プラットフォームでも、用語やハードウェアモジュールの機能が異なる場合があります。デバイスのハードウェアモジュールの詳細については、各デバイスのReference Manualを参照してください。 LPCプラットフォーム システム制御ブロック(SYSCON)は、LPCプラットフォームでのクロック生成を容易にし、さまざまなクロックバリエーションが可能です。LPC55S6xプラットフォームの最大クロック周波数は150MHzです。 例えば、LPC55S69デバイスは外部クロックソースを2つ、内部クロックソースを3つサポートしています。 ·    外部クロックソース 動作周波数1 MHz~32 MHzの水晶発振器。   動作周波数32.768 kHzのRTC水晶発振器。   · 内部クロックソース 内部フリーラニングオシレータ(FRO) このオシレータは、システムクロックとして使用できる選択可能な96 MHz出力と、選択された高周波数から分周された12 MHz出力を提供します。 これらの96 MHzおよび12 MHzの出力周波数は、192 MHzのフリーラニングオシレータから生成されます。12 MHz出力はリセット時のデフォルトクロックとなり、電源ピンが動作電圧に達して間もなくクリーンなシステムクロックを提供します。 96MHz クロックは USB デバイスにのみ使用でき、データ信号レートの USB ホストのタイミング要件には信頼できないことに注意してください。 32 kHz内部自励発振器 (FRO)。 FROは電圧および温度の全範囲で±2%の精度にトリミングされています。このFROはDeep-Sleepモード、Power-Downモード、Deep-Power-Downモードなどの複数のパワーダウンモードで有効にでき、32ビットリアルタイムクロック(RTC)のクロックソースとしても使用されます。 内部低消費電力オシレータ(FRO 1 MHz) この時計の精度は、組み立て中にトリミングを行った後、温度、電圧、シリコン処理の変動に対して±15%に制限されます。このFROはディープスリープモードで有効にでき、PLL0およびPLL1、WWDT(ウィンドウ・ウォッチドッグ・タイマー)のクロックソースとして使用できます。 LPC55S69は最大150 MHzで動作できますが、クロックソースは最終的なシステムクロック周波数(@150 MHz)より低速です。SYSCONブロック内の二つのフェーズループロックド(PLL0&PLL1)が、高周波数の外部クロックを用いずにCPUを最大動作周波数まで駆動します。 これらのPLLは、内部FRO@12 MHz、外部オシレータ、内部FRO@1 MHz、または32.768 kHz RTCオシレータから動作させることができます。これら複数のソースクロックは、2 kHz〜150 MHz という広い入力周波数範囲により、要求されるPLL周波数に適合します。PLLはソフトウェアで有効化/無効化できます。 以下の図は、使用可能な内部および外部クロックソース、SYSCONブロックとの相互作用、およびPLLモジュールの概要を示しています。   図 1. SYSCON概要図   SYSCONは、メインクロック、システムクロック、およびペリフェラルで使用されるクロックソースを管理します。 クロックソースを選択した後、アプリケーションに応じてPLLモジュールを使用して構成し、目的のクロック周波数を生成します。 また、SYSCONモジュールにはボード上の各ペリフェラル用に複数のクロックマルチプレクサがあり i.e(Systick, FullSpeed-USB, CTimer)、他のペリフェラルのクロックソース選択に関係なく各ペリフェラルが独自にソースクロックを選択できます。例えば、次の図は、前述のマルチプレクサと、そのモジュールで使用可能なすべてのソースクロックを示しています。 図 2. ペリフェラル用ソースクロック選択   詳細については、 LPC55S6x User Manualの「Chapter 4. System Control(SYSCON)」を参照してください。 例: PLLの有効化/無効化 MCUXpresso IDEで利用可能なクロックツールを使用すると、プラットフォーム内の周辺機器のクロックソースを理解し、構成できます。次の図は、150MHzで構成されたデフォルトのPLLモードを示しています。黄色のパスは、クロック構成に関与するすべての内部モジュールを示しています。 図 3. リセット時のLPC55S69におけるデフォルトPLLモード@150MHz   例として、Clock Toolsを用いてPLLのクロックソースを内部32MHz水晶発振器由来の clk_in に設定できます。この場合、PLLはバイパスモードに設定され、PLLが非アクティブとなるため省電力になります。 図 4. PLLのバイパス PLL設定の詳細については、LPC55S6x User Manualの「Chapter 4.6.6.PLL0 and PLL1 functional description」を参照してください。 例: 以下の手順では、Clock Toolsを使って特定ペリフェラルのクロックソースを選択する方法を説明します。 1.1 特定ペリフェラルのクロック設定 T図17に示すように周辺機器を設定するには、Clock Toolsを使用して目的の周辺機器のクロックソースを設定することも役立ちます。たとえば、CTimer0 を使用する場合、利用可能なクロックソースは以下の通りです。 メインクロック PLL0クロック FRO 96MHzクロック  FRO 1MHz クロック MCLKクロック オシレータ32KHzクロック クロックなし(非アクティブ)   図5. CTimer0クロックソースセレクタ CTIMERCLKSEL0 マルチプレクサを選択し、次に、記載されたクロックソースのいずれかに切り替えます。たとえば、 main_clk(メインクロック @150MHz)を選択すると、クロックマルチプレクサがアクティブになり、次の画像のように黄色のパスが強調表示されます。   図 6. CTimer0にメインクロックを接続 1.2 クロック構成をプロジェクトにエクスポート クロック設定を完了すると、Clock Toolは clock_config.c および clock_config.hのソースコードを更新し、ツールで作成したすべてのクロック機能グループを含めます。これには 特定ペリフェラルのクロックソースが含まれます。前の例では、CTimer0をmain_clkに設定しました。これはソースコード内で次の命令に変換されます:“CLOCK_AttachClk(kMAIN_CLK_to_CTIMER0);”―この命令は“BOARD_BootClockPLL150M();”関数内に配置されます。   図 7. clock_config.cファイルから呼び出されるAPI 注意。周辺機器の内部レジスタを設定する前に、そのクロックソースを接続する必要があることを覚えておいてください。そうしないと、ハードフォールトが発生します。 参考情報 LPC55S6x/LPC55S2x/LPC552xユーザーマニュアル またご覧ください RTのシステムクロック Kinetisシステムクロック 全般 LPC55xx
記事全体を表示
使用 MCX N94x 从外部存储器运行代码 MCX N 系列是集成了闪存的 MCU,与许多传统的 MCU 系列类似。内置闪存特别实用,因为它有助于简化电路板设计、开发流程、BOM 以及软件开发。 然而,内置闪存的容量可能无法满足应用程序对内存的需求。有些客户确实需要更大的闪存空间。例如,图形应用程序需要在非易失性存储器中存储大型图像缓冲区;数据记录设备需要存储大量数据;或者用于物体识别的复杂推理模型。还有一些应用程序需要存储固件的备份版本,或者本身过于复杂和庞大。为满足这一需求,MCX N94x 具备与多种更宽容量的外部存储器接口的能力。扩展闪存的传统方案有多种,本文将重点介绍外部 NOR 闪存的使用。 为了访问外部存储器,MCX N94x 集成了支持外部存储器接口的模块,即 FlexIO 和 FlexSPI。FlexSPI 模块能够与多种类型的存储器进行通信。其中之一是串行NOR闪存,可以用作启动设备。 本文的目标是展示一个客户案例的解决方案:如何从外部闪存中运行代码。展示MCX N94x平台的灵活性,并介绍开发人员在开发从外部闪存运行应用程序时需要熟悉的多种工具、外设和概念。 下图展示了本文的核心目标 —— 从外部闪存运行代码。同一个 “Hello World” 应用程序可以从内部存储器和外部存储器(例如,NOR 串行 QuadSPI 存储器)运行,且功能不会有任何变化。内核只需使用 FlexSPI 等专用外设来获取并执行指令。 图 1 从内部存储器与外部存储器执行相同代码 MCX N94x 系列集成了 FlexSPI 模块,这使得从外部 NOR 闪存运行代码成为可能。 图 2 MCX N94x 框图 要跟随本文进行操作,你需要 FRDM-MCXN947 开发板。这是用于 MCX N94x 和 N54x MCU 的评估板。FRDM-MCXN947 集成了 W25Q64JVSSIQ QuadSPI 闪存。因此,该平台非常适合创建从外部闪存运行的应用程序。 图 3 FRDM-MCXN947 上的外部 NOR 闪存 Boot、PFR 和 SPSDK MCX N 系列集成的启动 ROM 可以擦除、编程和读取片上或外部闪存,这意味着你可以使用启动 ROM 通过 ISP 接口将启动镜像下载到片上或外部闪存中。本文将展示如何使用启动 ROM 将 SDK 中的自定义 led_blinky 演示程序加载到外部闪存。当然,也可以使用其他应用项目。 此外,启动 ROM 负责启动流程。它会选择从片上闪存、外部闪存还是 ISP 模式启动。下图展示了一个极度简化的启动流程,有助于从整体上理解芯片的启动过程。有关启动流程机制的更多细节,请参考《MCX Nx4x 参考手册》中的 “顶级启动流程” 部分。 图 4 简化的启动流程 复位处理程序执行后,启动 ROM 将控制芯片的启动流程。它首先会进行相关的芯片初始化,然后检查 ISP 引脚的状态。如果 ISP 引脚被断言,就会执行 ISP 启动处理程序。ISP(在系统编程)是一种执行模式,在这种模式下,启动 ROM 会通过 UART 或 USB 等协议等待外部主机的命令,以执行读取和写入芯片存储器、烧写熔丝等操作。如果 ISP 引脚未被断言,启动 ROM 会继续确定启动模式。启动模式可以通过 PFR 的 CMPA 中的 CMPA [BOOT_SOURCE] 位或 eFUSES 来控制。如果 CMPA [BOOT_SOURCE] = 01b,启动 ROM 将运行 FlexSPI NOR 启动处理程序;如果 CMPA [BOOT_SOURCE] 为 00b 或 11b,则执行内部闪存启动处理程序。启动模式选择后,会对镜像进行验证。如果镜像无效(例如,存储器中不存在、已损坏或格式不正确),则执行 ISP 启动处理程序。如果镜像有效,启动 ROM 最终会跳转到用户应用程序。 默认启动流程是通过内部闪存启动,大多数 SDK 示例将配置为通过内部闪存启动,因为 CMPA[BOOT_SOURCE] 默认值为零,或者当 CMPA 区域被擦除时。根据简化的引导流程图,我们需要让引导ROM进入FlexSPI NOR引导处理例程,以从外部闪存启动。因此,我们需要将 CMPA[BOOT_SOURCE] 设置为 01b。 PFR 包含关键的启动和安全设置,这些设置在每次重置后都会被启动ROM监控。如前所述,CMPA区域可用于控制启动模式。因此,PFR区域需要谨慎配置,因为它们控制启动流程并且控制芯片的安全特性。下图展示了包含CMPA的PFR的极简示意图,位于内部闪存旁边。 图5 PFR 的 CMPA 区域 有关 PFR 的具体细节,请参考《MCX Nx4x 参考手册》所附的 MCXNx4x_IFR.xlsx。 为方便写入 CMPA 和 PFR 的其他区域、为应用程序签名、烧写熔丝以及对应用程序进行编程,NXP 开发了多个主机命令工具、API 和应用程序,并将它们集成到一个名为 SPSDK 的 Python 工具中。下图显示了 SPSDK 包含的所有工具。要了解 SPSDK 的详细信息以及 API、应用程序和工具的描述,请参考 SPSDK 文档:https://spsdk.readthedocs.io/en/latest/spsdk.html# 图 6 SPSDK API 模块、应用程序和工具 上图重点标注了 SPSDK 提供的 3 个应用程序,它们将用于配置芯片从外部闪存启动,分别是:nxpdebugmbox、PFR 和 BLHOST。后面将详细介绍这些应用程序的分步使用方法。 nxpdebugmbox 应用程序通过 SWD 与芯片的调试邮箱进行交互。该工具的用途是将 MCU 设置为 ISP 模式(无需拉低 ISP 引脚),还可以对芯片的存储器和 PFR 进行批量擦除。一旦 MCU 进入 ISP 模式,主机 PC 就能通过 UART 或 USB 协议与启动 ROM 通信,这使得 PFR 和 BLHOST 应用程序可以正常使用。PFR 应用程序将用于在 PFR 的 CMPA 区域中写入 CMPA [BOOT_SOURCE] = 01b,并启用 FlexSPI 端口探测功能,使芯片能够与外部闪存通信。BLHOST 应用程序将用于擦除芯片并编程应用程序镜像,本文中具体使用的是 led_blinky 演示程序。 外部串行 NOR 闪存接口 要理解如何在 MCX N94x 上从外部 NOR 闪存执行代码,以下术语至关重要。 首先,“就地执行” (Execute-in-Place,XIP) 指的是 MCU 内核能够直接从外部存储器获取并执行指令的能力。也就是说,MCU 可以从闪存而不是传统的内部闪存执行代码。 要实现 XIP,MCX N94x 需要一个能够从外部存储器获取指令的专用外设,FlexSPI 模块就具备这一能力。FlexSPI 支持多种类型的外部存储器,串行 NOR 闪存便是其中之一。 为实现与外部存储器的接口,FlexSPI 支持 SPI 协议。SPI 是一种非常适合短距离、高速通信的串行协议。QuadSPI 可以简单理解为 SPI 协议的一种实现,它不像传统 SPI 那样只有一条数据线,而是有 4 条数据线。SPI 还支持 2 条和 8 条数据线的模式。 灵活串行外设接口(FlexSPI)存储器控制器支持连接外部串行 NOR、NAND 和 RAM。 它支持两个 SPI 通道和最多四个外部设备。每个通道支持单 / 双 / 四 / 八线模式的数据传输(1/2/4/8 条双向数据线)。 灵活的序列引擎(LUT 表)支持各种厂商的设备(串行 NOR、串行 NAND、HyperBus、FPGA 等)。 AHB总线的内存映射读写访问 实现了 AHB 接收缓冲区以减少读取延迟,AHB 接收缓冲区总大小为 1024 KB AHB RX 缓冲区中有 8 个灵活且可配置的缓冲器 通过 IP 总线进行软件触发的 Flash 读/写访问 实现了 IP 接收 FIFO 以缓冲从外部设备读取的所有数据,FIFO 大小为 1024 字节 实现了 IP 发送 FIFO 以缓冲写入外部设备的所有数据,FIFO 大小为 1024 字节 DMA 支持填充 IP TX FIFO DMA 支持读取 IP RX FIFO 图 7 FlexSPI 框图 FlexSPI 系统内存映射区域在 FlexSPI 子模块中被重新映射到不同的地址: 图 8 FlexSPI 内存映射 FlexSPI 可以支持符合 JESD216 标准的串行设备。 前提条件 您将需要以下硬件: FRDM-MCXN947评估板。 USB C电缆。 Windows 或 Linux PC。 您需要安装以下软件。 MCUXpresso IDE v11.9.0 或更高版本。 FRDM-MCXN947 SDK v2.15.0 或更高版本。 SPSDK 和 Python。 SPSDK 安装和虚拟环境 我们建议在 Python 虚拟环境中运行 SPSDK,因为这可以简化 SPSDK 的安装过程。 在进行 SPSDK 的安装步骤之前,建议在你的电脑上创建一个文件夹。虚拟环境将在此处运行,SPSDK 工具将在此处被调用,SPSDK 生成的所有文件也将存储在此处。 打开终端、命令提示符或 Power Shell,导航到你创建的文件夹,然后按照本指南中列出的 SPSDK 安装命令进行安装:《安装指南 — SPSDK 文档》            要在虚拟环境中验证 SPSDK 的安装情况,请运行以下命令。 spsdk --version         下图显示了该命令的示例以及本文所用的 SPSDK 版本。 图 9 SPSDK 版本  设置 本章将介绍生成镜像并从外部存储器启动的所有步骤。 要运行本文中列出的命令,你需要使用 Python 虚拟环境。使用你在 SPSDK 安装过程中创建的虚拟环境。 PFR设置 本节描述了需要在 MCX N94x PFR 和可引导映像中进行的设置。 创建 CMPA 和 CFPA 的 yaml 模板   在接下来的步骤中,我们将重点编辑 CMPA 区域,因为它包含与外部执行相关的启动字段。CFPA 区域无需编辑。            注:用于生成模板的命令基于 “pfr” 工具。有关这些命令的功能详情,请访问:《用户指南 - pfr — SPSDK 文档》 首先,我们将使用 pfr 工具创建 yml 格式的 CMPA/CFPA 模板。这些模板仅包含为设备的 CMPA 和 CFPA 区域指定的默认配置。 如果命令运行成功,将生成相应的模板,如下图所示。 图10 Yaml 模板已创建。 编辑 CMPA 和 CFPA 的 yaml 模板 用任意文本编辑器打开 CMPA 模板,并按照以下步骤操作。 将DEFAULT_BOOT_SOURCE 设置为 FLEXSPI_FLASH_XIP_0b01 将FLEXSPI_AUTO_PROBE设置为ENABLE 保存对 CMPA 模板所做的更改 创建和编写 CMPA 和 CFPA 二进制文件 编辑 cmpa yaml 文件后,您将从 yml 模板生成 CMPA/CFPA 二进制文件。 导入并编辑图像 本节展示如何从 MCUXpresso SDK 的 led_blinky 示例中创建一个 XIP 启动镜像。 从 SDK 中导入 led_blinky 演示程序。点击 “Import SDK example (s)…”(1),然后搜索并选择 FRDM-MCXN947(2),点击 “Next”(3)。在 “SDK 导入向导” 中,搜索并选择 “led_blinky 演示程序”(4),然后点击 “Finish”(5)。 图11 导入 blinky 示例。 导入演示项目后,打开项目属性。在项目名称上右键单击(1),然后点击“属性”选项(2),并打开项目属性(3)。 图 12 项目属性 导航到 “Properties> C/C++ Build > MCU settings” 部分。 图13 MCU设置窗口 确保为外部存储器设置了两个闪存区域:QSPI_FLASH 和 QSPI_FCB,如下图 14 所示。如果缺少这些区域,请按照下一步添加。 图14 链接器中的外部闪存区域。 在 “Memory details” 表格中添加两个分别用于 QSPI_FLASH 和 QSPI_FCB 的闪存区域,然后将它们移到顶部。点击 “Add Flash”(1)两次,然后点击 “Move selected memory up in table”(2),新创建的两个闪存区域应位于表格顶部。 注意:将内存区域移动到“内存详细信息”表的顶部,表示链接器应优先将文本和数据放置在该区域。 使用下表中的信息更新新创建的闪存区域的名称和参数。 类型 名称 别名 位置 大小 驱动器 闪存 QSPI_FLASH 闪存 0x80001000 0xFFFF000 MCXN9xx_SFDP_FlexSPI.cfx 闪存 QSPI_FCB Flash 2 0x80000400 0x400 MCXN9xx_SFDP_FlexSPI.cfx   确保闪存区域的配置与图 15 所示一致。 图15 配置的闪存区域  点击 “Build”(1),编译完成后,应显示 0 错误(2)。 图16 成功编译的图像。 注意:您应该看到 QSPI_FLASH 部分正在被使用,而 PROGRAM_FLASH 部分未被使用。 生成二进制文件。导航到项目的 debug 文件夹,找到生成的 .axf 文件 (1)。然后右键点击 .axf 文件,点击 “Binary utilities> Create Binary”。 图 17 创建二进制文件 7 二进制文件应出现在 debug 文件夹中。右键点击该二进制文件,然后导航到 “Show in> System Explorer”,可以轻松找到二进制文件的位置。 图 18 轻松找到创建的二进制文件 8. 将二进制文件粘贴到您创建 cmpa_bin.bin 的工作区中。此步骤仅用于简化后续显示的命令。 擦除和进入 ISP 模式 ISP(在系统编程)是一种模式,在此模式下,主机能够指示 ROM 引导加载程序对新镜像或 PFR 进行编程。PFR 中包含 CMPA 字段,该字段带有我们从外部闪存进行 XIP(就地执行)的配置。基本上,主机电脑会使用 NXP 的 BLHOST 向 ROM 引导加载程序发送命令,以对 PFR 进行编程。 进入 ISP 模式有两种方式:通过 ISP 引脚进入和通过调试器邮箱进入。通过 ISP 引脚进入需要在复位序列期间保持 ISP 引脚被断言,在复位完成后解除对该引脚的断言。通过调试器邮箱进入则只需使用 SWD 调试器即可使 ROM 进入 ISP 模式。 要通过 ISP 引脚进入 ISP 模式,必须在复位序列期间保持 ISP 引脚被断言,并在复位完成后解除断言。使用调试器邮箱则只需要有一个调试器。 为简单起见,本文使用 USB 通信协议,不过也可以使用 UART 协议。 使用 nxpdebugmbox 擦除闪存并进入 ISP 模式。依次运行以下命令 nxpdebugmbox erase  nxpdebugmbox ispmode -m 0 下图显示了运行上述两条命令时的预期输出。 此操作将擦除内部和外部闪存中的内容,以及 PFR 的内容。重复此操作有助于使芯片从内部闪存启动。 注意:运行 nxpdebugmbox 命令需要使用 SWD-JTAG 调试器。本文示例中使用的是 FRDM-MCXN947 开发板上的板载调试器。 测试 ROM 引导加载程序 运行以下命令以 ping ROM Bootloader,这样我们可以确保设备已正确设置为 ISP 模式。 blhost -t 2000 -p COMxxx,115200 -j -- 获取属性 1 图 19 测试 ROM 引导加载程序 从现在开始,不再严格需要外部调试器。可以通过 UART 或 USB 与 ROM 引导加载程序进行通信。为简单起见,本文其余部分将使用基于 UART 协议的命令。 写入镜像和 PFR 并运行演示程序 下面按照步骤写入镜像。 1. 写入 CMPA 二进制文件。 pfr 写入 -p COMxxx,115200 -t cmpa -f mcxn9xx -b cmpa_bin.bin 2. 写入 CFPA 二进制文件。 pfr 写入 -p COM140,115200 -t cfpa -f mcxn9xx -b cfpa_bin.bin 3. 提供 FlexSPI 闪存配置 blhost -t 2000 -p COMxxx,115200 -- 填充内存 0x20000000 0x04 0xc0000405 4. 配置并填充内存。 blhost -t 2000 -p COMxxx,115200 -- 配置内存 0x09 0x20000000 blhost -t 2000 -p COMxxx,115200 -- 填充内存 0x20003000 0x04 0xf000000f 5 擦除Flash blhost -t 2000 -p COMxxx,115200 -- flash-erase-region 0x80000000 0x100000 6. 配置内存。 blhost -t 2000 -p COMxxx,115200 -- 配置内存 0x09 0x20003000 7. 写入镜像。 blhost -t 2000 -p COMxxx,115200 写入内存 0x80001000 frdmmcxn947_led_blinky.bin 8 重置。 blhost -t 2000 -p COMxxx,115200 重置 你可以使用此命令,也可以直接按下 FRDM 开发板上的复位按钮。 下图显示了每个命令的成功执行。您的FRDM-MCXN947 现在应该已经开始闪烁了。 图20 成功写入图像并重置。 板载复位后,你会发现加载的示例程序开始执行。 再次确认从外部闪存执行 要再次确认镜像正在从外部闪存执行,你可以使用 MCUXpresso 的反汇编视图。 1 将调试器附加到正在运行的目标,并在代码的任意位置设置断点。 图21 将调试器附加到正在运行的目标。 发现调试探针后,点击 “OK”。 暂停处理器执行。使用调试按钮。 图22 停止执行。 复位处理器。使用 “Restart” 按钮。程序应该会在 main 函数的第一行停止。 图23 在main函数处的断点。 找到并打开反汇编视图。点击 “Instruction Stepping Mode” 按钮或搜索反汇编,任一操作都会打开 MCUXpresso 的 “Disassembly” 视图。 图 24 打开 “Disassembly” 视图 处理器必须在 0x8000_0000 地址空间运行。在反汇编视图中,您可以查看指令是从 0x8000_xxxx 范围内的地址执行的,该范围分配给了外部闪存。 图25 从外部闪存中运行代码。 如果您想让设备恢复从内部存储器运行,则需要恢复默认值。如果没有对本文中所示的 CMPA 和 CFPA 区域进行修改,可以执行 nxpdebugmbox 命令。 电路板设计 启动 ROM | 启动配置 | 闪存 时钟|计时器 核心与内存 MCXA MCXN
記事全体を表示
S32K142ベースの車載電動Eコンプレッサ・エアコンRDBのリリース   EV/HEV(電気自動車/ハイブリッド車)は非常に大きなトレンドであり、NXPが注力している分野です。Eコンプレッサコントローラは従来の車両と比べて、EV/HEVに特有の重要かつ追加のコンポーネントです。S32K14xは、主流のEコンプレッサ用途に最適な製品です。自動車向けE-コンプレッサ用途でもお客様の開発期間を短縮するため、S32K142-ECCリファレンス・デザイン・ボードを開発しました。実際、S32K142-ECCはEコンプレッサに適しているだけでなく、自動車業界における他の高電圧 PMSM/BLDC用途でも利用可能です。 このRDB(リファレンス・デザイン・ボード)のハードウェアは、NXP S32K142の高性能車載グレードMCUとUJA1075A SBC(システム・べース・チップ)をベースとしており、以下の機能を提供します。 ◼ 最大400Vの高電圧および最大3.7kWのBLDC/PMSMアプリケーションをサポートします。 ◼ SBC、IPM、MCUの電源用に高電圧絶縁型12V電源をサポートします。 ◼ ハードウェアは、シングルシャント、デュアルシャント、トリプルシャントの3種類の電流サンプリングソリューションをサポートします。ソフトウェアはV1.0でデュアルシャントをサポートします。 ◼ UV、OV、OT、OC、ショート、ストール検出などをカバーする複数の診断と保護をサポートします。 ◼ CAN/LIN/FreeMASTERからの速度/制御コマンドをサポートします。 ◼ 安全のために外部ウォッチドッグをサポートします。 RDBハードウェアシステムのブロック図は以下の通りです。 S32K142-ECC RDBのソフトウェアパッケージを使用することで、ユーザーはS32K142ベースの高電圧eコンプレッサーモーター制御性能をすぐに評価し、一般的な高電圧モーター制御ハードウェアプラットフォームとして独自のeコンプレッサーモーター制御製品のプロトタイプを構築することができます。 このソフトウェアパッケージには、以下の機能が含まれます。 ◼ FreeMASTER CAN/UARTによるEコンプレッサ制御をサポート ◼ CAN DBCファイルによるEコンプレッサの速度制御および状態フィードバックをサポート ◼ 低速トルク補償、MTPA、2段階電流アライメント、強化されたATOなどの高度なモータ制御アルゴリズムを実装し、モータの堅牢な始動と高効率を確保 ◼ 豊富なモータ制御診断と保護機能をサポート(OV、UV、OC、OT、ストール、欠相など) ◼ S32DS IDEおよびIAR for ARM IDEプロジェクトを提供し、U-MultilinkとJ-LINKデバッガをサポート 当社には S32K142-ECC RDB が数個在庫されています。プロジェクトがあり、評価用に RDB が必要な場合は、お近くの NXP または NXP販売代理店のFAE、営業およびマーケティング部門にお問い合わせください。 技術的なサポートが必要な場合は、raymond.tang@nxp.comにお問い合わせください。 ありがとうございます。 よろしくお願いいたします。 Raymond Re: S32K142ベースの車載電動Eコンプレッサ・エアコンRDBのリリース S32k142 RDBのFOCモータ制御の例で、CAN0ポートとPTE4およびPTE5を使用し、必要な変更を加えました。参考としてスクリーンショットを添付します。 現在、#define CONTROL_COMMANDをCAN_CONTROLに変更して、コードをデバッグできています。スクリーンショットにあるように、BusMasterで0x371からCANデータを受信しています。ところが、0x370のIDにデータを送信すると、MCUのデバッグ・ウィンドウでデータが受信されません。CAN_RXCompleteフラグにブレーク・ポイントを設定しましたが、フラグのステータスは変わりません。参考として画像を添付します。 CANをデバッグする方法と、この問題に関して何かアドバイスがあれば教えてください。
記事全体を表示
开始使用 MCUXpresso for VS Code:Matter on Windows(24.12.71) Visual Studio Code(VS Code)中的Matter支持现已向所有开发者开放。 适用于 VS Code 的 MCUXpresso 扩展(24.12.71 版本)集成了 Matter 工具链,支持在 Windows、macOS 和 Linux 系统上进行开发。 可通过访问 Microsoft 的 VS Code 市场安装该扩展。 以下步骤将帮助你在 Windows 系统上搭建基于 NXP 设备的 Matter 开发环境。 本入门流程约需 1 小时,与通过命令行界面 (CLI) 顺利完成设置的时间相近。 导入 Matter 仓库大约需要 30 分钟(克隆 Matter 仓库;运行引导安装脚本) 为开发板导入首个项目约需 10 分钟(首次为每个开发板下载 SDK 代码库) 然后可以快速导入/构建附加项目。 1. 安装 Pigweed 项目自动化工具 Pigweed 用于更便捷地实现 GN 和 CMake 项目的构建、测试和代码检查自动化。由于 Matter 使用 GN,因此该项目的维护者会用到 Pigweed。请完成以下操作,使 Matter 引导程序能够正确修改 / 安装代码库。 以管理员模式启动终端,确保操作能顺利完成。 确保已启用开发者模式。也可通过以管理员身份运行以下命令来启用: REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\AppModelUnlock /t REG_DWORD /v AllowDevelopmentWithoutDevLicense /d 1 /f\"" 启用长文件路径。可通过 regedit 或以管理员身份运行以下命令来实现: REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem /v LongPathsEnabled /t REG_DWORD /d 1 /f  启用 Git 符号链接: git config --global core.symlinks true 有关这些设置的更多信息,请访问 Get started with Pigweed - Pigweed 2. 安装 Visual Studio Code (VS Code) Microsoft 允许用户从 https://code.visualstudio.com/download 快速安装 VS Code。通过该链接,用户可选择适合自己操作系统的下载版本。 以下说明适用于 Windows 安装。然而,以下大部分步骤也适用于 Mac 和 Linux 用户。 对于新用户,直接安装 VS Code 和 NXP 扩展会很有帮助。可通过以下两个链接之一进行操作: vscode:extension/NXPSemiconductors.mcuxpresso https://marketplace.visualstudio.com/items?itemName=NXPSemiconductors.mcuxpresso  如果系统上已安装 VS Code,用户将被引导至微软市场中的 NXP MCUXpresso for VS Code 扩展页面;如果系统上未安装 VS Code,将引导用户完成 VS Code 的安装。 至此,笔记本电脑上应已安装好 VS Code 应用程序。 3. 安装适用于 VS Code 的 MCUXpresso 扩展 用户可在 VS Code 内部安装或更新适用于 VS Code 的 MCUXpresso 扩展。以下步骤将介绍具体方法,并附带一段短视频演示这些步骤。 打开 VS Code。从桌面启动程序。 打开扩展市场,点击左侧导航栏中由 4 个方块组成的图标 ,或使用快捷键 Ctrl+Shift+X。 在左上角的扩展搜索框中搜索 “NXP” 或 “Mcuxpresso”。 找到 “MCUXpresso for VS Code” 扩展。点击列表。 在编辑器中打开的扩展概述页面中,点击蓝色的 “安装” 按钮。 当左侧导航栏中显示以下 NXP 图标时,说明扩展已正确安装。 此时,VS Code 应用程序现已包含 NXP MCUXpresso 扩展。 4. 运行 MCUXpresso 安装程序以安装工具依赖项 现在有必要安装其他工具依赖项,以便正确使用 VS Code 进行 MCUXpresso、Zephyr 和/或 Matter。 NXP 提供了 MCUXpresso 安装程序工具,以简化这些工具依赖项的安装过程。以下步骤介绍了如何在 Matter 系统中使用该安装程序,并附带一段短视频演示这些步骤。 点击左上角 “快速启动” 面板下的 “Open MCUXpresso Installer”。 如果安装程序已安装,将直接启动。注意:如果未找到安装程序,用户应点击右下角通知中的蓝色 “Download” 按钮。 从MCUXpresso安装程序的可用工具列表中选择以下内容: Matter 开发者 Arm GNU 工具链 独立工具链附加组件 LinkServer 点击蓝色的 “安装” 按钮,等待安装进度显示完成。 重新启动 VS Code,以便新设置生效 此时,VS Code 应用程序现已包含 NXP MCUXpresso 扩展,笔记本电脑也已具备开始 Matter 安装所需的所有其他工具。 5. 导入 NXP Matter 代码库 The MCUXpresso for VS Code extension simplifies how the user can add Matter to their workspace.  The repository import wizard automates most of the steps required for a user to get started with Matter. The following steps show how to add Matter Repository.  2 short clips are included to show the steps. Click on "Import Repository" found under Quickstart Panel in upper left. Click Repository found in the wizard's Remote tab. Select "NXP Matter".  This automatically targets the NXP/Matter repo found on GitHub. Enter a desired location to clone/store the NXP Matter repository.  Closer to C:/ is better. Select "release/v1.4.0" listed as an available version under Revision: Click Import The import process can take ~30 minutes depending on network bandwidth and IT software. NOTE: This is similar amount of time when using CLI in a terminal.   After the repo is cloned, the Matter Bootstrap script is used to setup matter environment. At this point the user laptop has a valid Matter workspace.  The workspace is now capable of importing and building Matter projects. 6. Import First Matter Project The MCUXpresso for VS Code extension includes an Import Example wizard that simplifies adding Matter projects to a workspace.  The following instructions show how to import a project from the NXP Matter repository.   A short clip is included to show the steps. Click "Import Example from Repository" from the Quickstart Panel in the upper left. Select the Matter Repository from the drop-down options for Repository. Select the desired Toolchain from the drop-down options for Toolchain.  A GNU Toolchain should be available from previous MCUXpresso Installer steps. Select the target board from the drop-down options for Board.  The listed boards are supported in the NXP Matter repo. Select the desired project from the Template drop-down options.  Currently there are "contact-sensor-app" and "lighting-app". Click Create blue button. At this point there is a Matter project in the workspace.  The project can be explored with the provided project properties and file explorer views. 7. Build Matter Project Building the project is the final step for Getting Started with a Matter project in VS Code.  The extension has properly setup the project toolchain and will build successfully.  The NXP extension reduces the setup time by not importing the SDK for all supported boards.  The board SDK is automatically imported/cloned when it is not located on the 1st build for a board.  Successive projects for the same board will not require this additional step/delay. The following steps show how to build a matter project in the workspace.  A short clip is included to show the steps.  Select the Matter project listed under the Projects pane located in the primary left sidebar.  When selected, project control icons are revealed to the left of the project name. Click on the Build icon.   Verify the build was successful by viewing the binary files with File Explorer.  Click the File Explorer icon to the right of project name or in the upper left of the side bar navigation.  The binary is found under the project's \out\debug folder. This exercise on "Getting Started with Matter" is completed.  At this point the Matter project imported to the workspace was successfully built.  FRDM-RW612
記事全体を表示
S32G Linux 高速ブートアプリケーションのドキュメント このドキュメントは、Linux のブート時間を最適化する方法を説明します。内容は以下の通りです。 目录 1 默认BSP28 Linux内核的启动时间分析和优化方向 ..... 2 2 UBoot的优化 .............................................................. 3 2.1 缩小Uboot的DTS尺寸 ............................................ 3 2.2 缩小Uboot的尺寸 .................................................... 4 2.3 去掉等待3S输入时间 .............................................. 4 2.4 配合内核修改的Uboot参数 ..................................... 4 2.5 关闭串口调试信息 .................................................. 5 2.6 MMC read的方法来读取内核和DTB ....................... 5 3 Kernal的优化 ............................................................. 5 3.1 DTB中去掉不用的驱动和代码 ................................. 5 3.2 内核中去掉不用的平台与驱动及相关代码 ............... 6 3.3 内核中去掉不用功能,缩小内核大小 ...................... 7 3.4 去掉initramfs支持 ................................................... 7 3.5 关闭调试信息 .......................................................... 7 3.6 提前eMMC驱动加载时间 ........................................ 7 3.7 将Kernel与DTB打包在一起..................................... 8 4 Rootfs+应用程序的优化 ............................................. 8 5 最终全部启动时间比较 ............................................. 12 オートモーティブ Re: S32G Linux 高速ブートアプリケーションドキュメント Hi  この知識を共有していただき、どうもありがとうございます。 第1章で デフォルトの BSP28 Linux カーネルのブート時間分析および 最適化の方向 page2 ストップウォッチの使用を推奨します ストップウォッチを使用して、S32G RDB2+BSP28の起動時間をテストします。テスト方法は以下の通りです。 • ubootはストップウォッチを使用して複数回テストし、平均値を取得します。 ストップウォッチはどこにあるのか、詳しく説明していただけますか。それを何と呼べばいいですか?
記事全体を表示
i.MX 8MIC-RPI-MX8ボードを使用して、オーディオを設定し、録音し、再生する方法。 こんにちは、Jorgeです。この投稿では、i.MX 8MIC-RPI-MX8ボードを使用してオーディオを設定、録音、再生する方法を説明します。 要件: I.MX 8M Mini EVK Linux Binary Demo Files - i.MX 8MMini EVK (L5.15.52_2.1.0) i.MX 8MIC-RPI-MX8ボード シリアルコンソールエミュレーター(Tera Term、Puttyなど) ヘッドフォン/スピーカー 8MIC-RPI-MX8アクセサリ・ボードは、I.MX 8M製品ファミリでの音声対応アプリケーションのプロトタイピングと開発用に設計されています。ボードは、i.MX 8M MiniおよびNano EVKの40ピン拡張コネクタに直接差し込みます。 このボードの特長は次のとおりです。 8個のPDMマイクロフォン 8個のモノクロLED 4つのマルチカラーLED 2つのステータスLED 4つのプッシュボタン マイクミュートスイッチ マイクのジオメトリー・スイッチ i.MX 8MIC-RPI-MX8ボードを接続。 i.MX 8MIC-RPI-MX8ボードには、EVKボードに直接接続できる40ピン拡張コネクタがあります。次の図に示されているように、8MIC-RPI-MX8のピン1がEVK J1001のピン1と一致していることを確認してください。 ボード上のデバイス・ツリーを選択。 プリコンパイル済みのイメージをボードにフラッシュし(UUUを使用してLinux BSPをフラッシュ)、8MIC-RPI-MX8を接続した後、8MICボードを処理するための正しいデバイス・ツリーを選択する必要があります。U-bootで、次のコマンドを使用してBSP上の利用可能な.dtbファイルを確認してください。 u-boot=> fatls mmc 2:1 そして、対応する.dbtファイルのリストを取得できます。 このケースでは、I.MX 8M Mini EVKで作業しており、対応.dtbファイルは以下の通りです。 imx8mm-evk-8mic-revE.dtb 選択するには、環境変数を設定し、次のように保存してください。 u-boot=> setenv fdtfile imx8mm-evk-8mic-revE.dtb u-boot=> saveenv 以下の方法で再確認してください。 u-boot=> printenv fdtfile 次に、以下のコマンドを使用してLinuxを起動する時です。 u-boot=> boot i.MX 8MIC-RPI-MX8ボードでオーディオを録音。 Advanced Linux Sound Architecture (ALSA)は、Linuxオペレーティング・システムにオーディオおよびMIDI機能を提供します。ALSAの主な特長は次の通りです。 コンシューマー向けサウンド・カードからプロフェッショナル向けマルチチャンネル・オーディオ・インターフェースまで、あらゆるタイプのオーディオ・インターフェースを効率的にサポートします。 完全にモジュール化されたサウンド・ドライバ。 SMPおよびスレッドセーフ設計。 アプリケーション・プログラミングを簡素化し、より高レベルの機能を提供するユーザー・スペース・ライブラリ (alsa-lib)。 古いOpen Sound System (OSS) APIをサポートし、ほとんどのOSSプログラムにバイナリ互換性を提供します。 Linux上で起動したら、以下を使用してボード上で検出されたオーディオ・コーデックを次のコマンドで確認できます。 arecord -l さて、オーディオを録音するには、IMX8ボードでALSAのarecordコマンドを使用して録音を開始する必要があります。次のリンクで確認できるさまざまなオプションがあります。このケースでは、次のものを使用します。 arecord -D hw:imxaudiomicfil -c8 -f s16_le -r48000 -d10 sample.wav -D:デバイスを選択します。 -c:録音のチャネル数を選択します。 -f: フォーマットを選択します。 -r:サンプリング・レートを選択します。 -d: 録音時間を秒単位で決定します。 sample.wav:生成されるオーディオ・ファイルの名前です。 最後のコマンドを実行し、オーディオの録音を開始しました。音を出して録音する時間です! IMX8ボードからオーディオを再生。 今、ヘッドフォンまたはスピーカーをジャックに接続する時です。 また、arecordコマンドのように、次のコマンドを使用してボードからオーディオを再生できるデバイスを確認することができます。 aplay -l そして、オーディオを再生するためのすべてのコーデックを入手できます。 録音を再生するには、ALSA aplayコマンドを使用する必要があります。ボード上のジャックからオーディオを聞くには、正しいオーディオ・コーデックを選択することが重要です。 aplay -Dplughw:3,0 sample.wav -D:デバイスを選択します。 sample.wav:再生する音声ファイルの名前です PDMマイクを使用してオーディオを録音し、IMX8ボードからオーディオを再生したい方にとって、これが役立つことを願っています。 よろしくお願いいたします。 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano Linux マルチメディア Windows
記事全体を表示
S32G_How_to_Put_A53_to_WFI 中国語バージョン S32G的partition off流程要求核稳定的进 入到WFI状态,本文说明如何修改Linux内核, 在A53 Linux关机或kernel panic时,如何让所 有A53 Core进入WFI。 目录 1 背景说明与参考资料 .................................................. 2 1.1 背景说明 ................................................................. 2 1.2 参考资料 ................................................................. 5 1.3 测试工具 ................................................................. 6 2 Panic ......................................................................... 7 2.1 Panic代码流程分析 ................................................. 7 2.2 BSP30修改说明(Non-ATF) ................................... 10 2.3 BSP36修改说明(ATF) .......................................... 15 3 Poweoff ................................................................... 17 3.1 Poweroff代码流程分析 ......................................... 17 3.2 BSP30修改说明(Non-ATF) ................................... 19 3.3 BSP36修改说明(ATF) .......................................... 20 4 Reboot情况说明 ....................................................... 20 5 STR情况说明 ........................................................... 21 目次 1   背景と参考情報 2 1.1  背景 2 1.2  参考資料 5 1.3  テストツール 6 2    パニック 7 2.1  パニックのコードフロー解析 7 2.2  BSP30 Modification (Non-ATF) 10 2.3 BSP36修正(ATF)16 3    電源オフ 18 3.1  電源オフのコード解析 18 3.2  BSP30 Modification (Non-ATF) 20 3.3 BSP36修正(ATF)21 4    再起動の説明 21 5    STRの説明 21 オートモーティブ
記事全体を表示
例:RTC DS3.5 RTD300を使用してS32K312スタンバイをウェイクアップする *******************************************************************************  このデモ・アプリケーションは、 POWER & WKUP IPドライバをS32K3xx MCUで使用する方法を示すこと目的としています。 現在の例:-- SW-6 = PTB-19 -----> 「押す」をクリックしてスタンバイ・モードに入ります。 SW-5 = PTB-26 = WKUP[41] --> 「押す」をクリックして、スタンバイ・モードを終了します。 RTC --> Wakeupソース-1 この例ではPIT-0タイマを使用して周期割り込みを生成しています。 T ------------------------------------------------------------------------------ * テスト用ハードウェア:S32K3X2EVB-Q172 * MCU:S32K312 * コンパイラ:S32DS3.5 * SDKリリース:RTD 3.0.0 * デバッガ:PE Micro * ターゲット:internal_FLASH ******************************************************************************** 以下の設定を行い、スタンバイ・モードでSIRCを有効にします:--  
記事全体を表示
MIPI_CSIx_DPHY_COMMON_CTRL - Imx8MP の HSSETTLE NXPサポートの皆様へ IMX8MPのレジスタHSSETTLEフィールドMIPI_CSIx_DPHY_COMMON_CTRL説明してください。 数値から頻度に関連するテーブルを持つ複数のソースがあります。 https://community.nxp.com/t5/i-MX-Processors/raw12-camera-on-imx8mp-isi/m-p/1663012/highlight/true#M207043 しかし、私が実験している値は他の投稿の表に合わないため、正式な説明が欲しいです。私の MIPI CSI PHY は 300Mhz/600Mbps で動作し、csis-hs-settle = <6> で多くの SOT エラーが発生しています。csis-hs-settle = <13>を使用すると、エラーはありません。 再開まで今しばらくお待ちください。 よろしくお願いいたします イアン i.MX 8M | i.MX 8M Mini | i.MX 8M Nano 日時:MIPI_CSIx_DPHY_COMMON_CTRL - IMX8MPのHSSETTLE Hi @Eximius  この表で推奨されている設定では、Thsは 範囲の中央(600Mbpsで約95nsから156.67ns)に落ち着きます。 日時:MIPI_CSIx_DPHY_COMMON_CTRL - IMX8MPのHSSETTLE こんにちは @qiang_li-MPU-SW また、生成されたths-settleのタイミングを各値に対してナノ秒単位で通知していただけますか? 感謝 イアン 日時:MIPI_CSIx_DPHY_COMMON_CTRL - IMX8MPのHSSETTLE Hi @Eximius  表の左の列はMbps、日付レートで、MIPIクロック周波数ではないため、データレートは600Mbpsで、値13が正しいものです。 日時:MIPI_CSIx_DPHY_COMMON_CTRL - IMX8MPのHSSETTLE メールで送信、plsチェック 日時:MIPI_CSIx_DPHY_COMMON_CTRL - IMX8MPのHSSETTLE @joanxie @qiang_li-mpu_se 
記事全体を表示
MCXA UART ISP协议/程序 我想实现UART、MCXA142的ISP通信主机端。我发送了 Ping 数据包并收到了预期的响应。发送和接收数据包的典型顺序是什么? 目前,我的情况如下: 1. 发送 Ping 2. 接收 Ping 响应 3. 在帧数据包中发送命令包:全部擦除 4. 没有回应   MCXA 回复:MCXA UART ISP 协议/程序 Hi Mateusz, ISP 协议主机已在 Secure Provisioning SDK 中实现。这是开源的 python 代码。我建议重复使用。
記事全体を表示
SDK_24.12.00_FRDM-MCXA153のプリセットをピン留めします こんにちは 最新のSDK_24.12.00_FRDM-MCXA153では、Config Tools -> Pins 基本プリセットは BOARD_InitPins つだけになりました。 以前は、LED、ボタンなど用に別々のものがありました。これは意図的な変更ですか、それともバグですか? よろしく ダニエル書 日時:SDK_24.12.00_FRDM-MCXA153のプリセットをピンします Hello, OK、あなたの答えをありがとう。 よろしくお願いします。 Daniel 日時:SDK_24.12.00_FRDM-MCXA153のプリセットをピンします Hi Daniel, MCUXpresso SDKボードプロジェクトテンプレートは、FRDM-MCXA153の場合に探している機能グループをサポートしていないようです。回避策として、スタンドアロン バージョンの MCUXpresso Config Tools で新しい FRDM-MCXA153 構成を作成しようとすると、そこに機能グループが表示されます。設定を作成したら、生成された .MEX ファイルを MCUXpresso IDE プロジェクトに読み込みます。 よろしくお願いします。 Lukas 日時:SDK_24.12.00_FRDM-MCXA153のプリセットをピンします こんにちは ご回答ありがとうございます-機能グループを追加する方法を知っています。しかし、私は大学の学生向けの指示を更新しているため、LED、BUTTONなどのグループが永久に削除されているかどうかを尋ねました。 よろしく ダニエル書 日時:SDK_24.12.00_FRDM-MCXA153のプリセットをピンします Hello @danielkrol  これは単なる変更です。次のように機能グループを追加できます。   BR アリス
記事全体を表示
i.MX RTでのTensorFlow Lite for Microcontrollersスタート・ガイド このラボでは、既存のTensorFlow Liteモデルを取得し、推論エンジンであるTensorFlow Lite for Microcontrollersを使用して、そのモデルをNXP MCUデバイス上で実行する方法を説明します。ここでは、eIQ Toolkit ラボの一部として生成されたFlowerモデルを例として使用しますが、他のTFLiteモデルでも同じプロセスを使用できます。eIQは、推論エンジンのほかに、LCDとカメラを組み込んだ例も提供しており、EVKボードを使用して、さまざまな種類の花を識別することができます。   このラボはカメラ+LCDを使用せずに利用することも可能ですが、その場合、花の画像をC配列に変換し、コンパイル時にロードする必要があります。   この投稿に添付されているものは次の通りです。 新しいモデルを試すための写真 TensorFlowモデルで「転移学習」を行い、次に TensorFlow Lite for Microcontrollers を使用して、i.MX RTファミリでTFLiteモデルを実行する方法について記載されたラボ文書。カメラとLCDの使用はオプションです。 カメラ+LCDをお持ちの場合は、eIQ TensorFlow Lite for Microcontrollers for i.MX RT170 - With Camera.pdfをご利用ください。 カメラ、LCDをお持ちでない場合は、eIQ TensorFlow Lite for Microcontrollers for i.MX RT170 - Without Camera.pdfをご利用ください。 RT685を使用される場合は、eIQ TensorFlow Lite for Microcontrollers for i.MX RT685 - Without Camera.pdfをご利用ください。 このラボは、次のボードに対応しています。 FRDM-MCXN947 i.MX RT685-EVK i.MX RT1050-EVKB i.MX RT1060-EVK i.MX RT1064-EVK i.MX RT1160-EVK i.MX RT1170-EVK i.MX RT1180-EVK MCUXpresso SDK 2.16とeIQ Toolkit 1.13.1に対応するため、2024年11月に更新されました。 i.MX RT
記事全体を表示
imx8.mp 无法设置相机 Hello, 我正在尝试设置一个自定义相机,该相机连接到我的主板的 CSI0 端口,具有 imx.8mp。摄像机通过 LVDS 连接到 MIPI 桥,桥的 I2C 目前由微控制器编程。我暂时不需要 I2C。 我已经使用 Scope 进行了检查,并且在引脚上看到了 MIPI CSI 信号。 我正在尝试启动并运行该软件,但是 /dev/video0 设备尚未创建。问题是 IMX8-MEDIA-DEV 驱动程序无法探测。 这是我的相关 DTS 代码: / { cam1_clk: cam1-clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <27000000>; }; }; &cameradev { status = "okay"; }; &i2c3 { cam1: camera1@36 { compatible = "onsemi,ar052x"; reg = <0x36>; #address-cells = <0x1>; #size-cells = <0x0>; clocks = <&cam1_clk>; clock-names = "ext"; port@0 { reg = <0>; cam1_mipi_ep: endpoint { remote-endpoint = <&mipi_csi0_ep>; bus-type = <4>; /* MIPI CSI-2 D-PHY */ data-lanes = <2>; clock-lanes = <0>; clock-noncontinuous = <1>; }; }; }; }; &isi_0 { status = "okay"; cap_device { status = "okay"; }; }; &isi_1 { status = "okay"; cap_device { status = "okay"; }; }; &mipi_csi_0 { status = "okay"; #address-cells = <1>; #size-cells = <0>; compatible = "fsl,imx8mp-mipi-csi"; no-reset-control; //power-domains = <&mipi_phy1_pd>; port@0 { reg = <0>; mipi_csi0_ep: endpoint {}; }; }; &mipi_csi0_ep { remote-endpoint = <&cam1_mipi_ep>; data-lanes = <4>; csis-hs-settle = <16>; csis-clk-settle = <2>; csis-wclk; }; &mipi_csi_1 { status = "okay"; port@1 { reg = <1>; mipi_csi1_ep: endpoint {}; }; }; [ 107.559356] imx8_mipi_csi2_sam: module is from the staging directory, the quality is unknown, you have been warned. [ 107.580669] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator [ 107.611984] : mipi_csis_imx8mp_phy_reset, No remote pad found! [ 107.626983] mxc-mipi-csi2-sam 32e50000.csi: lanes: 2, hs_settle: 0, clk_settle: 0, wclk: 0, freq: 266000000 [ 107.658121] ar052x 1-0036: Probing ar052x Driver [ 107.662908] i2c i2c-1: new_device: Instantiated device ar052x at 0x36 [ 107.688612] imx8_isi_capture: module is from the staging directory, the quality is unknown, you have been warned. [ 107.711395] imx8_capture: module is from the staging directory, the quality is unknown, you have been warned. [ 107.724051] isi-capture 32e00000.isi:cap_device: deferring 32e00000.isi:cap_device device registration [ 107.733520] mxc-isi 32e00000.isi: mxc_isi.0 registered successfully [ 107.741636] isi-capture 32e02000.isi:cap_device: deferring 32e02000.isi:cap_device device registration [ 107.751060] mxc-isi 32e02000.isi: mxc_isi.1 registered successfully [ 108.118167] imx8_media_dev: module is from the staging directory, the quality is unknown, you have been warned. [ 108.164988] mx8-img-md: Registered mxc_isi.0.capture as /dev/video0 [ 108.194417] mx8-img-md: Registered mxc_isi.1.capture as /dev/video1 [ 108.214117] mxc-md 32c00000.bus:camera: 2 deferring csi device registration 这是显示失败的日志。我不明白为什么媒体驱动程序尝试查找名为“isi”的节点,并且当两个节点相同时会失败。 到目前为止我已经尝试了很多事情。 其中一件重要的事情是,当我在 mipi_csi1 中设置 status="disabled" 时,csi2-sam 驱动程序就不会探测。 i.MX 8M | i.MX 8M Mini | i.MX 8M Nano 回复:imx8.mp 无法设置相机 Hi, 感谢您对恩智浦半导体产品的关注, 确保您的传感器已正确初始化,请参考以下步骤。 用户必须通过以下步骤确保传感器能够正常工作: • 检查所有电源电压。 • 检查传感器MCLK频率。 • 检查重置和电源顺序。 • 确保传感器和 SoC 之间的 I2C 通信正常。 • 确保传感器初始化寄存器配置正确。 • 检查传感器数据通道和时钟通道信号。 • 确保传感器输出流在 SoC MIPI 捕获能力范围内(参见第 5 节)。 此致 回复:imx8.mp 无法设置相机 真正的问题是 CSI 驱动程序仅为 CSI1 调用,而不为 CSI0 调用。 [ 35.617099] imx8_mipi_csi2_sam: module is from the staging directory, the quality is unknown, you have been warned. [ 35.638426] mxc-mipi-csi2-sam 32e50000.csi: supply mipi-phy not found, using dummy regulator 我没有看到它被称为 32e40000.csi
記事全体を表示
OpenVX Vision图像扩展API介绍-基础API <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 简介 EVIS(增强视觉指令集)是一种API级编程语言,适用于GC7000XSVX(i.MX8QM)和VIP8000NanoSi(i.MX8MP)。这些指令利用了具有视觉功能的硬件中增强的视觉功能,具有低延迟。除了通过 Khronos Group OpenVX API 提供的功能之外,它还为视觉图像处理提供了额外的功能。在i.MX8QM/i.MX8MP BSP中,OpenCL编译器也支持EVIS指令。所以,它也是一个 OpenCL VX 扩展 API。 源文件可以在/usr/include/CL/cl_viv_vx_ext.h中找到。 硬件要求 i.MX8QM (GC7000XSVX) 支持 EVIS1。 i.MX8MP (VIP8000NanoSi) 支持 EVIS2。 打包数据类型 为了充分利用指令的计算能力,扩展API支持打包数据类型。例如,在标准 OpenCL 中,矢量 char4 将占用 4x 32 位寄存器,而打包的 char16 仅占用 128 位。因此尽可能使用打包数据类型。 字符型、无符号字符型、短整型、无符号短整型、整数型、无符号整数型、 支持浮点打包数据类型。它们的定义是 vxc_ 前缀即 vxc_char、vxc_uchar、vxc_short、vxc_ushort、vxc_int、vxc_uint、vxc_float,后跟定义 元素的数量 打包数据。对于所有压缩包,支持的 n 值为 2、4、8 和 16 数据 类型。 表1 打包数据类型列表 类型 描述 vxc_charn n 个压缩有符号字符的向量 价值 vxc_ucharn n 个无符号压缩向量 特点 价值 vxc_shortn n 个向量被打包 签名短 价值 vxc_ushortn n 个压缩无符号短整型值的向量 vxc_intn n 个压缩有符号整数值的向量 vxc_uintn n 个压缩无符号整数值的向量 vxc_floatn n 个压缩浮点数的向量 价值 OP_CODE指令 OP_CODE指令对打包数据进行操作。枚举可以在/usr/include/CL/cl_viv_vx_ext.h中找到。 仅EVIS1支持指令: VXC_IAdd VXC_MagPhase VXC_双线性 VXC_选择添加 VXC_BitReplace VXC_过滤器 VXC_DP2x16/VXC_DP2x16_b 对象加载和存储 打包类型图像数据读/写:支持的类型为打包8位/16位整数、16位浮点数。image1d_t/image1d_array/image2d_t 的图像读/写。偏移量应使用 VXC_5BITOFFSET_XY(x, y) 组成。 VXC_OP4(img_load,目标,图像,坐标,偏移量,信息) VXC_OP4_NoDest(img_store,图像,坐标,颜色,信息) 参数: img_load/img_store 读取/写入图像数据。 目标 加载数据的目的地。 图像为 img_load 读取的打包图像数据。将打包好的图像数据写入img_store。 坐标坐标来读取/写入图像数据。 颜色正在写入 img_store 的图像的图像数据。 信息 请参阅 VXC_MODIFIER(StartBin, EndBin, SourceBin, RoundingMode, Clamp) 中的更多信息。 VXC_MODIFIER(StartBin, EndBin, SourceBin, RoundingMode, Clamp) 参数: StartBin/EndBin 连续打包数据的第一个 bin/最后一个 bin。 SourceBin 未使用。 RoundingMode 0 :向零(截断), 1 :向无穷大(向上舍入), 2 :向最接近的偶数, 3 :未使用。 钳位0 :否,结果被截断以适合结果类型(仅复制低位), 1 :是,结果被钳位以适合结果类型。 例如, int2 坐标 = (int2)(get_global_id(0),get_global_id(1)); vxc_uchar16 r1; VXC_OP4(img_load, r1, in_image, coord , 0, VXC_MODIFIER(0, 15, 0, VXC_RM_TowardZero, 0)); VXC_过滤器 该接口将指定的过滤器应用于 3x3 像素块。 VXC_OP4(过滤器,目标,Src0,Src1,Src2,信息) 参数: 过滤器过滤模式。 目标已过滤的图像。 Src0 3x3 过滤器的第一行像素。 Src1 3x3 过滤器的第二行像素。 Src2 3x3 过滤器的第三行像素。 信息请参阅 VXC_MODIFIER_FILTER(StartBin、EndBin、SourceBin、Filter、Clamp)中的更多信息。 VXC_MODIFIER_FILTER(StartBin, EndBin, SourceBin, Filter, Clamp) 参数: StartBin/EndBin连续打包数据的第一个 bin/最后一个 bin。 SourceBin 未使用。 过滤器 过滤模式如表2所示。 Clamp 0 :否,结果被截断以适合结果类型(仅复制低位), 1 :是的,结果被限制以适合结果类型。 表 2. 过滤模式列表: 过滤模式 描述 VXC_FM_BOX 计算 3x3 盒式过滤器: |1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9, 1/9|. VXC_FM_高斯 计算 3x3 高斯滤波器: |1/16, 2/16, 1/16, 2/16, 4/16, 2/16, 1/16, 2/16, 1/16|. VXC_FM_SobelX 计算 x 方向的 3x3 Sobel 滤波器: |-1,0,1,-2,0,2,-1,0,1|。 VXC_FM_SobelY 计算 y 方向的 3x3 Sobel 滤波器: |-1,-2,-1,0,0,0,1,2,1|。 VXC_FM_ScharrX 计算 x 方向的 3x3 Scharr 滤波器: |3, 0, -3, 10, 0, -10, 3, 0, -3|. VXC_FM_ScharrY 计算 y 方向的 3x3 Scharr 滤波器: |3, 10, 3, 0, 0, 0, -3, -10, -3|. VXC_FM_Max 从 3x3 内核获取最大值。 VXC_FM_最小值 从 3x3 内核中获取最小值。 VXC_FM_中值 从 3x3 核中获取中位数。 例如(高斯滤波器示例中的详细信息), int2 coord_in1 = coord + (int2)(-1, -1);\n\ VXC_OP4(img_load,lineA,in_image,coord_in1,0,VXC_MODIFIER(0,15,0,VXC_RM_TowardZero,0));\n\ int2 coord_in2 = coord + (int2)(-1, 0);\n\ VXC_OP4(img_load,lineB,in_image,coord_in2,0,VXC_MODIFIER(0,15,0,VXC_RM_TowardZero,0));\n\ int2 coord_in3 = coord + (int2)(-1, 1);\n\ VXC_OP4(img_load,lineC,in_image,coord_in3,0,VXC_MODIFIER(0,15,0,VXC_RM_TowardZero,0));\n\ int info = VXC_MODIFIER_FILTER(0, 13, 0, VXC_FM_Guassian, 0);\n\ VXC_OP4(过滤器,输出,线路A,线路B,线路C,信息);\n\ VXC_AbsDiff 计算 a 和 b 之间的绝对差的结果。它适用于打包数据,因此可以计算 16x 8 位值或 8x 16 位值。 VXC_OP3(abs_diff, 目标, Src0, Src1, 信息) 参数: abs_diff 指定绝对差函数。 Dest 存储结果的目的地。 Src0 计算绝对差的第一个源。 Src1 计算绝对差的第二个来源。 信息请参阅 VXC_MODIFIER(StartBin, EndBin, SourceBin, RoundingMode, Clamp) 中的更多信息。 还有其他接口这里就不一一列举了,可以在/usr/include/CL/cl_viv_vx_ext.h中找到。IEVXC_IAdd、VXC_IAccSq、VXC_Lerp、VXC_MagPhase、VXC_MulShift、VXC_Clamp、VXC_BiLinear、VXC_SelectAdd、VXC_AtomicAdd、VXC_BitExtract 和 VXC_BitReplace。 进一步阅读: OpenVX Vision图像扩展API介绍-DP Dot Products 回复:OpenVX Vision图像扩展API介绍-基础API <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 有用,请问大神OpenVX Vision Image Extension API Introduction - DP Dot Products这个链接怎么进不去呢!
記事全体を表示
u-boot 环境预设用于 SD 卡镜像 在某些情况下,例如量产或准备演示。 我们需要将 u-boot 环境存储在 demo sdcard 镜像中。 这里有一种方法: HW:  i.MX8MP evk SW: LF_v5.15.52-2.1.0_images_IMX8MPEVK.zip 思路是使用 fw_setenv 将 SD 卡镜像设置为与在真实 eMMC/SD 卡上的操作相同。 出于测试目的,在 u-boot-initial-env 中添加 test=ABCD。 并使用 fw_printenv 进行检查,同时使用 hexdump 进行二次确认。 U-Boot 环境变量已写入 SD 卡镜像 (imx-image-multimedia-imx8mpevk.wic)。所有这些操作都是在主机 x86/x64 PC 上进行的。 ./fw_setenv -c fw_env.config -f u-boot-initial-env Environment WRONG, copy 0 Cannot read environment, using default ./fw_printenv -c fw_env.config Environment OK, copy 0 jh_root_dtb=imx8mp-evk-root.dtb loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${bsp_script}; mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi arch=arm baudrate=115200 ...... ...... ...... splashimage=0x50000000 test=ABCD usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi vendor=freescale hexdump -s 0x400000 -n 2000 -C imx-image-multimedia-imx8mpevk.wic 00400000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| hexdump -s 0x400000 -n 10000 -C imx-image-multimedia-imx8mpevk.wic 00400000 5f a4 9b 97 20 6a 68 5f 72 6f 6f 74 5f 64 74 62 |_... jh_root_dtb| 00400010 3d 69 6d 78 38 6d 70 2d 65 76 6b 2d 72 6f 6f 74 |=imx8mp-evk-root| 00400020 2e 64 74 62 00 20 6c 6f 61 64 62 6f 6f 74 73 63 |.dtb. loadbootsc| 00400030 72 69 70 74 3d 66 61 74 6c 6f 61 64 20 6d 6d 63 |ript=fatload mmc| 00400040 20 24 7b 6d 6d 63 64 65 76 7d 3a 24 7b 6d 6d 63 | ${mmcdev}:${mmc| 00400050 70 61 72 74 7d 20 24 7b 6c 6f 61 64 61 64 64 72 |part} ${loadaddr| 00400060 7d 20 24 7b 62 73 70 5f 73 63 72 69 70 74 7d 3b |} ${bsp_script};| 00400070 00 20 6d 6d 63 5f 62 6f 6f 74 3d 69 66 20 6d 6d |. mmc_boot=if mm| ...... ...... ...... 00401390 76 3d 31 00 73 6f 63 3d 69 6d 78 38 6d 00 73 70 |v=1.soc=imx8m.sp| 004013a0 6c 61 73 68 69 6d 61 67 65 3d 30 78 35 30 30 30 |lashimage=0x5000| 004013b0 30 30 30 30 00 74 65 73 74 3d 41 42 43 44 00 75 |0000.test=ABCD.u| 004013c0 73 62 5f 62 6f 6f 74 3d 75 73 62 20 73 74 61 72 |sb_boot=usb star| 004013d0 74 3b 20 69 66 20 75 73 62 20 64 65 76 20 24 7b |t; if usb dev ${| 004013e0 64 65 76 6e 75 6d 7d 3b 20 74 68 65 6e 20 64 65 |devnum}; then de| 将 SD 卡镜像刷写到 i.MX8MP EVK 开发板的 eMMC 中以检查 uuu -b emmc_all imx-boot-imx8mp-lpddr4-evk-sd.bin-flash_evk imx-image-multimedia-imx8mpevk.wic  首次启动时,环境变量已存在。 如何实现: a. fw_setenv/fw_printenv: https://github.com/sbabic/libubootenv.git 注意:请勿使用 uboot 的 fw_setenv/fw_printenv 工具 在主机 x86/x64 PC上编译。工具仅在主机上使用。 b. u-boot-initial-env 在 uboot 环境下,生成 u-boot-initial-env 注意:Yocto 默认会部署 u-boot-initial-env c. fw_env.config  imx-image-multimedia-imx8mpevk.wic 0x400000 0x4000 其中 0x400000 和 0x4000 这两个值来自 uboot-imx/configs/imx8mp_evk_defconfig 配置文件。 CONFIG_ENV_SIZE=0x4000 CONFIG_ENV_OFFSET=0x400000 现在,您可以运行 ./fw_setenv -c fw_env.config -f u-boot-initial-env i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano i.MX6 全部 i.MX6DL i.MX6 双核 i.MX6DualPlus | 6QuadPlus i.MX6 四核 i.MX6S i.MX6SL i.MX6SoloX i.MX6UL i.MX7 双核 i.MX7 单核 i.MX7ULP i.MX8ULP Linux
記事全体を表示
i.MX 8 - RTSP 流媒体支持 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 最近我在 i.MX 开发者博客上发布了一篇关于 Gateworks 插件 gst-variable-rtsp-server 对 i.MX 6 支持的文章。 现在,您也可以了解如何在 i.MX 8 SoCs 上使用该插件。 1. 准备图像。 为了使用 gst-variable-rtsp-server 插件,请准备好您的机器和发行版: 将以下行添加到 conf/local.conf: IMAGE_INSTALL_append += "gstreamer1.0-rtsp-server gst-variable-rtsp-server" 下载附带的补丁并通过以下方式应用: $ cd /sources/meta-fsl-bsp-release/ $ git am ~/Download/0001-Add-RTSP-support-for-i.MX-8-L4.14.78_ga1.0.0-or-olde.patch 注意:对于 L4.14.98_ga2.0.0 BSP,此补丁不是必需的! 然后,使用bitbake构建镜像并将其部署到SD卡。 2. 视频测试源示例 服务器 $ gst-variable-rtsp-server -p 9001 -u "videotestsrc ! v4l2h264enc ! rtph264pay name=pay0 pt=96" 客户 2. 视频测试源示例 服务器 $ gst-variable-rtsp-server -p 9001 -u "v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480 ! v4l2h264enc ! rtph264pay name=pay0 pt=96" 客户 若要使用 VLC 或其他应用程序作为客户端,只需输入如下方图片所示的 URL: i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus i.MX 8M | i.MX 8M Mini | i.MX 8M Nano 多媒体 关于:i.MX 8 - RTSP 流媒体支持 IMAGE_INSTALL_append += "gstreamer1.0-rtsp-server gst-variable-rtsp-server" 如果我说错了请纠正我,这里可能还需要添加 gstreamer1.0-plugins-good 和 gstreamer1.0-plugins-bad 插件。因为你在示例中使用了 v4l2h264enc。 因此,上述行应更改为: IMAGE_INSTALL_append += "gstreamer1.0-rtsp-server gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gst-variable-rtsp-server"
記事全体を表示