Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
How to load MDK RAM app to the RT1170 external flash How to load MDK RAM app to the RT1170 external flash 1. Abstract This guide is requested by our end customer, he wants to realize the MDK project RAM code download to the MIMXRT1170 external QSPI flash. So, based on the NXP RT1170 SDK, and the MIMXRT1170-EVK board, generate the MDK project, reallocate the app image, generate the image, and use the tool to download the code to the external flash. 2. App image prepare 2.1 Generate one SDK MDK standalone project Open the SDK_2_15_000_MIMXRT1170-EVK webpage: https://mcuxpresso.nxp.com/en/builder?hw=MIMXRT1170-EVK Download the SDK, and generate one MDK standalone project: Fig 1 Fig 2 After downloading, we will get the MIMXRT1170-EVK-iled_blinky_cm7.zip, which is the MDK project. 2.2 MDK project image reallocation As the RAM image is the none-xip image, normally to the IDE, can’t download to the flash directly, as the debug is in the RAM. If want to download to the flash, we can generate the app image, then use the tool to program it to the external flash. Normally, none-xip image, the IVT offset is 0X400, so we need to reallocate the image start address, here, we can use 0X2000 as the app entry address. Fig 3 ITCM default size is 256K=0X4000, so modify the linker file-> scf file like this: Fig 4 Now, to generate the hex and bin image file, which is used for the tool downloading. Fig 5 To build the bin file command: $K\ARM\ARMCC\bin\fromelf.exe --bin --output=debug\@L.bin !L Fig 6   Building, you can find the file in the folder: MIMXRT1170-EVK-iled_blinky_cm7\iled_blinky_cm7\debug Fig 7 2.3 MDK project debug after reallocation After the image reallocation, some customer may still need the MDK RAM project can do the debugging, here, also need to modify the debug .ini file. The Setup also need to change the SP, PC and Vector table offset register address. Fig 8 Then build and debug the code, we can find it can enter the ram image debug mode: Fig 9 3. App image download We can use the MCUBootUtility Tool to download the code: https://github.com/JayHeng/NXP-MCUBootUtility/releases/tag/v6.1.0 the related user manual is: https://github.com/JayHeng/NXP-MCUBootUtility Download the tool. MIMXRT1170-EVK enter the serial download mode by changing SW1: 1-OFF,2-OFF,3-OFF,4-ON Power off and power on the board again, find another USB cable to connect the J20 USB1 interface. Then, use the MCUBootutility to connect the board: Fig 10 After connection, select the MDK project generated .hex file: Fig 11 Press the All-in-One-Action button, to download the code, this is the downloaded result: Fig 12 Press the “Reset device” button to exit the tool. Then MIMXRT1170-EVK board change SW1: 1-OFF, 2-OFF, 3-ON,4-OFF Press the EVK on board reset button, SW4, you will find the LED is blinking, it means the MDK RAM project already download to the external QSPI flash, and boot OK.
記事全体を表示
示例_Reg_Prot_Flash_控制器_S32K344 ************************************************************************************************ * 详细说明: * 示例锁 * PFC PFCBLK2_SSPELOCK REG_PROT 软锁 * 和 PFC REG_PROT 硬锁。 * ----------------------------------------------------------------------------- *测试硬件::S32K344EVB-Q172 *单片机: : S32K344 * 项目:RTD AUTOSAR 4.7 * 平台:CORTEXM * 外围设备:S32K3XX * 依赖项:无 * * Autosar版本:4.7.0 * Autosar 修订版:ASR_REL_4_7_REV_0000 * 软件版本:5.0.0 *构建版本:S32K3_RTD_5_0_0_D2408_ASR_REL_4_7_REV_0000_20241002 ************************************************************************************************
記事全体を表示
Example IP S32K312 EMIO PWM Generation & Duty capture using Polling DS3.5 RTD300 ******************************************************************************* The purpose of this demo application is to present a usage of the EMIOS IP Driver in Polling mode for the S32K3xx MCU. The example use to :-- EMIOS-1 - ch-0  --> PTC24 --> Generate the PWM EMIOS-1 - ch-1  --> PTC25 --> is the ICU channel to measure the duty Pins used :-- This example is tested for IPWM mode .  :--     IPWM mode ,  ICU Driver User Manual :-- Result :--  ------------------------------------------------------------------------------ * Test HW: S32K3X2EVB-Q172 * MCU: S32K312 * Compiler: S32DS3.5 * SDK release: RTD 3.0.0 * Debugger: PE micro * Target: internal_FLASH ********************************************************************************
記事全体を表示
Zephyrカスタムボードとアプリケーション これらのリソースに関するご質問や問題がございましたら、新しい質問をお寄せください。そちらで NXP サポートチームが対応いたします。 カスタムボード Zephyrリポジトリには、数十の NXP開発ボードのサポートが含まれています。カスタムボードを作成する場合は、同じファミリのSOCを使用して最も近い開発ボードから開始し、そのボードフォルダをクローンし、新しいボードとして名前を変更し、ハードウェアに合わせて変更することをお勧めします。カスタムボードのその他のリソースには、次のものがあります。 Zephyr Project Board ポーティングガイド NXPブログ: i.MX RT685用のカスタムZephyrボードの作成 このページの「ボード pinctrl の生成」を参照してください クローン化された開発ボードからメモリ設定を変更する場合は、Zephyr のメモリの詳細を参照してください。 VS Code用のMCUXpressoでは、v25.3.72の時点で、アウトオブツリーボードは、Zephyrアプリケーションをインポートするときにはサポートされていません。この機能は近日中に追加される予定です。それまでの間、 回避策があります。 サポートされていない SOC 部品番号 カスタムボードを作成する際の一般的な課題は、NXPが販売するすべてのSOC部品番号が現在Zephyrでサポートされているわけではないことです。 Zephyrでのサポートは、SOCによる直接のサポートではなく、取締役会に基づいています。Zephyr アプリケーションをビルドする際には、ボード名を指定する必要があります。次に、ボード ファイルには、そのボードで使用される SOC が含まれます。これらは、Zephyrでサポートされている NXPボード です。Zephyrのドキュメンテーションフレームワークには、SOCの同様のページはありません。 NXPは、開発ボードのZephyrサポートを提供しています。通常、1つの開発ボードがSOCのファミリーをサポートします。通常、開発ボードにはスーパーセットSOCがあり、そのファミリの中で最も多くの機能/メモリを提供します。たとえば、MIMXRT1060-EVKボードは、i.MX RT106xファミリでの開発に使用され、スーパーセットRT1062の部品番号を使用します。ファミリ内の他の部品番号はスーパーセットと非常によく似ていますが、一部の機能が不足している、メモリが少ない、または小さなパッケージのピンが少ない場合があります。 Zephyrのサポートはボードに基づいており、ボード上のSOCがサポートされているため、今日では、Zephyrで直接サポートされていない他の多くの同様のSOC部品番号があります。カスタムボードを作成する際にこれを管理するためのいくつかのオプションを次に示します。 Zephyrでサポートされている開発ボードをカスタムボードのベースにし、カスタムボードで同じSOC部品番号を使用します。そのSOCは、開発ボードを有効にするためにZephyrですでに利用可能です。 回路基板上では同じファミリのSOCを使用しますが、Zephyrカスタムボードは開発ボード上のスーパーセットSOCを使用するように構成します。たとえば、回路基板はRT1061部品番号を使用していますが、カスタム基板ファイルではMIMXRT1060-EVKと同じRT1062部品番号が使用されています。このオプションの利点は、Zephyrが追加のSOCサポートを必要としないことです。スーパーセットには、回路基板上のSOCで使用可能なすべての機能とメモリが含まれている可能性があります。その後、カスタムボードファイルは、使用できない周辺機器を無効にし、必要に応じてメモリサイズを減らすことで、デバイスツリーとKconfigを変更できます。SOC pinctrl ファイルは、 HAL_NXP リポジトリにある、サポートされているファミリのほとんどの SOC で使用できます。通常、カスタムボードには、使用される正確な部品番号のSOC pinctrlファイルを含めることができます。 同じファミリーのSOCを使用しますが、Zephyrで必要なすべてのSOCファイルを提供します。たとえば、回路基板が RT1061 部品番号を使用しているため、開発者は RT1061 部品番号オプションを Zephyr リポジトリに追加し、その RT1061 部品番号を使用するようにカスタム ボードを構成します。このオプションでは、Zephyr リポジトリにより多くの労力とある程度の快適さが必要ですが、一部の Zephyr ユーザーはこのオプションを好む場合があります。また、このように新しいSOCが有効になっている場合は、Zephyrリポジトリの上流にコントリビュートできます。 上記のSOCオプションは、SOCファミリーのボードがZephyrですでにサポートされており、そのファミリーで少なくとも1つのSOCが有効になっていることを前提としています。取締役会のサポートがない新しいSOCファミリーにZephyrを移植しようとすると、かなり多くの労力がかかる可能性があります。ポーティングの手間を最小限に抑えるには、ボードですでにサポートされているSOCファミリから始めるのが最善です。 ピンctrl Zephyr は pinctrl を使用して、SOC のピンと pinmux の設定を構成します。通常、各ボードには、そのボードのデフォルトの pinctrl 設定を含む pinctrl ファイルがあります。たとえば、これは mimxrt1060_evk-pinctrl.dtsi です。NXPには、mimxrt1062dvl6a-pinctrl.dtsiなどの各SOCのpinctrlファイルもあります。SOC の pinctrl ファイルは HAL_NXP リポジトリにあり、各ピンのすべての pinmux オプションが用意されているため、ボードの pinctrl ファイルで pinmux オプションを簡単に選択し、読みやすくなります。NXPボードの場合、ボードのpinctrlファイルには、次のようなSOCのpinctrlファイルが含まれています。 #include ボードpinctrlの生成 新しいボードの pinctrl ファイルは通常、新しいボードを作成するときに作成されます。ボードのピンコントロールファイルは、いつでも手作業で作成できます。ただし、特にNXPは MCUXpresso Config Toolに含まれるピンツールを提供しているため、ファイルの生成は便利な場合があります。ピンツールには、アプリケーションで使用されるすべての必要な信号を選択し、ピンマルチプレクサとピンの設定を構成するのに役立つGUIがあります。リリース v25.03 以降、Config Tool では、i.MX RT1xxx および MCX デバイス用の Zephyr ボード pinctrl ファイルを生成できます。Zephyr でサポートされているデバイスは、今後のリリースで追加される予定です。ボードの pinctrl ファイルを生成する方法については、 Config Tool User Guide を参照してください。 Config Toolでまだサポートされていない他のデバイスの場合、NXPにはボードのpinctrlファイルを生成するのに役立つPythonスクリプトがあります。これらのスクリプトは、最終的に Config Tool に置き換えられ、非推奨になります。このスクリプトは、上記と同じコンフィグ ツールを使用してボードのピンを構成し、ファイルからピン情報を抽出してボードの pinctrl ファイルを生成します。スクリプトは HAL_NXP リポジトリに含まれており、この Readme に記載されています。 生成ができない場合は、ボードの pinctrl を手書きする必要があります。最適なオプションは、同様の SOC のボード pinctrl ファイルを見つけ、必要に応じて変更することです。 新しいツリー外アプリケーション Zephyr リポジトリには、ドライバー、サブシステム、またはモジュールの使用方法を学ぶのに役立つ サンプル と テスト アプリケーションが豊富にあります。新しいアプリケーションを作成するときは、アプリ用に新しい Git リポジトリを作成し、West を使用して Zephyr リポジトリをモジュールとして取り込むことができます。アプリケーションでは、ZephyrでWestの T2 Starトポロジ が頻繁に使用されます。これらのリポジトリの例は、アプリケーション リポジトリを作成する際の参考資料として適しています。 Zephyr Project の example-application リポジトリには、ツリー外のボードとドライバーが含まれています NXPのZephyrデモとサンプルのリポジトリ Zephyrの例のNXP Proサポートリポジトリ Zephyr Knowledge Hub に戻る
記事全体を表示
i.MX 6Solo LPDDR2 レジストリ設定 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 問題 : LPDD2 メモリを使用している i.MX 6Solo デザインで、2 つの重要なレジストリの正しい設定を判断するのが難しい場合があります。 ソリューション: 1) MMDCx_MDMISCレジスタ、LPDDR2_2CHフィールド: i.MX 6Soloプロセッサの場合、このフィールドは常に「0」に設定する必要があります。 理由:このプロセッサでは2チャネルモードは不可能です。チャネルMMDC0のみが外部ピンに接続されています。 2) IOMUXC_SW_PAD_CTL_PAD_DRAM_RESETレジスタ、DDR_SELフィールド: i.MX 6Soloプロセッサの場合、このフィールドは常に「00」に設定する必要があります。 理由 : DRAM ウォーム リセットには MMDC1 からの応答が必要ですが、MMDC1 は 6Solo プロセッサの外部に接続されていないため、ウォーム リセットは完了しません。 これら2つの問題は、MCIMX6SDLリファレンスマニュアルの今後の改訂で明確になります。 日時:i.MX 6Solo LPDDR2レジストリ設定 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、Yogee: 私たちはあなたと同じ問題に遭遇します。シングルチャネルLPDDR2(128Mx32)を使用すると、ubootでスタックします。ストレステストツールは問題なく動作しますが、ubootは成功しません。何かアイデアがあり、親切に私たちと共有しますか? どうもありがとうございます。 ヤオホア 日時:i.MX 6Solo LPDDR2レジストリ設定 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはYogee、 私はあなたの両方のファイルを見ました。2つのファイルの間には大きな違いが1つあります。 レジスタ0x021B0848(項目31)ストレステストファイルの値が0x40404040、DCDファイルの値が0x4E4E504C レジスタ0x021B0850(項目32)ストレステストファイルの値が0x40404040、DCDファイルの値が0x3434382E 私の質問は、DCDファイルのこれらのレジスタ値をどのようにして思いついたのですか?ストレス テスト値は、実際にはレジスタのデフォルト値です。 これらの値を決定するためにストレステストを使用していますか?答えが「はい」の場合は、ストレス テストのキャリブレーション手順から取得した値をストレス テスト ファイルに代入し、キャリブレーション テストを実行せずにストレス テストを実行してみてください。これに合格した場合は、DCD レジスタの設定がストレス テストで使用している値と同じであることを確認し、再試行してください。 DCD ファイルに見当たらなかったもう 1 つのことは、CCM クロック レジスタ 0x020c4018 を 0x00060324 の値に設定するための行エントリでした。このレジスタのデフォルト値は0x00064324で、変更されるフィールドはperiph_clk2_selであり、MMDCに影響を与えるはずはないと思いますが、それでもフィールドはストレステストファイルで意図的にそのように設定されているため、違いが生じる可能性があります。 現時点では、ファイルに他に問題はありません。ストレス テストのレジスタ値が機能していて、エラーが発生しない場合は、DCD ファイル内の同じ値が機能しているはずです。うまくいけば、上記があなたの問題を解決するでしょう。 そうでない場合は、私に知らせてください、そして私は何か他のものを見つけようとします。 それでは。 印 日時:i.MX 6Solo LPDDR2レジストリ設定 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはYogee、 DDR ストレス テスト ツールを使用していて、それが機能している場合は、プロセッサにロードしているパラメーターは既に正しいです。 私はあなたの本当の問題はどちらかだと思います: 1) u-bootファイル内のパラメータが、ストレステストツールで決定したパラメータと同じではない(同じである必要があります) 2) レジスタ パラメータが正しい順序で読み込まれていません。 パラメータをロードする必要がある特定の順序があり、その順序に従わないと、MMDC で問題が発生します。一般的に、順序は次のとおりです。 - IOMUX ピン設定。 - ZQキャリブレーションを含むMMDCキャリブレーション設定と、それに続くFRC_MSRビットの設定。 - メインの MMDC レジスタ設定をロードする (および、このセクションでロードされた最後のレジスタとして MMDC をオンにして初期化する) - 接続された LPDDR2 デバイスの MR レジスタを設定します。 u-boot DCDファイル(初期化パラメータを含むファイル)のコピーを添付すると、それを確認して、問題を引き起こしていると思われるものをすべて指摘します。 それでは。 Mark
記事全体を表示
FRDM-RW612 Getting Started. Wi-Fi CLI on VS Code Prerequisites  Hardware  FRDM-RW612 evaluation board  USB-C cable Software Visual Studio Code VS Code FRDM-RW612 SDK Serial Terminal Software: Tera Term You can use any serial terminal you have, but we are using Tera Term for the training slides Step by Step instructions document is here Step by Step video: (view in My Videos) FRDM-RW612 FRDM-Training Hands-On Training MCU Wireless
記事全体を表示
CodeWarriorプロジェクトをゼロから-パートI <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Codewarriorでフリーダムボード向けの基本的なプロジェクトをゼロから作成する方法。 ビデオリンクを見る:1459 (マイビデオで視聴) Re:ゼロからのCodeWarriorプロジェクト - パートI <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ビデオ チュートリアルの完全なセットについては、「The Book of Eli - Microcontrollers, robotics and warp drives」をご覧ください。
記事全体を表示
救援机器人GEORG荣获RoboCup全球总决赛第12名 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> GEORG 是德国纽伦堡乔治-西蒙欧姆应用技术大学飞思卡尔机器人实验室的救援机器人。上周,由 Stefan May 教授领导的学生团队参加了在荷兰埃因霍温举行的世界 RoboCup 决赛并获得了第 12 名。对于 GEORG 来说,这是一个相当不错的成绩,因为这是他们第一次进入世界总决赛。 自去年以来,机器人团队一直致力于将 ROS(机器人操作系统)移植到 Freescale i.MX 平台,以节省空间和电力(相对于机载 PC)。他们还致力于使用 Freedom 板作为模块开发分布式 ROS 计算系统。 在大学的机器人页面上查看 GEORG 的进展 学生项目
記事全体を表示
USB flash drive compatibility list (plugfest) This is report from internal USB flash drive plugfest (tested with MQX 4.0). VID PID VID Manufacturer Photo Vendor info Product info 0x0dba 0x0120 Realtek Generic Card Reader 0x8564 0x1000 Transcend JetFlash Transcend 4GB 0x0951 0x1654 Kingston Technology Kingston DT R500 0x0951 0x1647 Kingston Technology Kingston DT Mini Fun G2 0x0204 0x6025 Chipsbank Microelectronics CMB USB2.0 0x1516 0x1213 Myson-Century Technology USB DISK 2.0 0x1b1c 0x1ab1 Corsair Technology Corsair Voyager 0x0001 0x7778 Fry's Electronics Generic Flash Disk 0x125f 0xc08a ADATA ADATA USB Flash Drive (C008/32GB) 0x0dda 0x2026 Apacer ICSI IC1210 CF 0x0ea0 0x6828 Ours Technology 32MB HardDrive 0x0781 0x5530 SanDisk SanDisk SanDisk Cruzer (SDCZ36-004G) 0x111d 0x0000 IDT CENTON Swivel 0x0781 0x5406 SanDisk SanDisk SanDisk Cruzer (SDZ6-8192RB) 0x8564 0x1000 Transcend JetFlash Transcend 16GB 0x0951 0x1642 Kingston Technology Kingston DT 101 G2 USB HostDevice Stacks
記事全体を表示
Video- Power management on i.MX6 Sabre SDP with WEC7 by iWave Systems Windows Embedded Compact 7 (WEC7) BSP customizations by iWave Systems for Freescale’s SABRE SDP/B platform now supports power management. Power management was successfully developed for the i.MX6 multicore platform and tested for the standard suspend and resume functionalities. The processor enters into dormant mode and consumes the least power. As of now, iWave has reduced it to consume as much power as it is currently uses in Linux and Android. i.MX6Q has four CPU cores. The suspend power state not only turns off 3 CPU cores, but also puts the primary CPU on low power mode. On resuming, all 4 cores restart successfully.The process of Power management is being intelligently handled in order to reduce the power consumption to a greater extent. The Power consumption in the idle mode is 800mA whereas in the deep sleep mode it is 380mA, which is very much lesser than in the idle mode. Power Management for multicore processors can be used in a wide variety of handheld devices like tablets, video cameras, mobile phones and other entertainment solutions.  http://www.youtube.com/watch?v=5vED0_U20Cc General
記事全体を表示
客户MIPI传感器调试步骤.docx <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我被要求帮助将文档上传到 MPU 支持空间。该文档描述了一些关于如何支持客户启用与 i.MX6DQ/6DL 连接的 mipi-csi2 传感器的想法。希望这会有所帮助。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我被要求帮助将文档上传到 MPU 支持空间。该文档描述了一些关于如何支持客户启用与 i.MX6DQ/6DL 连接的 mipi-csi2 传感器的想法。希望这会有所帮助。 回复:客户 MIPI 传感器的调试步骤.docx <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 据我有限的知识,我认为使用它没有任何问题,假设传感器设置为使用该格式,mipi_csi2 和 IPU(可能需要将其添加到 csi_enc_setup?)。 根据我的经验,检查 CSI2 ERR1、ERR2 和 PHY_STATE 寄存器可以提供一些关于哪里出错的提示。 此致, 埃米尔 回复:客户 MIPI 传感器的调试步骤.docx <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 如果我理解该文档正确的话,您将需要使用 MIPI_CLK 作为 mipi 时钟,然后使用它的两倍(因为它是 DDR)作为比特率来查找您需要在CSI2_PHY_TST_CTRL1 中设置的值(使用文档中的列表)。 您还需要设置 ov564x 上的 MIPI 全局时序寄存器以匹配 PCLK。 另外,我发现配置 CSI2 时传感器的时钟一定不能运行。 我已经为 OV5645 传感器(基于 Freescale OV5640 驱动程序)完成了此操作,如果您有兴趣,我可以分享代码。它们应该非常相似。
記事全体を表示
A socket programming demo for MQX / RTCS (Socket.zip) A pair of TCP server & client and a pair UDP server & client are implemented to demo socket API in RTCS. It supports K60N512 and K70F120M on IAR EWARM 6.50 at this moment. You can port it to other boards and IDE easily. 1) Copy Freescale_MQX_4_0 folder and override the default MQX folder 2) RTCS Socket Example Guide.doc can be found in ..\Freescale_MQX_4_0\rtcs\examples\socket A pair of TCP server & client and a pair UDP server & client are implemented to demo socket API in RTCS. It supports K60N512 and K70F120M on IAR EWARM 6.50 at this moment. You can port it to other boards and IDE easily. 1) Copy Freescale_MQX_4_0 folder and override the default MQX folder 2) RTCS Socket Example Guide.doc can be found in ..\Freescale_MQX_4_0\rtcs\examples\socket Real-Time TCPIP Communications Suite Re: A socket programming demo for MQX / RTCS (Socket.zip) Thanks! I really(!) have missed this type of simple examples from Freescale. I adapted for my K60 tower. Was running directly.
記事全体を表示
[RT1170 Hardware Important] RT1170 HDUG important update NXP Updated the Hardware Development Guide for the MIMXRT1160/1170 Processor (MIMXRT1170HDUG) The main difference is: Updated capacitance value of VDDA_1P8_IN in Table 1 and Table 2 From 0.1uF to 1uF This will help improve the robustness of the circuit at low temperatures.
記事全体を表示
LX2160A プラットフォーム上の 2 番目の DDR コントローラを無効にします このドキュメントでは、2 番目の DDR コントローラをディセーブルにするためのソフトウェアの設定方法について説明します。 LX2160AプラットフォームでのみDDR1を使用し、DDR2のクロックを無効にするようにRCWを構成することが含まれます。 DEVDISR レジスタを使用し、HN-F SAM 制御レジスタを設定して DDR2 を 100 未満で無効にします。 CodeWarriorおよびatfソフトウェアのコーディング。 1. DEVDISRレジスタを使用してDDR2のクロックを無効にするようにRCWを設定します 2. CodeWarriorでDDR2を無効にするためのHN-F SAM制御レジスタの構成 3. 特定のDDRコントローラを無効にするようにHN-F SAM制御レジスタを設定するためのATFコーディング
記事全体を表示
How to recover LS Series processors boards using CodeWarrior and LS1012AFRWY. Quick start to recover a ATF in a damaged storage device. In this case, a blanked LS1012AFRWY QSPI, which is the only BL2 and FIP storage device on board, is restored using CW TAP, CW 4NET and Flex-Installer. Download firmware using flex-installer nxplayerscape@nxp-global-cas:~/Downloads/josephs-downloads/Flex-Installer-LDP$ flex-installer -i download -f firmware_ls1012afrwy_qspi.boot Please specify correct '-m ' Valid machine name: ls1012ardb ls1012afrwy ls1021atwr ls1028ardb ls1043ardb ls1046ardb ls1046afrwy ls1088ardb_pb ls2088ardb lx2160ardb_rev2 lx2162aqds  imx6qpsabresd imx6qsabresd imx6sllevk imx7ulpevk imx8mmevk imx8mnevk imx8mpevk imx8mqevk imx8qmmek imx8qxpmek imx8ulpevk  nxplayerscape@nxp-global-cas:~/Downloads/josephs-downloads/Flex-Installer-LDP$ flex-installer -i download -f firmware_ls1012afrwy_qspi.boot -m ls1012afrwy  Downloading http://www.nxp.com/lgfiles/sdk/sdk2110/firmware_ls1012afrwy_qspi.boot ...   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                  Dload  Upload   Total   Spent    Left  Speed   0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0 -rw-rw-r-- 1 nxplayerscape nxplayerscape 0 abr  6 13:27 firmware_ls1012afrwy_qspi.boot  Downloading http://www.nxp.com/lgfiles/sdk/sdk2110/boot_LS_arm64_lts_5.10.tgz ...   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                  Dload  Upload   Total   Spent    Left  Speed 100  342M  100  342M    0     0  5695k      0  0:01:01  0:01:01 --:--:-- 5752k  Downloading http://www.nxp.com/lgfiles/sdk/sdk2110/rootfs_sdk2110_ubuntu_main_arm64.tgz ...   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                  Dload  Upload   Total   Spent    Left  Speed 100  809M  100  809M    0     0  5641k      0  0:02:26  0:02:26 --:--:-- 3109k Downloaded distro images [Done] nxplayerscape@nxp-global-cas:~/Downloads/josephs-downloads/Flex-Installer-LDP$ flex-installer -i download -f firmware_ls1012afrwy_qspiboot.img Please specify correct '-m ' Valid machine name: ls1012ardb ls1012afrwy ls1021atwr ls1028ardb ls1043ardb ls1046ardb ls1046afrwy ls1088ardb_pb ls2088ardb lx2160ardb_rev2 lx2162aqds  imx6qpsabresd imx6qsabresd imx6sllevk imx7ulpevk imx8mmevk imx8mnevk imx8mpevk imx8mqevk imx8qmmek imx8qxpmek imx8ulpevk  nxplayerscape@nxp-global-cas:~/Downloads/josephs-downloads/Flex-Installer-LDP$ flex-installer -i download -f firmware_ls1012afrwy_qspiboot.img -m ls1012afrwy  Downloading http://www.nxp.com/lgfiles/sdk/sdk2110/firmware_ls1012afrwy_qspiboot.img ...   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current                                  Dload  Upload   Total   Spent    Left  Speed 100 1617k    0 1617k    0     0  1529k      0 --:--:--  0:00:01 --:--:-- 1529k -rw-rw-r-- 1 nxplayerscape nxplayerscape 1656690 oct 25  2021 firmware_ls1012afrwy_qspiboot.img boot_LS_arm64_lts_5.10.tgz already exists rootfs_sdk2110_ubuntu_main_arm64.tgz already exists Downloaded distro images [Done] Create a PBL project Note: Need to create a custom board connection based on: How to create a CWTAP to LS Series Processors JTAG-Link. Try to dump 16 MB of memory. Look for downloaded firmware Flash it to qspi using flash programmer. Press the reset button on LS1012AFRWY. Doesn't need to disconnect CWTAP. Hope this helps when no storage device has a valid binary to get to U-boot, when a board is running U-Boot or Tiny Distro, it can update any SW easily. Ask any questions you may have. Best regards, Joseph QorIQ LS1 Devices
記事全体を表示
i.MX 6 Series LDO Ramp Issue: Linux and Android Patches Now Available Summary of the Issue: We have had customers reporting failure to run MC and SC production parts at 1GHz or higher frequencies. The signature of the fail is that the system will hang once it tries to ramp from the boot frequency of 800MHz to 1GHz or higher. The root cause was tracked to the setting of the LDO_VOLT_CHANGE_EN fuse in production parts. The LDO_VOLT_CHANGE_EN fuse sets the LDO boot voltage to either 1.15V (indicated by a fuse setting of “1”) or 1.1V  (indicated by a fuse setting of “0”). In production parts the fuse is set to “1”, i.e. 1.15V, since this is the optimal setting based on characterization data. On pre-production units the LDO voltage was set to the lower setting of 1.1V (i.e. fuse set to “0”). The reason this is a problem with MC/SC parts is because the fuse is read by the ROM during boot and overwrites the LDO ramp rate bits in the PMU_MISC2 register based on the setting of the fuse. When the LDO_VOLT_CHANG_EN fuse is set to “1” then the LDO ramp up time to spec voltage is set (in PMU_MISC2) to 500uS instead of the 50uS assumed by the CPUFreq driver. This will cause the system to hang when transitioning from the boot frequency to a higher frequency/voltage point since the required voltage to support the higher frequency is not yet present. In real terms, customers who have production i.MX 6Quad/6Dual/6DualLite and 6 Solo parts have seen failures to ramp their products to 1GHz or higher frequencies. This is completely fixed by a software patch that corrects the LDO ramp setting in the PMU_MISC_2 register by setting it back to the fastest ramp time. Note that the LDO_VOLT_CHANGE_EN fuse is not in the reference manual since it is not a customer visible fuse. It is programmed and locked at final test. This is a mandatory fix for all customers. Affected Parts: i.MX 6Quad – all SC and MC parts, consumer and automotive. Industrial MC parts not yet shipping. i.MX 6Dual – all SC and MC parts, consumer and automotive. Industrial MC parts not yet shipping. i.MX 6DualLite – all MC parts consumer parts. Automotive and industrial MC parts not yet shipping. i.MX 6Solo – all MC consumer parts. Automotive and industrial MC parts not yet shipping. Patch Availability and Location: Patches exist for both Linux and Android. They are available on freescale.com. See below for more details. i.MX 6Quad – www.freescale.com/imx6q i.MX 6Dual – www.freescale.com/imx6d i.MX 6DualLite – www.freescale.com/imx6dl  i.MX 6Solo – www.freescale.com/imx6s Select the “Software and Tools” tab and then expand the section “Updates and Patches”.  The relevant patches are: Linux – L3.0.35_1.1.1_LDO_PATCH (i.MX 6Quad/6Dual) Linux – L3.0.35_3.0.3_LDO_PATCH (i.MX 6DualLite/6Solo) Android – IMX6_R13.4103_ANDROID_LDO_PATCH (i.MX 6Quad/6Dual/6DualLite/6Solo) Communication Roll-out: i.MX FAE’s: done (via maillist). Will post copy of this email to i.MX support space by end of day 1 st March. i.MX DFAE’s: 8 th March. Customer notification: 8 th March. i.MX community: 8 th March (to coincide with customer notification). We are also working on an engineering bulletin that describes the change for customers who are not using our provided Linux and Android BSP’s. Target date: TBD. But goal is to make this available on/around mid-March. Best regards, Amanda and Kyle This document was generated from the following discussion: i.MX 6 Series LDO Ramp Issue: Linux and Android Patches Now Available
記事全体を表示
Deploying SDK 1.3.2 In a previous document, I went through the basic steps of building SDK 1.3.2 for the first time. Now I'm ready to deploy the images onto my target, a P3041DS system. Fortunately my P3041 already has a U-boot and linux install on it. So I can just try and update the SDK from within U-boot. I boot up my trusty terminal - I use putty, and connect to my local COM port at 115200 baudrate. My Ubuntu server already has a tftp server installed, and I link my images over from the SDK build/deploy/images directory over to the /tftpboot directory. The QorIQ_SDK_Infocenter.pdf document within the install has information on the flash bank usage for the current SDK. Make sure you use the document and flash map from the current SDK, as things change. I ended up with a system that didn't boot when I used the older location for the fman uCode (from SDK 1.x) on the SDK 1.3.2 system. Here is a table from the document that shows the flash map for a couple of the QorIQ DS system. It's important to note here that this covers the NOR flash - which is what I'm currently using. You may want to experiment with using NAND or SPI based flash instead - but for my purposes I'm going to re-image NOR flash. The NOR on these development systems is banked, meaning that the most significant address line is tied to a DIP switch. So I can have multiple images in Flash at one time, and switch between them (especially helpful when I mistakenly corrupt one). I'm currently in bank0 (which is the "current bank" in the table above). From this, I see that the addresses I should be interested in are located at: Name Address rcw 0xe8000000 Linux.uImage 0xe8020000 uBoot 0xeff800000 fman uCode 0xeff40000 device tree 0xe8800000 linux rootfs 0xe9300000 To verify that this is correct, I can dump out my RCW: And I can also dump out my current U-boot (which should always start with an ASCII header identifying it): at this point I can start updating the images directly from my TFTP server. I have my tftp server already defined via the U-boot environment serverip, so I just tftp the U-boot image to a randomly picked address in RAM of 0x100000. The transfer went ok, so I can burn it into flash now. I will first erase the flash starting at 0xeff80000. Since U-boot is 0x80000 size, I'll erase from 0xeff80000 for size 0x80000. Apparently my sectors were protected. So I need to unprotect first, then erase again. And by reading the flash, I verify that it has been erased (erased NOR always reads back all 0xF's) So, now I can burn the flash: I use a binary copy. And then verify that the image was written correctly. Then we go through the same technique with the other images. I'll burn the fman ucode as well: Then for the actual images and dtb, you have an option of burning them, but I'll tftp them instead. For this I created a U-boot environment variable called ramboot, and point the image names to the paths on my server: At this point I can save the environment to flash via a saveenv command in U-boot. I'll re-boot into the new U-boot to make sure it works (if it doesn't for some reason, I can jump back to a different U-boot I had previously burned in the alternate bank, or else I'll have to use a debugger to re-burn the flash). Then, from within U-boot I can run ramboot, and if all goes well it should fetch the images and boot all the way into the new SDK. Eventually it should boot all the way to a linux prompt. QorIQ P1 Devices QorIQ P2 Devices QorIQ P3 Devices QorIQ P4 Devices QorIQ P5 Devices Re: Deploying SDK 1.3.2 1. RCW is always fetched from address 0x00000000 - this is true. When it comes to the NOR Flash, the actual address is 0xe8000000 thanks to some address bus manipulation & banking done by ngPixis. - in fact when the processor is booting up it see the NOR device only during interim state mapped from 0x0 (due of the OR0/BR0 register setting). Basically the flash contain is mapped multiple times through the SoC memory space - the same content of the flash will be visible in multiple window memory zones - just after reallocation (after the u-boot changes the OR0/BR0) you have absolute addressing. 2. You're right. 3. Up until this stage the address lines coming out eLBC onto the the processor pin is still 0xffff_fffc am I correct? - the addressing is with 0xffff_xxxx addresses - you're right Now with with external logics as well as control from ngPixis, when the address lines reach the NOR Flash, it will be 0xEFFFFFFC ? - in the first stage the u-boot re-map the u-boot zone anywhere it wants (historically the u-boot chose this 0xefxx_xxxx zone) using BR0/OR0, LAW and TLB registers. After all these settings a rfi  instruction is called (the return address - 0xEFxx_xxxx is set up in SRR0 and the MSR in SRR1). You can make also u-boot debug using CodeWarrior to see all this behavior. Regards, Marius Re: Deploying SDK 1.3.2 Marius, 1. You must select the Boot_location from RCW according with your device controller (e.g. eLBC, i2c, IFC, eSPI, eSDHC and so on). In this case should be eLBC 16bits mode -  you can see this setting more like a processorspecific setting. Regarding the RCW fetching, the processor fetches it based on the DIP SW settings from the selected boot device - whatever the device is, always the RCW is fetched from the beginning. --> ok, so RCW is always fetched from address 0x00000000  no matter what device is specified at rcw_src. When it comes to the NOR Flash, the actual address is 0xe8000000 thanks to some address bus manipulation & banking done by ngPixis. 2. According with first step you need to select from DIP SW settings and the desired boot device (NOR, NAND, SPI, SD, I2C and so on) - this is needed because you can have multiple flashes and the processor can't know from what device you want to boot up - you can see this setting more like a board specific setting. --> ok so we  have to specify the boot device at two places: in RCW and onboard switches. The onboard SW is to tell the ngPixis to select the right chip NAND/NOR, etc when processor starts fetching at CS0/OR0/BR0 am I right? 3. Now, based on the first 2 steps, the processor can boot up in a specific combination. In the case of the NOR booting up, the processor has a capability (using OR0/BR0 registers) to map the last part of the flash (this contains u-boot code) over the reset memory area (0xFFFF_FFFC). Let's say that 0xFFFF_FFFC will point to 0xXFFF_FFFC in the NOR flash (where X can be any - e.g. it can be 'E' when you flashed the u-boot starting with 0xEFF8_0000) - this is just to imagine by yourself how it works, but this space 0xEFxx_xxxx doesn't exist during reset/booting time. --> Now this is the part where I would like to clarify my understanding of what actually happens: The processor start fetching from effective address 0xffff_fffc which falls into boot window space. Before this, based on RCW which is setting BOOT_LOC to point to eLBC NOR flash, the processor already configures boot space translation registers to select eLBC ID and the translation registers high/low are still 0 by reset. Now eLBC has to use CS0/OR0/BR0 by default to access NOR Flash; the base value for BR0 is still 0 by reset, and FCM is selected. Up until this stage the address lines coming out eLBC onto the the processor pin is still 0xffff_fffc am I correct? Now with with external logics as well as control from ngPixis, when the address lines reach the NOR Flash, it will be 0xEFFFFFFC ? Re: Deploying SDK 1.3.2 Ok, let's try to reformulate this in less or more common words. 1. You must select the Boot_location from RCW according with your device controller (e.g. eLBC, i2c, IFC, eSPI, eSDHC and so on). In this case should be eLBC 16bits mode -  you can see this setting more like a processor specific setting. 2. According with first step you need to select from DIP SW settings and the desired boot device (NOR, NAND, SPI, SD, I2C and so on) - this is needed because you can have multiple flashes and the processor can't know from what device you want to boot up - you can see this setting more like a board specific setting. 3. Now, based on the first 2 steps, the processor can boot up in a specific combination. In the case of the NOR booting up, the processor has a capability (using OR0/BR0 registers) to map the last part of the flash (this contains u-boot code) over the reset memory area (0xFFFF_FFFC). Let's say that 0xFFFF_FFFC will point to 0xXFFF_FFFC in the NOR flash (where X can be any - e.g. it can be 'E' when you flashed the u-boot starting with 0xEFF8_0000) - this is just to imagine by yourself how it works, but this space 0xEFxx_xxxx doesn't exist during reset/booting time. Regarding the RCW fetching, the processor fetches it based on the DIP SW settings from the selected boot device - whatever the device is, always the RCW is fetched from the beginning. Hope that helps, Marius Re: Deploying SDK 1.3.2 Marius, I have read the answer and it is very useful. Nevertheless, I am writing here again my interpretation hopefully you can clarify with me if my understanding is correct: Say we set the RCW source to NOR flash and also within RCW we set BOOT_LOC to NOR Flash as well. At boot up, RCW is fetched from CS0 address 0x00000000 and then is decoded. Based on the BOOT_LOC value,  the value of Bootspace translation registers LCC_BSTRx (high, low, attribute) are updated accordingly to map the boot window space (from 0xFF800000 to 0xFFFFFFFF) to eLBC NOR Flash (at which  address??). From here I have no idea how is the u-boot loaded in and executed? Re: Deploying SDK 1.3.2 Hi, You can take a look to this response [1]. Regards, Marius [1] https://community.freescale.com/message/331578#331578 Re: Deploying SDK 1.3.2 Hi Paul, i have one question: For this scenario, RCW is loaded from NOR flash and then it will say BOOT_LOC is also from NOR flash. How does the processor know which address from BOOT_LOC to fetch  as this is not indicated in RCW? Re: Deploying SDK 1.3.2 Hi Ryan, I think it is mentioned on Infocenter  here http://www.freescale.com/infocenter/topic/QORIQSDK/3102519.html Freescale documentation is still fragmented anyway. Re: Deploying SDK 1.3.2 Thanks for the good article(s). You mentioned in this article: The NOR on these development systems is banked, meaning that the most significant address line is tied to a DIP switch I was wondering where the documentation is available that describes the various settings of how to changed which bank for the NOR is being used along with what the other DIP switches on the P3041DS do. All I've been able to find is the default values for the DIP switches from the SDK. Could you point me to a link to the documentation that describes the P3041DS hardware in more detail (specifically the DIP switches)? Re: Deploying SDK 1.3.2 I was just reading through the SDK 1.3.2 documentation, section 7.2.5 shows an example of how to bring up two instances of U-boot and Linux (on two separate cores). Here's a link to the document on infocenter: Freescale Technical Information Center Re: Deploying SDK 1.3.2 Good question. What I was showing here was U-boot, loading an SMP image of Linux. U-boot only runs on one core, and Linux will run across all cores. There are other options, and if you wanted to run AMP Linux, or Linux plus other OS'es (VxWorks, OSE etc...) you would need to use a hypervisor. But, what I built and ran here above was U-boot on core0 launching SMP linux. Re: Deploying SDK 1.3.2 Is this loading method will make all the cores running the same image? And for the putty output, how can we know which core is printing the content?
記事全体を表示
How to load the CMSIS-DSP library to the project based on the LPC55S69 Because the LPC55S69 has PowerQuad, in SDK example code, the FFT/FIR/IIR and the other DSP function are implemented by the Powerquad module instead of the Cortex-CM33 core.  This is the Powerquad example to implement the DSP function:' But if customers want to use CMSIS-DSP to implement the DSP function based on Cortex-CM33 instead of Powerquad module, customers can not import SDK example, he has to create a new project, this is the procedures: 1)Create a new project by clicking New->Create a new C/C++ Project 2)select the processor like LPC55S69 3)In the following menu,click CMSIS Driver, and check the CMSIS_DSP_Library and CMSIS_DSP_Library_Source You have to click the Driver which can select your peripherals driver you will use.  3)as the following screenshot, after completion, you can see the CMSIS-DSP source code and library have included in the project General LPC55xx
記事全体を表示
Troubleshooting: Java Error When Config Tools Used From Command Line For S32 Design Studio v3.5 and earlier, there is a known issue when the S32 Configuration Tools are invoked from command line from a location outside of the S32DS installation directory. The following error is reported: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source) at com.nxp.swtools.common.utils.runtime.SingletonProvider.getSingletonInstance(SingletonProvider.java:46) at com.nxp.swtools.common.ui.utils.swt.internal.SWTFactory.getSingletonInstance(SWTFactory.java:421) at com.nxp.swtools.common.ui.utils.swt.SWTFactoryProxy.getSingletonInstance(SWTFactoryProxy.java:448) at com.nxp.swtools.dcd.controller.DCDController.getInstance(DCDController.java:84) at com.nxp.swtools.dcd.DCDStartup.earlyStartup(DCDStartup.java:23) at com.nxp.swtools.provider.SWToolsPlatform.initializeAllTools(SWToolsPlatform.java:702) at com.nxp.swtools.framework.Application.start(Application.java:475) at com.nxp.swtools.framework.Application.start(Application.java:445) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:654) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591) at org.eclipse.equinox.launcher.Main.run(Main.java:1462) Caused by: java.lang.NoClassDefFoundError: javafx/beans/property/SimpleBooleanProperty at com.nxp.swtools.bootimage.controller.ABootController. (ABootController.java:37) at com.nxp.swtools.dcd.dcf.common.DCDCommonController. (DCDCommonController.java:90) at com.nxp.swtools.dcd.controller.DCDController. (DCDController.java:43) ... 24 more Caused by: java.lang.ClassNotFoundException: javafx.beans.property.SimpleBooleanProperty cannot be found by com.nxp.swtools.bootimage_1.0.0.202207251223 at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:519) at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:170) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) Resolution: To resolve the issue: Invoke the command from within the installation directory, for example, from 'C:\NXP\S32DS.3.5\eclipse' OR Change "{S32DS Installation Folder}\eclipse\s32ds.ini" by setting the javafx path from relative to absolute. So, if default installation is used, then: Change -Defxclipse.java-modules.dir=jre/javafx-sdk-11.0.2/lib To -Defxclipse.java-modules.dir=C:/NXP/S32DS.3.5/eclipse/jre/javafx-sdk-11.0.2/lib In addition, if it is desired to suppress unimportant warning messages: go to {S32DS installation folder}\eclipse\configuration, open logging.properties file and change com.nxp.swtools.level = SEVERE
記事全体を表示
PXP hands on with IMXRT1070 This hands on is based on the evkmimxrt1170_pxp_lab_cm7.zip which is from https://community.nxp.com/t5/i-MX-RT1170-CAS-Training/PXP-Multiple-Files/ta-p/1178709 this hands on give an example to understand pxp basic concept like letterbox background color, rotation, ps buffer coordination definition, output buffer coordination definition more clear   No Roation This test is based on no rotation, so define as below #define LAB1_BIT_BLIT_NO_ROTATION This demo output is that the rabbit picture shows on the upper left corner of lcd, and the offset width and height is 100   #ifdef LAB1_BIT_BLIT_NO_ROTATION     PXP_ps_bitblit(                    // input                    (void*)bmp_rabbit,                    PIXEL_BYTES,                    BMP_RABBIT_WIDTH,                    BMP_RABBIT_HEIGHT,                      // output                    s_BufferLcd[curLcdBufferIdx],                    DEMO_PANEL_WIDTH,                    DEMO_PANEL_HEIGHT,                    100,  // output offset x                    100,  // output offset y                    kPXP_No_Rotate); #endif       in this lab sample code, the background is set to black, PXP_SetProcessSurfaceBackGroundColor(APP_PXP, 0U); The output is   If we want to set the background to lighter blue, this is what I want to get   then I modify the code to PXP_SetProcessSurfaceBackGroundColor(APP_PXP, 0xFFF0U); But we get the same output like, without any difference     Check the code, find that the original code   void PXP_ps_sub_region_bitblit(…) { …..     outputBufferConfig.width = sub_region_width;     outputBufferConfig.height = sub_region_height;   …… }   This means that the output buffer width and height are the same as the picture width and height, so whatever background color you set, you couldn’t find anything difference, then change the output buffer width and height is the same as lcd width and height     void PXP_ps_sub_region_bitblit(…) { …..       outputBufferConfig.width = output_width;       outputBufferConfig.height= output_height;   …… }   Then the output change to   We can find the color on the top of display is still black and this isn’t what I need, still tracing the code   void PXP_ps_sub_region_bitblit(…) { …..  // Output buffer  outputBufferConfig.buffer0Addr   =  (uint32_t)output_buffer + output_offset_y * output_width * pic_bytes_per_pixel + output_offset_x * pic_bytes_per_pixel …… }   output_buffer is defined as lcd buffer start address, here the output buffer start address isn’t defined as lcd buffer start address(output_buffer), this is offset of lcd buffer start address, so change it like   void PXP_ps_sub_region_bitblit(…) { …..  // Output buffer  outputBufferConfig.buffer0Addr = (uint32_t)output_buffer …… }   Then the output is like     The output picture move to the upper left corner without offset, but this demo defines the offset is 100   void PXP_ps_sub_region_bitblit(…) { …..  // PS buffer PXP_SetProcessSurfacePosition(APP_PXP,0,0,BMP_RABBIT_WIDTH - 1U, BMP_RABBIT_HEIGHT - 1U); ….. }   In the original code, the PS buffer offset is 0, because the ps buffer start address is the same as the output buffer start address, and output buffer start address is offset + lcd output buffer start address, so set the PS output offset is 0, but I change the output buffer start address is the same as lcd buffer start address, so change the code   void PXP_ps_sub_region_bitblit(…) { …..             uint32_t psUlcX         = output_offset_x;             uint32_t psUlcY         = output_offset_y;             uint32_t psLrcX, psLrcY;             psLrcX = psUlcX   +  sub_region_width  - 1U;             psLrcY = psUlcY + sub_region_height- 1U;         // PS buffer         PXP_SetProcessSurfacePosition(APP_PXP,psUlcX,psUlcY,psLrcX,psLrcY); ….. }   The output is \   Now this is what we need     Roation Set Macro to #define LAB2_BIT_90_DEGREE_ROTATION The output is   When rotation is 90 degree and width is wider than the output height, the display part will be cut, so change the code from Before void PXP_ps_sub_region_bitblit(…) { …..       outputBufferConfig.width = output_width;       outputBufferConfig.height= output_height; ….. }   To   void PXP_ps_sub_region_bitblit(…) { …..  if  (rotate == kPXP_Rotate90)  {     outputBufferConfig.width          = output_height;        /*Joan*/     outputBufferConfig.height         = output_width;         /*Joan*/  } else {         outputBufferConfig.width          = output_width;         /*Joan*/         outputBufferConfig.height         = output_height;        /*Joan*/ }….. }   Because this demo only shows no rotation and 90 degree rotation, if customer needs 270 degree, 180 degree, can add by themselves
記事全体を表示