Multi Source Translation Content

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

Multi Source Translation Content

讨论

排序依据:
10bits_Milestone_2 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> -我们实现了二维码生成器(不是 100%) -生成的二维码包含来自特定请求的信息 -作为删除/修改任务的安全和选择方法,我们为每个预订实现了唯一的ID,没有它您就无法删除或修改请求 -从现在起,我们可以使用以下地址访问该网站LEC 2017 - 预订请求 -您可以在我们的 bitbucket 存储库中找到手机应用程序的整个项目+apk (在 “我的视频” 中查看)
查看全文
MYIRの i.MX 6UL/6ULLベースのSOMおよびEVMの評価 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> MYC-Y6ULX CPUモジュールは 、 NXP の i.MX 6UL / 6ULL ARM Cortex-A7プロセッサに基づく組み込みコントローラボードである MYIR によって設計されています 。これは、 528MHzで動作することができます。 MYD-Y6ULX開発ボード は、 MYC-Y6ULX CPUモジュール を中心に構築されており、プロトタイプおよびリファレンスデザインの完全な評価プラットフォームです。MYIRが先にリリースしたMYS-6ULXボードと比較して、 MYC-Y6ULX CPUモジュールは 、市場投入のペースを加速し、コストを削減するための次の組み込み設計に適しています。代表的なアプリケーションは、インダストリーコントロール、通信、HMI、スマートヘルスケア、モノのインターネット(IoT)などです。              MYD-Y6ULX開発ボードには、12V/2A電源アダプタ1本、長さ1.5mのネットケーブル1本、Micro USBケーブル1本、4G LTEアンテナ1本、WiFiアンテナ1本、製品ディスク1枚など、必要なケーブルアクセサリが付属しています。MYD-6ULXボードには、4Gモジュール用のUSBベースのMini PCI-eインターフェースが1つあることに気づきました。MYIRは4Gアンテナを提供していますが、4Gモジュールはオプションとしてのみです。 わずか37mm x 39mmの MYC-Y6ULX CPUモジュールは、105mm x 140mmの拡張ボードに搭載された MYD-Y6ULX開発ボード 用の高度に統合されたコントローラーボードで、シリアルポート、USB、イーサネット、CAN、マイクロSDカード、WiFiモジュール、LCD、タッチスクリーン、カメラなどのヘッダーとコネクタを介して豊富な周辺機器のセットを拡張します。 オーディオと、オプションのUSBベースの4G LTEモジュール用のMini PCIeインターフェース。 MYD-Y6ULX開発ボードの機能ブロック図を以下に示します。    下の画像から、ハードウェア周辺機器とインターフェースを確認できます。 すべてのオンボードコンポーネントはボードの上面に配置されていますが、ボードの下面には一部の貫通穴しか見えません。 MYD-Y6ULXボードには、Broadcom 43362チップセットに基づく2.4G WiFiモジュールがあります。WiFiモジュールはSDIOインターフェースを介してボードに接続され、802.11b / g / nの全機能を提供します。そのアンテナは、ボードに予約されたSMAアンテナインターフェースを使用します。ただし、 MYC-Y6ULX CPUモジュールがeMMCを使用しており、eMMCがWiFiモジュールと同じSDIOインターフェイスを再利用するため、ボードがWiFiをサポートしていないことに注意してください。 MYD-Y6ULXボードには、4G LTEモジュール用のUSBベースのMini PCIeインターフェースがあります。MYIRは、MYD-Y6ULXボード上でQuectel EC20 LTEモジュールを使用するためのLinuxドライバと例を提供しています。したがって、EC20 4G LTEモジュールが要件を満たすことができる場合は、開発時間を節約するためにそれを優先することができます。Mini PCIeインターフェースの近くには、標準のSIMカードインターフェースがあります。   Mini PCIe インターフェイスの近くには、CSI インターフェイスが 1 つ、拡張ヘッダーが 1 つ、Micro SD カード インターフェイスが 1 つあります。i.MX 6UL/6ULLプロセッサは最大24ビットのパラレルカメラインターフェースをサポートできますが、MYD-Y6ULXボードの豊富な周辺機器により多くの信号が再利用されているため、MYD-Y6ULXのCSIインターフェースは8ビットパラレルカメラインターフェースです。拡張ヘッダーは、I2C、UART、SPIなどを引き出すために最大12個のGPIOをサポートできます。 MYD-Y6ULXボードには、2つのUSBホストポート、リセット/電源/ユーザーボタン、および1つの3ピンデバッグヘッダーがあります。i.MX 6UL/6ULL プロセッサには 2 つの USB コントローラーがあり、どちらも USB OTG 機能をサポートできます。1つのMYIRのMYD-Y6ULXボード、1つのUSBはマイクロUSBインターフェースを介して引き出しられ、OTGをサポートできます。もう1つのUSBは、SMSC USB2514BI-AEZ USBハブチップを介して4つのUSBホストを拡張し、4つのUSBホストのうち、2つはUSBホストポートとして使用され、1つは4G LTEモジュールに使用され、残りの1つは使用されません。   MYD-Y6ULXベースボードは、ジャックを介してDC 12Vで駆動するように設計されており、ボード上の内部電源管理回路は、ボードに5V、ISO 5V、3.8V、3.3V、1.8V、3V(RTC)電圧を供給します。 DC/DCコンバータTLV62130部分は、12Vから5Vおよび12Vから3.8Vへの変換に使用するように選択されており、最大で3Aの出力通貨をサポートします。DC/DCコンバータは、電力効率を向上させ、ボードの消費電力を削減できます。RT9018は、5Vから3.3Vおよび3.3Vから1.8Vへの変換用のLDOレギュレータとして使用されます。LDOレギュレータは、DC/DCコンバータよりも小さな電力リップルを提供できます。RTCバッテリー入力はオプション入力です。システムの電源がオフになっているときに、RTC が動作する必要がない場合は、この電源レールを提供する必要はありません。  
查看全文
S32DS 3.0 Install error 当我尝试激活软件时,它报告上述错误,谁能帮忙解决这个问题? Re: S32DS 3.0 Install error 重启笔记本后问题解决,非常感谢您的及时回复 Re: S32DS 3.0 Install error Hi @leolv. 为了帮助诊断这个问题,查看基本工具的安装日志会很有用。 您可以在以下目录中找到安装日志: C:\NXP\S32DS.3.6.0\_S32S32平台设计工作室3.6.0_安装\日志\S32_Design_Studio_for_S32_Platform_3.6.0_Install_MM_DD_YYYY(日期)_HH_MM_SS(时间).log 请注意,路径可能因您的设计工作室版本和安装目录而异。 我将等待您的回复。 -RomanVR。
查看全文
Real View ICE と RealView デバッガーを i.MX6 SoloX と連携するように設定する方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 「i.MX 6SoloX用ハードウェア開発ガイド...」推奨事項は提供しません JTAGツールの設定については、ARM DSTREAM/DS-5の使用を想定しています。それにもかかわらず、それはそうです ARM RealViewツールをi.MX6 SoloXで適用できます。第 7 章 (JTAG ツールの設定) 「i.MX 6Quad、6Dual、6DualLite、6Soloファミリー向けハードウェア開発ガイド...」 i.MX6 SoloXにも使用できる基本的な考慮事項が含まれています。 http://cache.freescale.com/files/32bit/doc/user_guide/IMX6DQ6SDLHDG.pdf 以下に、いくつかの追加の詳細を示します。 A9 コアと M4 コアの両方に独自の DAP があり、プラットフォーム内のすべてのリソースがあります 独自のDAPを介してアクセスされます。 JTAGチェーン構成: − SJC、IR長さ= 5、i.MX 6Soloと同じ。 − SDMA、IR長さ= 5、i.MX 6Soloと同じ。 −A9のDAP、IR長さ= 4、i.MX 6Soloと同じ。 − M4 用 DAP、IR 長 = 4、i.MX 6SoloX の新機能。 ARM DS5 Community Edition に含まれている最新の RVICE ファームウェアを使用する必要があります。 http://ds.arm.com/ds-5-community-edition/ インストール後、DS5の「ハードウェアアップデートのデバッグ」オプションを実行し、 「Install Firware Update」メニューのファームウェアファイル。私の場合は: c:\Program Files\DS-5 v5.21.0\sw\debughw\firmware\ARM-RVI-4.23.0-35-base.rvi   最後に、RealView の設定は次のようになります。 Coresight のベース アドレス Cortex-A9_0 は0x82150000です。 Cortex-A9は常にプライマリコアとして起動し、Cortex-M4の起動を担当します。 Re:i.MX6 SoloXで動作するようにRealViewICEとRealViewデバッガーを設定する方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> を参照してください。 MX6 SoloXベアメタルスタートアップ RVDSの操作方法に関する有用な情報については、 第 7 章 (JTAG ツールの設定) 「ハードウェア開発」 i.MX 6のガイド...」 http://cache.freescale.com/files/32bit/doc/user_guide/IMX6DQ6SDLHDG.pdf Re:i.MX6 SoloXで動作するようにRealViewICEとRealViewデバッガーを設定する方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、ユリさん。 素晴らしいドキュメント、私はSDKからのサンプルコードのように、コードをダウンロードしてデバッグする方法を示すテストする何かを追加したいと思います。
查看全文
USBデバイススタックにSuspend/Resume対応を追加する方法[KSDK 1.3] <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ksdk 1.3 の USB スタックには "USBCFG_DEV_ADVANCED_SUSPEND_RESUME" のマクロが用意されていますが、RM には "suspend/resume is not implemented" と表示されます。しかし、ソースコードを調べてみると、USB_Suspend_Service() のような API が さらなる実装のために予約されているので、ユーザーはこれらの API を出発点として ksdk 1.3 のサスペンドとレジューム機能を追加することができます。 このテストは、デモdev_hid_mouse_bm FRDM-KL27Zに基づいています。また、デバイススタックを変更する前に、このデモのコピーをクローンする必要があります。 USBCFG_DEV_ADVANCED_SUSPEND_RESUME を 1 に設定すると、中断機能と再開機能に関連する API が解放されます。 ただし、コンパイル後に次のエラーが発生しますが、これはKL27がリモート再開機能をサポートしていないためです。 したがって、このデバイスでは、#if USBCFG_DEV_ADVANCED_SUSPEND_RESUME == 1 && FSL_FEATURE_USB_KHCI_HOST_ENABLED == 1 を使用して無効にする必要があります。たとえば、次のようになります。 2.さらにUSB_Suspend_Service()とUSB_Resume_Service()を実装して、一時停止/再開のイベントで上位レイヤーのアプリケーションに通知できるようにします。USB_Error_Service()を参考に また、suspend と resume のイベントをさらに 2 つ追加することを忘れないでください。 3.USBモジュールには2種類の再開割り込みがあり、1つは同期再開で、ISTAT[RESUME]ビットのビットによって発行され、もう1つは非同期再開で、TRC0[USB_RESUME_INT]のビットによって発行されるため、次のようにISRでこれら2つの割り込みステータスフラグを監視する必要があります。 そのため、非同期再開割り込みをサポートするために、再開およびスリープ割り込みサービスを次のように変更しました。 4.アプリケーションを修正し、サスペンドとレジュームイベントを処理するコードを追加します。この場合、このようなイベントはUSB_App_Device_Callback()で処理されます 5.usb.org のUSB 2 CVツールでhid_mouseデモを確認します リストからVID 15a2のFSデバイスを選択します。 テストに合格しました! Suspend と Resume のイベントでいくつかのメッセージを印刷すると、ターミナルチャネルから次のようなものが表示されます。 6.これで、USB仕様で指定されたサスペンド電流制限を満たすために、メインアプリケーションコードに低電力モードスイッチ機能を追加できます。この場合、USB_App_Device_Callback power_manager_hal_demo()のmouse.cにコードを追加して、メインアプリケーションに低電力モードに入るタイミングを指示します。 また、割り込みサービスによって呼び出されるため、このコールバック関数で低電力モードに入らないでください。したがって、割り込み中にデバイスが低電力モードに入ると、 次の再開割り込みが発生しなくなり、デバイスがウェイクアップすることはありません。 実装の詳細については、添付のmouse.cを参照してください。 7.低電力モード電流をテストします。   テストの前に、FRDM-KL27Zボードに次の変更を加えてください。 ボードに次のジャンパーがある場合は、R7、R21、R83を取り外す必要はなく、テスト中はJ19とJ22を開いたままにしておくことに注意してください。 Ternimalからテストする低電力モードを選択します。 KL27 USB ポート (J10) を開いたままにして、USB SDA ポートでボードに電力を供給すると、デバイスがリセットからサスペンド割り込みに入ります。また、USB 2 CVツールの助けを借りて、電源モードスイッチによって電流が変化するのを見ることもできます。wait、stop、vlpsモードをテストしましたが、これらのモードで測定された電流は次のように表示されます。 待つ: 止める: VLPSの そのため、USBサスペンドモード中は、USB仕様で指定されているサスペンド電流(500uA)をはるかに下回るため、VLPSモードを使用することをお勧めします。 8. パッチとデモコード 以下のファイルを添付のものと、デモの mouse.c dev_hid_mouse_bm置き換えてください。スタックとアプリケーションコードを再コンパイルします。 C:\Freescale\KSDK_1.3.0\usb\usb_core\device\include\MKL27Z644 usb_device_config.h C:\フリースケール\KSDK_1.3.0\usb\usb_core\device\sources\controller usb_dev.h usb_dev.c usb_framework.c C:\フリースケール\KSDK_1.3.0\usb\usb_core\device\sources\controller\khci device_khci_interface.c khci_dev.c khci_dev.h C:\フリースケール\KSDK_1.3.0\usb\usb_core\device\include usb_device_stack_interface.h C:\Freescale\KSDK_1.3.0\examples\frdmkl27z\demo_apps\usb\device\hid\hid_mouse マウス.c 全般
查看全文
割り込みを使用した S32K312 SPI 送受信サンプル(DS3.5 RTD300) ******************************************************************************* このデモ・アプリケーションの目的は、  S32K3xx MCU用のLPSPI IPドライバの使用方法を示すことにあります。 この例では、SPI Interrupt Lpspi_Ip_AsyncTransmit()メソッドを使用した12バイトの送受信にLPSPI2を使用します。MOSI MISOがループバック中のハードウェアに接続されています。  ------------------------------------------------------------------------------ * テスト用ハードウェア:S32K3X2EVB-Q172 * MCU:S32K312 * コンパイラ:S32DS3.5 * SDKリリース:RTD 3.0.0 * デバッガ:PEmicro * ターゲット:internal_FLASH ******************************************************************************** トリガされた割り込み:-- 送受信の終了時にトリガされる非同期コールバック:-- Lpspi_Ip_AsyncTransmit(&MASTER_EXTERNAL_DEVICE, txBuffer, rxBuffer, numberOfBytes, lpspi_callback_int);
查看全文
示例 MPC5744P PinToggleStationery S32DS_1.0 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ******************************************************************************** * 详细说明: * 应用程序执行基本初始化,将 PLL 设置为最大允许频率, * 初始化中断,通过中断使一个 LED 闪烁, * 通过 UART 终端初始化并显示通知,然后通过终端 ECHO 显示。 * * * 测试硬件:X-MPC5744PE257DC,MPC57xx主板 * MCU:              PPC5744PFMMM8 1N65H * 终端:19200-8-无奇偶校验-1停止位-LINFlexD_0上无流量控制 * 系统频率:200MHz * Debugger:      Lauterbach Trace32 *                       PeMicro USB-ML-PPCNEXUS * 目标:internal_FLASH(调试模式、发布模式) * EVB 连接:用户 LED 1 连接到 A0(P8.0), * ******************************************************************************** <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ******************************************************************************** * 详细说明: * 应用程序执行基本初始化,将 PLL 设置为最大允许频率, * 初始化中断,通过中断使一个 LED 闪烁, * 通过 UART 终端初始化并显示通知,然后通过终端 ECHO 显示。 * * * 测试硬件:X-MPC5744PE257DC,MPC57xx主板 * MCU:              PPC5744PFMMM8 1N65H * 终端:19200-8-无奇偶校验-1停止位-LINFlexD_0上无流量控制 * 系统频率:200MHz * Debugger:      Lauterbach Trace32 *                       PeMicro USB-ML-PPCNEXUS * 目标:internal_FLASH(调试模式、发布模式) * EVB 连接:用户 LED 1 连接到 A0(P8.0), * ******************************************************************************** 概述 回复:示例MPC5744P PinToggleStationery S32DS_1.0 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi   b55689​ 我认为该代码应该固定为“Uart.h”.....例如“sys \uart.h”.... 请检查此代码.. 谢谢!
查看全文
AndroidSDCARDミラークリエーター <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> このツールは、emmc ユーザーパーティションミラー用でもあります。 このツールにemmcファイルを与えるだけです。 典型的なユースケースは、emmc オフラインプログラミングによる emmc の大量生産です。 Ver 0.4.0 2/14/2017 Android 7 Nougatをサポートします。 AndroidSDCARDMirrorCreator_Version_0.4.0_02142017.tgz Ver 0.3.2: 6/13/2016 静的リンク simg2img の使用 AndroidSDCARDMirrorCreator_Version_0.3.2_06132016.tgz Ver 0.3.1: 5/31/2016 冗長なコードを削除する AndroidSDCARDMirrorCreator_Version_0.3.1_05312016.tgz Ver 0.3: 5/25/2016 Marshmallow パーティション レイアウトを追加 AndroidSDCARDMirrorCreator_Version_0.3_05252016.tgz Ver 0.2: ロリポップパーティションレイアウトを追加 1. ディレクトリ AndroidSDCARDミラークリエーター |-- AndroidSDCARDMirrorCreator.sh ---メインスクリプト |-- CFG.INC ---設定ファイル |-- KitKat_LAYOUT.INC --- KitKatパーティションレイアウト |-- レイアウト。INC -> Lollipop_LAYOUT。INC --- シンボル パーティション レイアウトへのリンク |-- Lollipop_LAYOUT.INC --- Lollipopパーティションレイアウト '-- readme.txtこのファイル--- 2.実行するには「root」runまたは「sudo」が必要です 3. partedとkpartxがインストールされている必要があります sudo apt-get installal parted kpartx 4. Debian 8.2 および Ubuntu 12.04 でのテストパス 5. AndroidSDCARDMirrorCreator.sh はLAYOUT.INCを探します。   シンボルを正しいパーティションレイアウトにリンクしてください。   デフォルトのシンボル リンクが for Lollipop_LAYOUT に作成されました。INC(レイアウト。INC -> Lollipop_LAYOUT。株式会社) 6. コマンド AndroidSDCARDMirrorCreator.sh -c AndroidSDCARDMirrorCreator.sh-p 7. 例: 仮定する AndroidSDCARDMirrorCreator ディレクトリは ~/AndroidSDCARDMirrorCreator    Androidの画像は入っています ~/SD と ~/eMMC    Sdcdardミラー: cd ~/SD ~/AndroidSDCARDMirrorCreator/AndroidSDCARDMirrorCreator.sh -c eMMCミラー: cd ~/eMMC ~/AndroidSDCARDMirrorCreator/AndroidSDCARDMirrorCreator.sh -c    8. ミラーが作成されたら。再利用できます。kpartxを使用してください。 Android i.MX6_All 日時:AndroidSDCARDMirrorCreator <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Biyongのおかげで、私はこれを再コンパイルしませんでした、そしてプリコンパイルされたイメージに生のイメージが含まれていなかったことに驚きました(Linuxマシンなしでdistriがどのようにそれをフラッシュできるのか疑問に思います)。画像はロック画面まで正常に起動していますが、再現するiMX7ボードがありません(お客様だけがそれを手に入れました)そしてこれは別のトピックです。 乾杯、フィリップ。 日時:AndroidSDCARDMirrorCreator <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> フィリップ L5.1.1_2.1.0-gaを試してみました。そのため、CFGにコメントを追加します。L5.1.1_2.1.0-gaによると、INCはAndroidユーザーガイド。 しかし、テストを行うための7Dボードはありません。i.MX6Q sdb ボードでテスト済みパス。スクリプトレイヤーからは、同じように扱います。 13 #L5.1.1_2.1.0-GAシステムイメージの変換が必要 14 # sudo simg2img system.img system_raw.img 15 #SYSTEM_IMG=system_raw.img 16 SYSTEM_IMG=system.img RAW画像に変換せずにシステムイメージを使用してみました。私はあなたのものと同じプリントアウトを手に入れました。 simg2imgをご利用ください。 simg2img の説明は L5.1.1_2.1.0-ga にありますAndroidユーザーガイド。 L5.1.1_2.1.0-ga の製造ツールで、コマンドはucl2.xmlで見つけることもできます。 日時:AndroidSDCARDMirrorCreator <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ツールBiyongのおかげで、L5.1.1 imX7Dイメージで試してみましたが、システムパーティションに何か問題があるようです。 init: '$ro.product.model' を展開できません「/sys/class/android_usb/android0/iProduct」への書き込み中 init: '/system/bin/netd' が見つかりません。'netd' を無効にします init: '/system/bin/debuggerd' が見つかりません。'debuggerd' を無効にします init: '/system/bin/debuggerd64' が見つからないため、'debuggerd64' が無効になります init: '/system/bin/drmserver' が見つかりません。'drm' を無効にします init: '/system/bin/mediaserver' が見つかりません。'media' を無効にします init: '/system/bin/installd' が見つからないため、'installd' が無効です init: '/system/bin/install-recovery.sh' が見つかりません。'flash_recovery' を無効にする init: '/system/bin/keystore' が見つかりません。'keystore' を無効にします init: '/system/bin/rild' が見つからないため、'ril-daemon' が無効になっています init: '/system/bin/app_process' が見つからないため、'zygote' が無効になっています。 init: '/system/bin/fsl_sensor_fusion' が見つからないため、'sensor_fusion' が無効になります init: '/system/bin/sh' が見つからないため、'wifi_mac' が無効になります init: '/system/bin/sdcard' が見つかりません。'sdcard' を無効にします ... バインダー: 153:153 トランザクション失敗 29189、サイズ 0-0 このAndroidリリースを試しましたか? ありがとう、フィリップ
查看全文
i.mx8x ADASサポート <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> プラットフォーム:i.mx8QXP/8QM OS: Linux 対応カメラ・モジュール: Max9286 + Max9271 + OV10635, Default BSP Max9286 + Max96705 + AR0144、パッチ Max9286 + Max96705 + OV9284、パッチ Max9286 + Max96705 + AP0101 + AR0132、パッチ NVP6324 + NVP2431 + IMX225、パッチ TP2855 + TP3812 + IMX307、パッチ ISL7998x + NTSC/PAL センサー、パッチ adv7180 + NTSC/PALセンサー、パッチ 添付ファイルに詳細な説明があります。 i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus
查看全文
MIFARE DESFire EV1/EV2/EV3 APDU command format MIFARE LightとMIFARE DESFire EV1/EV2/EV3をサポートするカードリーダーを開発しています。 現在、私のカードリーダーはMIFARE Lightカードを正常に認識でき、MIFARE LightのAPDUコマンドをサポートしています。しかし、MIFARE DESFire EV3 をデバッグすると、MIFARE DESFire EV3 を認識した後、コマンドを送信するときに必ず SW 0x919dを受け取ります。その理由は何ですか?最初にISOSelectFileを実行する必要がありますか?しかし、MIFARE DESFire EV1/EV2/EV3のDF名は何ですか? MIFARE DESFire EV1/EV2/EV3 の APDU 形式 (MF2DL(H)x0 のセクション 11.2 など) の詳細な説明があるドキュメントは何ですか?公開ファイルとセキュリティファイルの両方を検索しましたが、APDU形式の詳細な説明は見つからず、コマンドをMIFARE DESFire EV1 / EV2 / EV3に送信する方法がわかりませんでした。 どなたか助けてもらえますか? Re: MIFARE DESFire EV1/EV2/EV3 APDU command format こんにちは@wangj1201  [email protected] にメールを送信 して、 DS487033 および AN588114-AN12757 MIFARE DESFire EV3 の機能とヒント (1.4) のダウンロード許可を申請してください。理解してください、許可の解放は私の範囲外です、私がサポートできる唯一のことは、どのドキュメントを申請するかを示すことです。 Re: MIFARE DESFire EV1/EV2/EV3 APDU command format ご返信ありがとうございます。 私はすでにNDAの許可を得ています。MIFARE DESFire EV3の機能とヒントAN12757言及したドキュメントが見つからないのはなぜですか? この文書はどこで入手できますか? Re: MIFARE DESFire EV1/EV2/EV3 APDU command format こんにちは@wangj1201  次のログは、開発にとって非常に重い可能性があります。 Re: MIFARE DESFire EV1/EV2/EV3 APDU command format こんにちは@wangj1201  EV3 は、ユーザーデータをアプリケーションにグループ化します。アプリケーション内では、データはさらにファイルにグループ化されるため、最初のステップでアプリケーションを作成し、2 番目のステップでファイルを作成し、次にファイルの認証を行い、次にファイルに対してデータの読み取り/書き込みを行うことができます。 MIFARE DESFire EV3 の機能とヒントAN12757を参照することをお勧めします。 ご存知のように、MIFARE DESFire EVxはセキュリティ製品であるため、NXPとNDAに署名し、ダウンロード許可を取得する必要があります。
查看全文
フラッシュドライバーの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> フラッシュメモリは、どのシステムにとっても重要なコンポーネントであり、フラッシュメモリに効率的にアクセスできることが重要です。このドキュメントでは、現在使用されている2つの主要なタイプのフラッシュ、NANDフラッシュとNORフラッシュの違い、フラッシュの消去方法とアクセス方法について説明します。次に、両方のタイプのフラッシュに使用できるMQX flashxドライバーを見ていきます。 NOR および NAND フラッシュへのアクセス フラッシュメモリには主に2つのタイプがあり、1つ目は「フラッシュ」、2つ目は「nand」です。インターフェイスの観点からは、主な違いはデータへのアクセス方法です。Nor Flashは、ランダムデバイスと同様に完全なアドレスおよびデータバスであり、NANDデバイスは、コマンド、アドレス、およびデータを多重化して同じバスを共有するioバスを使用しています。これは、デバイスで接続性を必要とするピンの数を大幅に減らしますが、ソフトウェアとデータアクセスの観点からは、2つのタイプのメモリの間にはさらに大きな違いがあります。 基本的には、各ビットは異なる技術知識を使用して保存されています。nor フラッシュ では、メモリ領域はブロックと呼ばれる等しいサイズの単位で分割されます。今日のテクノロジーにおける各ブロックのサイズは、約32kバイトから128kバイトの範囲ですが、これは完全にデバイスの選択に依存しており、これは何年にもわたって変更されます。Norフラッシュの内部回路により、RAMまたはEEPROMに格納されたバイトをアドレス指定できるのと同じ方法で、デバイスの各バイトを個別にアドレス指定できるため、フルバスがNorフラッシュとともに使用されます。ただし、これはバイトの読み取りまたは個々のバイトのプログラミングにのみ適用され、 レーシングスキミングはブロックレベルで行う必要があるため、レース状態のロックを解除するにはブロック全体が影響を受ける必要があります。 しかし、ナンドフラッシュは、ストレージ密度を高めるために意図的に異なる方法で設計されています。それも、ブロックの等しいサイズに分割されたメモリ領域を持っていますが、これらのブロックのそれぞれは、ページと呼ばれるsamll領域にさらに分割され、ページは通常2kバイトのサイズで、ブロックは、多くの場合、64ページを持っているので、128キロバイト、リードデータに、あなたはまだブロックレベルで作業している、 ただし、Flashの一部を読み取り、プログラムしたい場合は、ページごとに行います。 ただし、一度に 1 ページずつデータを格納または取得することは、実際には多くのアプリケーションにとって利点です。あなたはしばしば電話、曲、アプリなどの大きなファイルを扱っているので。したがって、これはより効率的になります。当時の主な欠点は、バイトに個別にアクセスできないことで、nandフラッシュを使用して、実行したいプログラムコードをその場で保存できないことです。CPUは単一の命令を読み取る必要があるため、CPUがこの配置を特にサポートできる場合を除きます。あなたが知っているかもしれないnandフラッシュが、最初のダウンサイジングは、ページを読むときにビットエラーを取得することですが、これは音楽ファイルの障害ではないかもしれませんが、明らかにデータファイルやあなたのイメージのバックアップには受け入れられません。 これを補うために、フラッシュの各ページには2つのセクションがあり、1つ目はデータが保存される場所、2つ目はエラー修正コードが保存される小さなセクションです。エラーを検出して修正するために使用される差分アルゴリズムがありますが、理想は、ECCに格納されたデータがアルゴリズムによってデータのエラーを検出し、場合によってはデータフィールドのエラーを修正するために使用されます。検出できる破損の量には制限がありますが、シングルビットエラーなどの小さなエラーは 、アプリケーションがそれを認識することなく定期的に処理されます。 nandの2番目の問題は、障害のあるビットを開発する傾向があることに注意する必要があります。そして、これによりブロック全体が不良と宣言され、実際には新しいフラッシュデバイスでも不良なブロックの割合がわずかになり、時間の経過とともにアクティブなブロックの一部が不良になる可能性があります。フラッシュデバイスの回路は、消去またはプログラムサイクル中にブロックの不良を検出し、不良ブロックマネージャーがこれを追跡します。不良ブロックは自動的に再マッピングされますが、これは背後で発生するため、ソフトウェアのインターフェースは違いを知りません。 したがって、 nor と nand の主な違いを要約すると、 nand を使用してページ内のデータにアクセスする必要があることがわかりました これは bytes 単位の randly アクセスです。また、Flashから消去、書き込み、読み取りを行うためのアクセス時間にも違いがあります。フラッシュデバイスが書き込みのために上昇し続ける容量は安定した速度ですが、現在、最大のNANDデバイスの容量は最大NORデバイスの10倍です。また、問題がアプリケーションコードに影響を与えないという点では、nandフラッシュの不良ブロック管理とエラー訂正コードが発生し、障害率に対処するために、ピン数が多くなり、インターフェイスのタイプが与えられていないため、容量が異なるため、より高価になります。そして、メモリの使用方法によっては、選択したデバイスの予想されるライフサイクルについて考慮したかもしれません。 フラッシュの消去 ドライバに入る前に、フラッシュで作業するときに出くわすかもしれない唯一の他のことは、消去プロセスに関係しています、メモリの消去された部分はすべてゼロであるが、実際には消去されたフラッシュメモリは、すべてのビットが高状態に設定されていることを読み戻すことを期待することができます。 そのため、消去されたバイトをFFとして読み戻しました。 アドレス位置にデータを書き込むとき、対応するビットはゼロである必要があり、論理ゼロとしてプログラムされ、効率的にこの場所を最初に消去して書き換えることができます。最初にブロックを消去せずに、同じブロック内の別のアドレスに書き込むこともできますが、ほとんどの場合、1バイトではなく大きなデータのチャンクを書き込むため、通常は、データの書き込み先としてデータを追跡するのは面倒なことではありません。また、ブロックについては、書き込みを行うかどうかの前に消去する必要があります。これはドライバーが行うことであり、アプリケーションは非常にシンプルに保たれますが、適切なコマンドに関連するオーバーヘッドが常に一貫しているとは限らないことに注意してください。消去と書き換えのサイクルに耐えられることもあれば、耐えられないこともあります。 Flashxドライバーが存在する場所 MQXには2つのドライバーグループがあり、最初のグループにはioドライバーが含まれ、ioサブシステムを経由します。また、ブロックモードドライバーとバイトモードドライバーが含まれています。2番目のグループは、ADCや軽量GPIOドライバーなどの低レベルドライバーのセットです。フラッシュドライバーは大きなチャンクのデータの書き込みと読み取りをサポートしているため、ブロックモードドライバーとして分類されます。MQXのSDK版では、ioサブシステムは制限されています。ただし、フラッシュドライバーはまだブロックモードドライバーと見なされます。 これまで見てきた他のドライバーの構造と同様に、フラッシュドライバーには上位層と下位層のコンポーネントがあります。また、Dirver の使用を開始する前に、Dirver をインストールする必要があります。設定ファイルを使用してフラッシュを選択した場合、MQXは起動時にフラッシュドライバーを自動的にインストールします。そして、install functionが呼び出されると、上位のinstall関数には下位の設定情報へのポインタが渡されます。 インストールされた関数は、IOサブシステムにコールバック関数を登録し、関連付けが行われると、アプリケーションコードはフラッシュデバイスにアクセスする通常の高レベルの呼び出しを使用できます。したがって、たとえば、フラッシュドライバーを使用する前に、フラッシュドライバーを開く必要があります。これにより、以前に開いていない場合、フラッシュチップの内部構造が設定されます。そして、このデバイスのアドレスを取得します。その後、高レベルのコマンドを使用して、フラッシュからの読み取りやフラッシュへの書き込みを好きなように行うことができます。 Flash へのアクセス ただし、ドライバーの使用を進める前に、フラッシュ自体にアクセスする方法を確認すると役立ちます。フラッシュは一連のブロックに編成されており、それらを異なるグループに構造化できます。kinetisプロセッサを使用し、flashxドライバを使用して内部フラッシュにアクセスしている場合は、少なくともコード・ベース用のスペースを確保し、データ用の分散領域を確保する必要があります。 また、フラッシュを同じサイズのバンクに設定したり、フラッシュを整理したい場合でも、これらの領域の境界をフラッシュのブロック境界に落ちる必要があることを念頭に置いてください。これらの各領域は、実質的にフラッシュのパーティションであり、flashxドライバは、各パーティションがファイルであるか、またはファイルに使用するフラッシュの領域がアドレスの観点から連続していないかもしれないことをmonentで見ています、しかし、アプリケーションの観点からは、それは連続的なメモリ空間と見なすことができます。 Flash へのアクセス Mqxは、ファイルにインデックスをマイタンし、ファイルから読み取ると、読み取りはインデックスから開始されます。同様に、ファイルに書き込むと、インデックスポイントから書き込みを開始し、インデックスコマンドが、より多くのデータを書き込むにつれて開始されます。あなたのアプリケーションコードは、 fseek 関数を使用して位置インデックスを調整でき、 starndard C ライブラリのフォーマットされた io セクションにある fseek 関数に精通しているかもしれません。mqx の fseek 関数も同じように使用されます。これを使用して、ファイルの先頭からのオフセット、このファイルの末尾からのオフセット、またはインデックスの現在位置からのいずれかの方向のオフセットを提供するようにインデックスを設定できます。 データ構造 flashxドライバーがどのように機能するかを理解するには、使用するいくつかの主要なデータ構造を使用して農業を行う必要があります。最初にカバーするのは、フラッシュがどのように構成されているかを定義するブロック情報構造です。一部のフラッシュには、内部に異なるサイズのブロックがあるか、アドレス指定の間にギャップがある可能性があります。これがフラッシュインフラストラクチャを定義する方法です。 デバイスは配列またはブロック情報構造体で表され、フラッシュが連続したアドレス指定を行い、すべてのブロックが等しいサイズであるセクションごとに1つのセクションが作成されます。ここではターミナルが少し混乱しており、フラッシュの各セクション内にはいくつかのブロックがあり、mqxはセクターを消去可能な最小単位と見なすため、データ構造はセクターと呼ばれます。 この構造体の次の要素は、このセクションの開始アドレスであり、その後にサイズ セクションが続きます。最後の要素は、特別なフラグ用に予約されており、現在は使用されていません。 フラッシュには多数のファイルを含めることができ、ファイルブロック構造はファイルを定義するために使用され、ファイルの名前、ファイルの開始アドレス、およびファイルの終了アドレスを持つことができます。 そして、init構造体と呼ばれる3番目のデータ構造体は、すべてを結び付けるために使用されます、これにはブロック情報構造体の配列へのポインタ、およびファイルブロック構造体の配列へのポインタが含まれ、これにはフラッシュデバイスのベースアドレスと、フラッシュアドレスベース全体にアクセスするために使用されるいくつかの追加要素も含まれています。 フラッシュドライバAPI したがって、ドライバーコードを見る前に要約すると、フラッシュへのアクセスは非常に簡単です。ファイルは fopen 関数 で開く必要があり、flashx ドライバー では、通常、フラグは使用されません。ファイルから読み込むには、格納するデータの読み込みと、読み込むバイト数を指定します。また、フラッシュを書き込むには、書き込むデータへのポインタと、転送するバイト数を提供する必要があります。そして、最後に使用した関数は ioctl 関数で、さまざまなパラメーターを取得または変更するために使用できます。ioctl 関数を使用する場合は、使用するコマンドを指定します。そして、パラメータとして値を要求した場合に結果が配置される場所へのポイント。では、どのようなソースコードを作成できますか。ベースアドレスやセクタ数など、さまざまな値を取得できます。バッファのフラッシュ、バッファリング機能の制御、フラッシュチップの全部または一部の消去、セクタキャッシングの制御、または書き込み保護の制御を行うことができます。 このドキュメントは、「MQX RTOSアプリケーション開発の要点」トレーニング・コースの第19回です。詳しくはvedioをご覧ください MQX RTOSアプリケーション開発の要点、Ses|NXPの Re:フラッシュドライバーの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi CSMG: OK、最初に確認させていただき、後で更新します。 よろしくお願いします。 Daniel Re:フラッシュドライバーの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi danielchen@fsl, FlexNVM用のFlashXドライバーを使用しようとしています。元の投稿はこちらです。 https://community.nxp.com/message/993610?commentID=993610&et=watches.email.thread#comment-993610  これを調べていただけますか? PS:ビデオリンクが壊れています。ここは。 よろしくお願いいたします サルマ Re:フラッシュドライバーの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> このドキュメントは、フラッシュ構造について理解を深めてくれます、ありがとう
查看全文
iWave、i.MX6UL SODIMMモジュールを発表 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> iWaveのi.MX6 UltraLite (i.MX6UL) ベースの SODIMM CPU モジュールは 、最大 528MHz の速度で動作する電力効率の高い高性能 ARM Cortex A7 CPU コアを統合しています。iMX6 UL SOMは超小型で、オンボードのPMIC、フラッシュ、DDR3、デュアルイーサネットPHYと統合されています。このSOMは、コストと消費電力が最適化された一般的な組み込みおよび産業用アプリケーションに最適です。                                                                                                                                                                                                                                                                                                    i.MX6UL SODIMM開発キット    i.MX6UL SODIMM SOM                                                                                                                                                                                                                                                                                                 利点: 67.6mm x 29mmの超小型フォームファクタモジュール 長期サポート:7 +年 テクニカル&クイックカスタマイズサポート ARM Cortex A9 i.MX6 Q/D/S SODIMM SOMに対応 ハイライト: 電力効率の高いARM Cortex-A7 @ 528MHz 高度なハードウェア対応セキュリティ DVFSをサポートするPMIC 産業用温度サポートが利用可能 特長: CPU: フリースケールのi.MX6UL1/2/3 @ 528MHz ARM Cortex A7 PMIC: フリースケールPF3000 メモリ: 256MB DDR3 RAM(拡張可能) 256MB NANDフラッシュ(拡張可能) MicroSDスロット(オプション) 1 eMMCフラッシュ(オプション) 1 QSPIフラッシュ(オプション) 1 通信: 10/100 イーサネット PHY – 2 ポート SODIMM エッジ インターフェイス: Debug UART データUART – 2ポート CAN – 2ポート SD(4ビット) – 1ポート 10/100イーサネット – 最大2ポート 2 USB OTG – 2ポート 24bpp RGB display port 8ビットパラレルカメラポート I2SオーディオまたはJTAG I2C x 1ポート PWM GPIOs OSサポート: Linux 3.14.28 電源: 3.3V @ 1A (SODIMM エッジ経由) 注 1: SOM では、NAND フラッシュ、eMMC & QSPI フラッシュ、または uSD & QSPI フラッシュを一度に使用できます。デフォルトでは、NANDフラッシュがサポートされています。 注2:2 nd Ethernet(ENET2)を使用しない場合は、追加の3つのUARTまたはキーパッド4x4またはRMIIインターフェイスとして使用できます。 ターゲット・アプリケーション: 産業用HMIとアクセス制御 エネルギー管理とIOTゲートウェイ 産業用制御およびオートメーション 白物家電&スマート家電 医療・ヘルスケア機器 モバイルPOSとセキュアな電子商取引 この製品に関するお問い合わせは、こちらをクリックしてください お問い合わせフォーム この製品の詳細については、 [email protected] に ご連絡ください
查看全文
S32K3_HSE_ASB_postboot_passflag Hi, NXP 我现在准备使用 HSE 的 ASB 来验证我的 BOOT 和 APP。我使用 Preboot SMR 来验证我的 BOOT,并在验证通过后发布 M7 内核。然后我使用 postboot 并行验证我的 APP。现在的问题是如何确认我的APP验证成功了。 (我找不到postboot pass的状态标志) 目前的想法是等待HSE初始化完成后再跳转到APP,然后通过检查SMR KEY是否有效来确认验证是否成功。这种方法能实现吗?有没有更好的办法? 此致, 显龙 Re: S32K3_HSE_ASB_postboot_passflag 非常感谢您的帮助。我之前忽略了API文档,没有找到相关信息。 Re: S32K3_HSE_ASB_postboot_passflag Hi 是的,可以通过 HSE_STATUS_INIT_OK 监控后启动阶段的结束: 您可以直接读取状态。请参阅 HSE 服务 API 参考手册中的 struct hseAttrSmrCoreStatus_t: 您可以在 HSE DemoExamples 中找到获取属性服务的示例: https://www.nxp.com/webapp/Download?colCode=S32K3_HSE_DemoExamples 这是来自c:\NXP\S32K3_HSE_DemoExamples_1_0_0\S32K3_HSE_DemoExamples\Secure_Boot\S32K344_Advanced_SecureBoot: /* 获取安全内存区域和核心重置条目安装的状态 */ HseResponse = Get_Attr( HSE_SMR_CORE_BOOT_STATUS_ATTR_ID, 大小(hseAttrSmrCoreStatus_t), (无效*)(&smrCoreStatus)); ASSERT(HSE_SRV_RSP_OK == HseResponse); 问候, 卢卡斯
查看全文
大容量記憶装置の例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 形容 この例では、内部 RAM に格納された FAT12 ボリュームで動作する大容量記憶域クラス デバイスを実装します。このボリュームのサイズは、DataRam.h で定義されている定数DATA_RAM_PHYSICAL_SIZEによって設定されます。 コンパイラのビルド構成 この例を構成するソフトウェアは、さまざまな開発ボードで動作するように設計されています。したがって、コンパイラは、使用している開発ボードを対象とするイメージをビルドするように構成する必要があります。このセクションでは、サポートされている各コンパイラに対してこれらのビルド構成を設定する方法について説明します。   LPCXpresso IDE プロジェクトを構成する [Project Explorer] ウィンドウで BSP プロジェクトを右クリックします。 「Build Configurations」-「Set Active->」>をクリックします(次の表の構成を参照)。 これらの手順を CDL、nxpUSBlib、および Example_MassStorageDevice で繰り返します MCU の構成 Project ExplorerウィンドウでExample_MassStorageDeviceプロジェクトを右クリックします Properties->C/C++ Build->MCU settings->をクリックします(下表の構成を参照)。 インデクサーを構成する [Window]-[>Preferences]-[>C/C++]-[>Indexer]-[Use active build configuration]をクリックします> BSPの CDLの nxpUSBlib Example_MassStorageDevice MCU LPC1850  / Hitex LPC18xx_HITEX LPC18xx LPC18xx_Device LPC18xx LPC1850 LPC4330  / Xplorer LPC4330_Xplorer LPC18xx LPC18xx_Device LPC18xx LPC4330 LPC4350  / Element14 LPC1435_ELEMENT14 LPC18xx LPC18xx_Device LPC18xx LPC4350 LPC11U14 / LPCXpresso LPC11Uxx_LPCXpressoRevB LPC11Uxx LPC11Uxx_Device LPC11Uxx LPC11U14 LPC11U14 / MCB1000 LPC11u14_MCB1000 LPC11Uxx LPC11Uxx_Device LPC11Uxx LPC11U14 LPC1768 / MCB1700 LPC1768_MCB1700 LPC17xx LPC17xx_Device LPC17xx LPC1768 LPC1768  / LPCXpresso LPC17xx_LPCXpressoRevB LPC17xx LPC17xx_Device LPC17xx LPC1768 注意: LPC18xx CDLは、LPC43xxパーツを保持するボードで使用されます。これは、LPC43xx CDLが現在実験段階であるためです。LPC18xx USBライブラリは、両方の部品が同じコントローラーを共有しているため、使用されます。   Keil uVision 4 IDE バッチビルドの設定   [Project->Batch Build...] をクリックします。 BSP プロジェクトを展開して、プロジェクト ターゲットの一覧を表示します。 適切なチェックボックスをオンにして、プロジェクトターゲットを選択します(以下の表のターゲットリストを参照)。 これらの手順を CDL、nxpUSBlib_Device、および Example_MassStorageDevice で繰り返します BSPの CDLの nxpUSBlib_Device Example_MassStorageDevice LPC1850  / Hitex HITEX1800 LPC18xx LPC18xx_Device HITEX1800 LPC1768 / MCB1700 MCB1700 LPC17xx LPC17xx_Device MCB1700 LPC11U14 / MCB1000 MCB1000 LPC11Uxx LPC11Uxx_Device MCB1000   ボードの接続と構成   LPC18xx_HITEX(LPC1850ハイテックス評価ボード)古いA2デザイン 回路図 ./BSP/schematics/HITEX_SCM_LPC1850EVA-A2-2.pdf   JTAGをX4JTAGとマークされた20ピンレセプタクルに接続します USBケーブルのタイプB側をX2とマークされたレセプタクルに接続します。このケーブルのタイプA側をPCに差し込みます LPC18xx_HITEX(LPC1850 Hitex Evaluation Board)新しいA4デザイン 回路図 ./BSP/schematics/HITEX_Final_LPC1850EVA-A3.pdf   LPC4330_Xplorer(NGX Xplorer評価ボード、LPC4330付き) JTAG を J2 とマークされた 10 ピン レセプタクルに接続します USBケーブルのmicro-b側をUSB0とマークされたレセプタクルに接続します。このケーブルのタイプA側をPCに差し込みます   LPC1435_ELEMENT14(Element 14ゲーミングボード、LPC4350付き) JTAG を J6 とマークされた 10 ピン レセプタクルに接続します タイプ A からタイプ A への USB ケーブルの一方の端を、USB0 とマークされたレセプタクルに接続します。このケーブルのもう一方の端をPCに差し込みます   LPC11u14_MCB1000 (Keil MCB1000 開発ボード) 概略図: ./BSP/schematics/mcb1000-schematics.pdf   ジャンパー: J4 = 2-3 (UCON - PIO0_6 は D+ を High にプルします) J2 = 1-2 (VDD - コア電源) J5がインストールされていません(ISP - COM経由のISP) J6がインストールされていない(RST - COM経由のISP) JTAGデバッガをJ3というラベルの付いた10ピンCortexデバッグコネクタに接続します USBケーブルのタイプBの端をPCのタイプBレセプタクルに接続し、ケーブルのタイプAの端をUSBレセプタクルに接続します USBケーブルをボードに接続すると、次のLEDが点灯します。 力 PIO2の8つのLEDすべて   LPC1768_MCB1700 (Keil MCB1700 開発ボード) 概略図: ./BSP/schematics/mcb1700-schematics.pdf   ジャンパー: E/U = 1-2 (イーサネット/USB) UMODE = 1-2(USBデバイスモード) D- = デバイス D+ = デバイス VBUS = 1-2 VDDIO=1-2 VDDREG = 1-2   JTAGデバッガを20ピンJTAGまたは10ピンCortexデバッグコネクタに接続します。 USBケーブルのタイプB側を「デバイス」というラベルの付いたタイプBレセプタクルに接続し、ケーブルのタイプA側をPCのUSBレセプタクルに接続します。USBケーブルをボードに接続すると、次のLEDが点灯します。 力 100MHzの USC(LEDはP2.9からのUSBソフト接続を示します)    LPC11Uxx_LPCXpressoRevB(LPCXpresso Rev Bベースボード上のLPCXpresso LPC11Uxx) 概略図: ./BSP/schematics/lpcxpresso.lpc11u14.schematic.pdf   この例を LPCXpresso LPC11U14 で実行するには、次の 2 つの方法のいずれかで実行できます。   1. LPCXpresso LPC11U14スタンドアロン USBケーブルのタイプB側をJ8というラベルの付いたLPCXpressoボードのミニレセプタクルに接続し、タイプA側をPCのUSBレセプタクルに接続します   2. LPCXpresso LPC11U14 LPCXpressoベースボードRevBに接続されています LPCXpresso LPC11U14ボードをLPCXpressoベースボードRevBのJ4というラベルの付いたコネクタに差し込みます Embedded Artistsのユーザーズガイドに従ってベースボードを設定します USBケーブルのミニタイプB側をX1とラベル付けされたベースボードのレセプタクルに接続し、タイプA側をPCのUSBレセプタクルに接続します USBケーブルをボードに接続すると、次のLEDが点灯します。 LED25(VBUSの) LED26(3.3vレール)         どちらの構成でも、JTAGデバッガはLPCXpresso LPC11U14ボードのJ3というラベルの付いたミニUSBレセプタクルに接続されています   LPC17xx_LPCXpressoRevB (LPCXpresso Rev B ベース ボード上の LPCXpresso LPC17xx) 概略図: ./BSP/schematics/LPCXpressoLPC1769revB.pdf   この例を LPCXpresso LPC1769で実行するには、次の 2 つの方法のいずれかで実行できます。   1. LPCXpresso LPC1769スタンドアロンです。タイプB USBレセプタクルをボードにはんだ付けし、配線します。詳細については、付属の回路図を参照してください。USBケーブルのタイプB側をLPCXpressoボードのレセプタクルに接続し、タイプA側をPCのUSBレセプタクルに接続します   2. LPCXpresso LPC1769 LPCXpressoベースボードRev Bに差し込みます。LPCXpresso LPC1769ボードをLPCXpressoベースボードRev BのJ4というラベルの付いたコネクタに差し込みます。Embedded Artistsのユーザーガイドに従ってベースボードを構成します。USBケーブルのミニタイプB側をX1というラベルの付いたベースボードのレセプタクルに接続し、タイプA側をPCのUSBレセプタクルに接続します。    USBケーブルをボードに接続すると、次のLEDが点灯します。 LED25(VBUSの) LED26(3.3vレール)         どちらの構成でも、JTAGデバッガはLPCXpresso LPC1769ボードのJ3というラベルの付いたミニUSBレセプタクルに接続されています。 PCを設定する Windows XP、Vista、または7を実行しているPCを使用しますボードに接続されているUSBケーブルのタイプA側をPCのUSBレセプタクルの1つに接続します Windows エクスプローラー ウィンドウを開く サンプルをビルドしてデバッグする LPCXpresso IDE IDE のプロジェクト エクスプローラー ウィンドウで、Example_MassStorageDevice プロジェクトを右クリックし、[As->C/C++ MCU アプリケーションをデバッグ] を選択します。 IDEのメイン・ウィンドウで、「実行」→「再開」>をクリックして、アプリケーションの実行を開始します   Keil uVision 4 IDE 「バッチ・ビルド」ウィンドウで、「コンパイラ・ビルド構成」の説明に従ってプロジェクト・ターゲットを選択し、「ビルド」をクリックします IDEのメイン・ウィンドウで、「デバッグ」>「デバッグ・セッションの開始/停止」をクリックし、「デバッグ」>実行をクリックします。   この例の実行方法と検索対象 この例を実行し、ボードを USB ケーブルで PC に接続すると、PC 上に大容量記憶装置として列挙され、Windows ファイル エクスプローラーにボリューム ラベル nxpUSBlib のドライブとして表示されます。   ドライブには、「README.TXT」というファイルが 1 つ含まれており、このファイルには「This is a USB Memory Device demonstration." デザインノート この大容量記憶装置の例では、仮想ドライブ サイズと物理ドライブ サイズを定義します。 これらの番号は DataRam.h ファイルで定義され、次のようになります。   #define DATA_RAM_START_ADDRESS 0x20080000 #define DATA_RAM_PHYSICAL_SIZE 0xc00
查看全文
无法加载统一引导加载程序演示 V2.1 Hello, 我正在使用 S32K116 32 针封装 uC。我目前正在尝试让此处找到的引导加载程序演示发挥作用。 S32DS 平台是我通常使用的 IDE,但是由于 S32K116_LIN_Bootloader 项目使用 Processor Expert,因此我将 S32DS 用于 Arm。导入项目出现以下错误 在安装 Kinetis SDK 之前,我只能选择 S32K116 的 48 针变体。安装Kinetis SDK 1.3.0 Mainline - Windows 后,我现在能够选择 uC 的 32 针变体,但错误仍然出现,并且无法使用 Processor Expert 生成代码。 我正在使用的解决方法是使用 pin_mux.c和 pin_mux.h来自不同项目的文件,该项目使用项目中的正确引脚配置。 统一引导加载程序包中的 UBL.pdf 文件描述不够详细。 我有两个问题: 1.如何消除错误以便可以使用 Processor Expert 生成代码? 2. 是否有更深入的解释来说明如何配置引导加载程序、如何对应用程序进行更改以在应用程序和引导加载程序之间切换、如何使用引导加载程序更新应用程序等? 任何帮助都将不胜感激! 回复:无法加载统一引导加载程序演示 V2.1 Hi A1:请下载S32 Design Studio for Arm 2018.R1 – Windows/Linux ,并使用S32 SDK S32K1xx SR 3.0.2 安装 S32 Design Studio for ARM v2018.R1 Update 11 。该项目基于S32K1 SDK 3.0.x。 A2:您读过统一引导加载程序 - 用户指南吗? 很遗憾,社区上共享的统一引导程序只是按原样提供的非官方演示,没有任何保证和支持。目前我们没有资源来支持该演示。对于造成的不便,我们深表歉意。 此致, 罗宾 -------------------------------------------------------------------------------- 笔记: - 如果这篇文章回答了您的问题,请点击“接受为解决方案”按钮。谢谢你! - 我们会关注上次发帖后七周的帖子,之后的回复将被忽略 如果您稍后有相关问题,请打开一个新线程并参考已关闭的线程。 --------------------------------------------------------------------------------
查看全文
S32Design Studio 3.5のヒントとコツ S32 Design Studio のユーザーエクスペリエンスを向上させるために、この記事ではいくつかのヒントとコツをご紹介します。 ユースケース #1: S32 Design Studioでは、一部のUI更新操作に時間がかかりすぎます 回避策: s32ds.ini ファイル内の Eclipse の構成パラメータを手動で更新してください ユースケース #2: S32 Design Studioは、更新の確認が完了するまで待機するため、起動に時間がかかります 解決策: 環境を少なくともUpdate12以降に更新するか、起動時のチェックを無効にしてください ユースケース #3: インストール/アップデートフロー中のRTDとS32DS間のパッケージ依存関係の制御 解決策: ソフトウェアおよびツールのインストールの主な/単一の配信ソリューションとしてパッケージマネージャーに移行する。「バンドル&ユースケース」というコンセプトは相互運用性を保証し、カスタマーサポートが付属します。 Eclipse IDEの使用と設定 全般
查看全文
LPC15xxダウンロード用のLPCOpenが壊れています LPC1500用のLPCOpenをダウンロードするためのHelloリンクが壊れています。新しい開発のために必要です。 https://www.nxp.com/design/design-center/software/software-library/lpcopen-software-development-platform-lpc15xx:LPCOPEN-SOFTWARE-FOR-LPC15XX https://www.nxp.com/webapp/Download?colCode=LPCOPEN-2-20-NXP-1549  日時:LPC15xxのダウンロードのためのLPCOpenが壊れています さて、それは今動作します。解決
查看全文
如何使用JLINK调试RT1170双核 i.MXRT1170 跨界MCU是NXP RT系列中的新一代产品。它具有1 GHz的速度和丰富的片上外设。在 RT1170 子系列中,RT1173、RT1175 和 RT1176 具有双核。一个 Cortex-M7 内核以 1 GHz 运行,一个 Cortex-M4 内核以 400 MHz 运行。两个内核可以通过一个 SWD 端口进行调试。 在 MIMXRT1170-EVK 中,Freelink 调试接口默认使用 CMSIS-DAP 作为调试探针。调试两个核心项目时,例如 evkmimxrt1170_hello_world_cm7 项目和 evkmimxrt1170_hello_world_cm4 项目,只需点击 CM7 项目中的调试按钮即可。当 CM7 项目进入调试状态后,CM4 项目会自动开始调试。但是如果开发人员想使用 jlink 作为调试探针,他会发现 CM4 项目不会自动启动。如果他手动启动 CM4 项目的调试,它将失败。jlink 可以同时调试双核吗?是的,可以。为了通过 jlink 调试双核,还需要进行一些额外设置。 IDE 和 SDK MCUXpresso IDE 11.3, MIMXRT1170-EVK SDK 2.9.1, Jlink 探针版本 9 或更高,或将 Freelink 应用程序固件更改为 Jlink。 Segger jlink firmware JLink_Windows_V698a. 导入 SDK 示例,这里我们选择 multicore_examples/evkmimxrt1170_hello_world_cm7。MCUXpresso IDE 可以自动导入 CM4 和 CM7 项目。编译两个项目。 首先调试 CM7 项目。然后切换到 CM4 项目,并单击“调试”按钮。CM4 项目将无法正常调试。因此,我们退出调试模式。通过这一步,IDE 在“运行→调试配置”中创建了两个调试配置。 点击 evkmimxrt1170_hello_world_cm4 JLink Debug,点击 JLink Debugger 标签,添加 evkmimxrt1170_connect_cm4_cm4side.jlinkscript。然后取消选中“Attach to a running target”复选框。 在 CM4 项目的 main() 函数的开头设置断点。这是因为有时 IDE 在开始调试时无法在 main() 开始时挂起。第二个断点可能会有所帮助。注意在 BOARD_ConfigMPU() 或下面的代码上设置断点。不要在“gpio_pin_config_t led_config…”上设置断点。否则,调试将失败。 现在我们可以开始调试 CM7 项目。点击“运行”菜单中的“调试”按钮,然后选择“evkmimxrt1170_hello_world_cm4 JLink Debug”。这是因为集成开发环境 (IDE) 会自动启用“附加到运行中的目标”功能。我们必须再次禁用。 当 CM7 调试环境准备就绪后,切换到 CM4 项目并单击“调试”按钮。然后继续进行 CM7 项目。CM4 项目将开始调试并在断点处暂停。   说明: 如果您按照本指南操作后仍无法调试两个核心,请尝试擦除整个芯片,然后再试一次。 如果 CM7 项目在 MCMGR_INIT() 中运行失败,请检查“启动配置”引脚。应设置为内部启动模式。 回复:如何使用JLINK调试RT1170双核 如果在按照上述步骤操作时遇到问题(例如使用 J-Link 调试 RT1160 时),这里有一个教程中未提及但必须自行发现的解决方法: 在 MCUXpresso IDE 中,禁用“启用多核项目中自动调试次要项目”选项,路径为“窗口” → “首选项” → “MCUXpresso IDE” → “调试选项” → “J-Link 选项” 按照教程中提到的步骤操作。 首先调试 CM7 项目。待其调试实例加载完成后,再调试CM4项目。此时即可实现双核同时调试。
查看全文
Drones <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> クワッドコプタードローンは、無人航空機(UAV)で非常に人気のあるデザインです。フライトコントローラーと、モーターごとに1つずつ、計4つの電子スピードコントローラー(ESC)で構成されています。フライトコントローラーには、パイロットからの飛行コマンドを受信するための無線機と慣性計測ユニット(IMU)が装備されています。IMUは、内部の加速度計、ジャイロスコープ、場合によっては磁力計やGPS受信機を使用して、車両の自律的な安定化に必要な情報(速度や向きなど)を提供します。   リソース クワッドコプター・ドローン・リファレンス・デザイン   ドローンの例 - NXP搭載 3DRドローン Spiriプログラマブル飛行ロボット DJIファントム3アドバンスト インダストリアル モバイル
查看全文
回复:DMA Ping-Pong应用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Overview         Ping-Pong是一种特殊的已链接传输情况,由于与更复杂版本的已链接传输相比,它的使用通常更为频繁。 Ping-Pong传输通常至少使用两个缓冲区。不论何时,DMA操作都会载入或取消载入一个缓冲区。另一个缓冲区的操作与由软件控制的操作相反,这样在DMA控制器当前使用的缓冲区为满或空时,可将该缓冲区准备好以供使用。图1显示了从外设至存储器中两个缓冲区的Ping-Pong传输的描述符示例。 图1 实施细节        为了将ADC转换结果连续传输到RAM,我将使用四个DMA描述符以Ping-Pong模式工作。 实现这一目标,如图2所示。 图 2 Ping-Pong 模式下的数据流 硬件介绍         LPCXpressor54114 Board(OM13089) 图3 LPCXpressor54114板        示例代码:LPCOpen Library 示例代码       该代码基于periph_adc示例程序,使用SCTimer输出作为ADC的硬件触发信号,同时,ADC转换后的值会自动传输到指定的RAM区域。 #include "board.h" #define SCT_PWM            LPC_SCT #define NUM_BUFFERS 4 #define DMA_TRANSFER_SIZE 8 #define ADC_INPUT_CHANNEL 1 #define SCT_PWM_RATE   10000          /* PWM frequency 10 KHz */ #define SCT_PWM_PIN_OUT    7          /* COUT7 Generate square wave */ #define SCT_PWM_OUT        1          /* Index of OUT PWM */ uint16_t adcOut; ALIGN(512) DMA_CHDESC_T ADC_TransferDescriptors[NUM_BUFFERS]; uint16_t CapturedData[32]; uint16_t DMA_Sum=0; /** * * ADC IRQ not Used right now... Only for testing */ void ADC_SEQA_IRQHandler(void) {             /* If SeqA flags is set i.e. data in global register is valid then read it */         Chip_GPIO_SetPinState(LPC_GPIO, 0, 6, true);         //DEBUGOUT("ADC Output = %d\r\n", adcOut);         Chip_GPIO_SetPinState(LPC_GPIO, 0, 6, false);         Chip_ADC_ClearFlags(LPC_ADC,0xFFFFFFFF); } void DMA_IRQHandler(void) {         static uint16_t DMA_Sum=0;                 DMA_Sum++;                  if(DMA_Sum ==8)          {            DMA_Sum=4;          }             Chip_GPIO_SetPinState(LPC_GPIO, 0, 7,true);      /* Rrror interrupt on channel 0? */      if ((Chip_DMA_GetIntStatus(LPC_DMA) & DMA_INTSTAT_ACTIVEERRINT) != 0)      {           /* This shouldn't happen for this simple DMA example, so set the LED              to indicate an error occurred. This is the correct method to clear              an abort. */           Chip_DMA_DisableChannel(LPC_DMA, DMA_CH0);           while ((Chip_DMA_GetBusyChannels(LPC_DMA) & (1 << DMA_CH0)) != 0) {}           Chip_DMA_AbortChannel(LPC_DMA, DMA_CH0);           Chip_DMA_ClearErrorIntChannel(LPC_DMA, DMA_CH0);           Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);           Board_LED_Set(0, true);      }      Chip_GPIO_SetPinState(LPC_GPIO, 0,7,false);      /* Clear DMA interrupt for the channel */      LPC_DMA->DMACOMMON[0].INTA = 1; }      /***       *      ____  __  __    _       *     |  _ \|  \/  |  / \       *     | | | | |\/| | / _ \       *     | |_| | |  | |/ ___ \       *     |____/|_|  |_/_/   \_\       *     / ___|  ___| |_ _   _ _ __       *     \___ \ / _ \ __| | | | '_ \       *      ___) |  __/ |_| |_| | |_) |       *     |____/ \___|\__|\__,_| .__/       *                          |_|       */ void DMA_Steup(void) {         DMA_CHDESC_T Initial_DMA_Descriptor;                 ADC_TransferDescriptors[0].source = (uint32_t)&LPC_ADC->SEQ_GDAT[0];      ADC_TransferDescriptors[1].source = (uint32_t)&LPC_ADC->SEQ_GDAT[0];      ADC_TransferDescriptors[2].source = (uint32_t)&LPC_ADC->SEQ_GDAT[0];      ADC_TransferDescriptors[3].source = (uint32_t)&LPC_ADC->SEQ_GDAT[0];      ADC_TransferDescriptors[0].dest = (uint32_t)&CapturedData[(0+1)*DMA_TRANSFER_SIZE-1];      ADC_TransferDescriptors[1].dest = (uint32_t)&CapturedData[(1+1)*DMA_TRANSFER_SIZE-1];      ADC_TransferDescriptors[2].dest = (uint32_t)&CapturedData[(2+1)*DMA_TRANSFER_SIZE-1];      ADC_TransferDescriptors[3].dest = (uint32_t)&CapturedData[(3+1)*DMA_TRANSFER_SIZE-1];      //The initial DMA desciptor is the same as the 1st transfer descriptor.   It      //Will link into the 2nd of the main descriptors.      ADC_TransferDescriptors[0].next = (uint32_t)&ADC_TransferDescriptors[1];      ADC_TransferDescriptors[1].next = (uint32_t)&ADC_TransferDescriptors[2];      ADC_TransferDescriptors[2].next = (uint32_t)&ADC_TransferDescriptors[3];      //Link back to the 1st descriptor      ADC_TransferDescriptors[3].next = (uint32_t)&ADC_TransferDescriptors[0];      //For a test,  stop the transfers here.   The sine wave will look fine.      //ADC_TransferDescriptors[3].next = 0;      ADC_TransferDescriptors[0].xfercfg = (DMA_XFERCFG_CFGVALID |                                DMA_XFERCFG_RELOAD  |                                DMA_XFERCFG_SETINTA |                                DMA_XFERCFG_WIDTH_16 |                                DMA_XFERCFG_SRCINC_0 |                                DMA_XFERCFG_DSTINC_1 |                                DMA_XFERCFG_XFERCOUNT(DMA_TRANSFER_SIZE));      ADC_TransferDescriptors[1].xfercfg = ADC_TransferDescriptors[0].xfercfg;      ADC_TransferDescriptors[2].xfercfg = ADC_TransferDescriptors[0].xfercfg;      ADC_TransferDescriptors[3].xfercfg = (DMA_XFERCFG_CFGVALID |                                DMA_XFERCFG_RELOAD  |                                DMA_XFERCFG_SETINTA |                               DMA_XFERCFG_WIDTH_16 |                               DMA_XFERCFG_SRCINC_0 |                               DMA_XFERCFG_DSTINC_1 |                               DMA_XFERCFG_XFERCOUNT(DMA_TRANSFER_SIZE));      Initial_DMA_Descriptor.source = ADC_TransferDescriptors[0].source;      Initial_DMA_Descriptor.dest =   ADC_TransferDescriptors[0].dest;      Initial_DMA_Descriptor.next =  (uint32_t)&ADC_TransferDescriptors[1];      Initial_DMA_Descriptor.xfercfg = ADC_TransferDescriptors[0].xfercfg;      /* DMA initialization - enable DMA clocking and reset DMA if needed */      Chip_DMA_Init(LPC_DMA);      /* Enable DMA controller and use driver provided DMA table for current descriptors */      Chip_DMA_Enable(LPC_DMA);      Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));      /* Setup channel 0 for the following configuration:         - High channel priority         - Interrupt A fires on descriptor completion */      Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);      Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH0);      Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH0,     //(DMA_CFG_PERIPHREQEN     |                                    (DMA_CFG_HWTRIGEN        |                                     DMA_CFG_TRIGBURST_BURST |                                                          DMA_CFG_TRIGTYPE_EDGE   |                                        DMA_CFG_TRIGPOL_LOW    |    //DMA_CFG_TRIGPOL_HIGH                                        DMA_CFG_BURSTPOWER_1    |                                     DMA_CFG_CHPRIORITY(0)                                          )                                        );      //make sure ADC Sequence A interrupts is selected for for a DMA trigger      LPC_INMUX->DMA_ITRIG_INMUX[0] = 0;      /* Enable DMA interrupt */      NVIC_EnableIRQ(DMA_IRQn);      // The 1st descriptor is set up through the registers.      /* Setup transfer descriptor and validate it */      Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH0, &Initial_DMA_Descriptor);      //Use the transfer configuration for our 4 main descriptors      Chip_DMA_SetupChannelTransfer(LPC_DMA, DMA_CH0,     ADC_TransferDescriptors[0].xfercfg);      Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH0);      } void SCT_PWM_Generate(void) {          /* Initialize the SCT as PWM and set frequency */      Chip_SCTPWM_Init(SCT_PWM);      Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);      /* Setup Board specific output pin */      Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 14, IOCON_FUNC3 | IOCON_MODE_INACT | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);      /* Use SCT0_OUT7 pin */      Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT);              /* Start with 50% duty cycle */      Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, Chip_SCTPWM_PercentageToTicks(SCT_PWM, 10));      Chip_SCTPWM_Start(SCT_PWM);    }      /***            *         _    ____   ____            *        / \  |  _ \ / ___|            *       / _ \ | | | | |            *      / ___ \| |_| | |___            *     /_/__ \_\____/ \____|            *     / ___|  ___| |_ _   _ _ __            *     \___ \ / _ \ __| | | | '_ \            *      ___) |  __/ |_| |_| | |_) |            *     |____/ \___|\__|\__,_| .__/            *                          |_|            */ void ADC_Steup(void) {     /*Set Asynch Clock to the Main clock*/     LPC_SYSCON->ADCCLKSEL = 0;     //Set the divider to 1 and enable.  note,  the HALT bit (30) and RESET (29) are not in the manual     LPC_SYSCON->ADCCLKDIV = 0;      /* Initialization ADC to 12 bit and set clock divide to 1 to operate synchronously at System clock */     Chip_ADC_Init(LPC_ADC, ADC_CR_RESOL(3) | ADC_CR_CLKDIV(0)| ADC_CR_ASYNC_MODE);       //select ADC Channel 1 as input     Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 30, IOCON_FUNC0 | IOCON_ANALOG_EN| IOCON_INPFILT_OFF);       LPC_ADC->INSEL = 0x01;     Chip_ADC_SetupSequencer(LPC_ADC,ADC_SEQA_IDX,                                                                          ADC_SEQ_CTRL_SEQ_ENA |                               ADC_SEQ_CTRL_CHANNEL_EN(ADC_INPUT_CHANNEL) |                                                 ADC_SEQ_CTRL_TRIGGER(2) |                               ADC_SEQ_CTRL_HWTRIG_POLPOS |                                                 ADC_SEQ_CTRL_HWTRIG_SYNCBYPASS |                               ADC_SEQ_CTRL_MODE_EOS |                                                 ADC_SEQ_CTRL_SEQ_ENA);     /* Enable Sequence A interrupt */     Chip_ADC_EnableInt(LPC_ADC, ADC_INTEN_SEQA_ENABLE);         /* Calibrate ADC */     if(Chip_ADC_Calibration(LPC_ADC) == LPC_OK) {         /* Enable ADC SeqA Interrupt */         NVIC_EnableIRQ(ADC_SEQA_IRQn);     }     else {         DEBUGSTR("ADC Calibration Failed \r\n");         return ;     } } int main(void) {       SystemCoreClockUpdate();     Board_Init();         DMA_Steup();     ADC_Steup();     SCT_PWM_Generate();         while(1)     {}     } ‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍  验证     构建项目,然后点击 进行调试;        生成正弦波:1 kHz,幅度:0~2 V,通过J9_1(P0_30-ADC1)将波形输入至ADC;        设置断点(图4),用于观察ADC转换值CapturedData[32]; 图4                        4. 为了验证结果,我收集了多个数据组,并使用Excel将这些数据制成图表进行检查。图6是一个示例。 图5 图6 图7 图8 LPC54xxx LPCOpen 回复:DMA Ping-Pong 应用程序 您好@jeremyzhou, 我遵循您的实现并进行了修改,以更新LPC54102上SCT块的匹配寄存器。我正在向该寄存器输入正弦波的振幅值以生成脉宽调制(SPWM)。 程序有些正常运行,但我注意到程序忽略了查找表(LUT)中的一些值。您对如何解决这个问题有什么建议吗? 我将添加部分代码。 /*****************************************CODE************************************************/ #include "board.h"   #define SCT_PWM LPC_SCT #define DMA_TRANSFER_SIZE 64   #define SCT_PWM_RATE  10000          /* PWM frequency 10 KHz */ #define SCT_PWM_PIN_OUT 4 /* COUT7 生成方波 */ #define SCT_PWM_OUT 1 /* OUT PWM 的索引 */     static CHIP_SYSCON_PLLCLKSRC_T curr_src=SYSCON_PLLCLKSRC_RTC; static volatile bool dmaDone = false;static int fmode; static int fmode;       #define TABLE_SIZE 128 uint16_t sine_table[TABLE_SIZE] __attribute__((aligned(16))) = { 610, 610, 610, 610, 610, 610, 610, 610, 859, 859, 859, 859, 859, 859, 859, 859, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1217, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 969, 969, 969, 969, 969, 969, 969, 969, 737, 737, 737, 737, 737, 737, 737, 737, 483, 483, 483, 483, 483, 483, 483, 483, 252, 252, 252, 252, 252, 252, 252, 252, 82, 82, 82, 82, 82, 82, 82, 82, 3, 3, 3, 3, 3, 3, 3, 3, 30, 30, 30, 30, 30, 30, 30, 30, 157, 157, 157, 157, 157, 157, 157, 157, 362, 362, 362, 362, 362, 362, 362, 362, 610, 610, 610, 610, 610, 610, 610, 610   };     ALIGN(512) DMA_CHDESC_T SCT_TransferDescriptors1,SCT_TransferDescriptors2; uint16_t CapturedData[32]; uint16_t DMA_Sum=0; void DMA_IRQHandler(void) {         /* Rrror interrupt on channel 0? */      if ((Chip_DMA_GetIntStatus(LPC_DMA) & DMA_INTSTAT_ACTIVEERRINT) != 0)      {           /* This shouldn't happen for this simple DMA example, so set the LED              to indicate an error occurred. 这是清除的正确方法 中止。*/           Chip_DMA_DisableChannel(LPC_DMA, DMA_CH0);           while ((Chip_DMA_GetBusyChannels(LPC_DMA) & (1 << DMA_CH0)) != 0) {}           Chip_DMA_AbortChannel(LPC_DMA, DMA_CH0);           Chip_DMA_ClearErrorIntChannel(LPC_DMA, DMA_CH0);           Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);           Board_LED_Set(0, true);      }            /* Clear DMA interrupt for the channel */ LPC_DMA->DMACOMMON[0].INTA = 1; }     void DMA_Setup(void) {     SCT_TransferDescriptors1.source = (uint32_t)(&sine_table[TABLE_SIZE-1]);     SCT_TransferDescriptors1.dest = (uint32_t)(&(LPC_SCT->MATCHREL[1].U)); SCT_TransferDescriptors1.next = (uint32_t)(&SCT_TransferDescriptors2); SCT_TransferDescriptors1.xfercfg = DMA_XFERCFG_CFGVALID | DMA_XFERCFG_SETINTA |                                       DMA_XFERCFG_WIDTH_16 | DMA_XFERCFG_SRCINC_1 | DMA_XFERCFG_DSTINC_0 |                                       DMA_XFERCFG_XFERCOUNT((TABLE_SIZE)) | DMA_XFERCFG_RELOAD;       // Configuración del segundo descriptor (igual que el primero, pero enlazando de regreso al primero) SCT_TransferDescriptors2.source = (uint32_t)(&sine_table[(TABLE_SIZE-1)]);     SCT_TransferDescriptors2.dest = (uint32_t)(&(LPC_SCT->MATCHREL[1].U)); SCT_TransferDescriptors2.next = (uint32_t) (&SCT_TransferDescriptors1); SCT_TransferDescriptors2.xfercfg = DMA_XFERCFG_CFGVALID | DMA_XFERCFG_SETINTA |                                       DMA_XFERCFG_WIDTH_16 | DMA_XFERCFG_SRCINC_1 | DMA_XFERCFG_DSTINC_0 |                                       DMA_XFERCFG_XFERCOUNT((TABLE_SIZE)) | DMA_XFERCFG_RELOAD;             /* DMA initialization - enable DMA clocking and reset DMA if needed */     Chip_DMA_Init(LPC_DMA);       /* Enable DMA controller and use driver provided DMA table for current descriptors */     Chip_DMA_Enable(LPC_DMA);     Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));       /* Setup channel for the given configurations */     Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);     Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH0); Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH0, (DMA_CFG_HWTRIGEN | DMA_CFG_TRIGBURST_BURST | DMA_CFG_TRIGTYPE_LEVEL | DMA_CFG_TRIGPOL_LOW  | DMA_CFG_CHPRIORITY(0)));           /* Set ADC Sequence A interrupts for a DMA trigger */     LPC_INMUX->DMA_ITRIG_INMUX[0] = DMATRIG_SCT0_DMA0;       /* Enable DMA interrupt */     NVIC_EnableIRQ(DMA_IRQn);       /* Setup the initial descriptor */     Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH0, &SCT_TransferDescriptors1);       /* Use the transfer configuration for our descriptors */ Chip_DMA_SetupChannelTransfer(LPC_DMA,DMA_CH0,SCT_TransferDescriptors1.xfercfg);     Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH0); }   void SCT_PWM_Generate(void) {          /* Initialize the SCT as PWM and set frequency */      Chip_SCTPWM_Init(SCT_PWM);      Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);        /* Setup Board specific output pin */      Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 1, IOCON_FUNC3 | IOCON_MODE_INACT | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);      /* Use SCT0_OUT7 pin */      Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT);            /* 从50%占空比开始 */      Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, Chip_SCTPWM_PercentageToTicks(SCT_PWM, 10));      Chip_SCTPWM_Start(SCT_PWM);     }     int main(void) {        SystemCoreClockUpdate(); Board_Init();     SystemCoreClockUpdate();     SCT_PWM_Generate();     DMA_Setup();                 while(1)     {}      } 回复:DMA Ping-Pong 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 一个小问题。 该示例使用 SCT 触发 ADC。 对于我的代码,我使用了 CTIMER(match event)来触发 ADC 序列,这种方法似乎更简单,也更容易理解。 使用 SCT 有什么优势吗? 回复:DMA Ping-Pong 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 能否将描述符定义为常量,并在编译时进行设置,即放在闪存而不是RAM中? 回复:DMA Ping-Pong 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi dingelen, 感谢您的回复。 根据上述描述,我仍然不清楚“struck”问题的实际情况,因此建议您进行更多测试并提供更详细的信息。 祝您有美好的一天。 BR, Jeremy 回复:DMA Ping-Pong 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Jeremy, 感谢您的快速回复。我认为使用LPC55也可以实现相同的功能,但我在这一部分遇到了一些困难:      /* DMA initialization - enable DMA clocking and reset DMA if needed */      Chip_DMA_Init(LPC_DMA);      /* Enable DMA controller and use driver provided DMA table for current descriptors */      Chip_DMA_Enable(LPC_DMA);      Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));      /* Setup channel 0 for the following configuration:         - High channel priority         - Interrupt A fires on descriptor completion */      Chip_DMA_EnableChannel(LPC_DMA, DMA_CH0);      Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH0);      Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH0,     //(DMA_CFG_PERIPHREQEN     |                                    (DMA_CFG_HWTRIGEN        |                                     DMA_CFG_TRIGBURST_BURST |                                                          DMA_CFG_TRIGTYPE_EDGE   |                                        DMA_CFG_TRIGPOL_LOW    |    //DMA_CFG_TRIGPOL_HIGH                                        DMA_CFG_BURSTPOWER_1    |                                     DMA_CFG_CHPRIORITY(0)                                          )                                        );      //make sure ADC Sequence A interrupts is selected for for a DMA trigger      LPC_INMUX->DMA_ITRIG_INMUX[0] = 0;      /* Enable DMA interrupt */      NVIC_EnableIRQ(DMA_IRQn);      // The 1st descriptor is set up through the registers.      /* Setup transfer descriptor and validate it */      Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH0, &Initial_DMA_Descriptor);      //Use the transfer configuration for our 4 main descriptors      Chip_DMA_SetupChannelTransfer(LPC_DMA, DMA_CH0,     ADC_TransferDescriptors[0].xfercfg);      Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH0) 所有这些功能似乎在LPC55 SDK中都不可用。SDK 中的示例也仅使用某种轮询式启动/停止方式,而非自动运行的设置。(请参见 lpcxpresso55s69_lpadc_dma 示例) 如果这最后一部分能够被移植,那就太好了。 谢谢! Tom 回复:DMA Ping-Pong 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi dingelen, 感谢您对演示的兴趣。 1) 是否有适用于 LPC55 系列的相同示例? --在审查了RM后,我发现LPC55xx系列也支持Ping-Pong功能,因此该示例可以移植到该系列。 祝您有美好的一天。 BR, Jeremy 回复:DMA Ping-Pong 应用程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 超级示例。比SDK里的好多了... 谢谢! LPC55系列是否有相同的示例可用?与LPC54系列相比,DMA的设置方式似乎有一些不同。
查看全文