Multi Source Translation Content

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

Multi Source Translation Content

Discussions

Sort by:
[LPC55]避免“加密”启用不连续的 PRINCE 子区域 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 当我们使用 LPC55Sxx PRINCE 功能时,我们需要通过设置 SR_ENABLE 寄存器来启用 PRINCE 子区域“加密”。如果我们“加密”启用不连续的子区域并擦除其中的一部分,我们可能会发现我们无法再擦除/读取/写入其他“加密”子区域。本文将讨论如何解决这一现象。 图 1 测试步骤 根据 LPC55Sxx UM,每个 PRINCE 区域都有其 SR_ENABLEx 寄存器。该寄存器支持对加密区域 0 的每个子区域的数据进行 PRINCE 加密和解密。该字段中的每个位都支持加密区域 0 中偏移量为 8kB*n 的子区域,其中 n 是位数。例如,当我们设置SR_ENABLE0=0X00000005时,PRINCE区域0子区域1和子区域3被设置为加密区域。当从这些子区域读出数据时,PRINCE会自动解密数据。   现在我们将测试不连续子区域擦除/读取/写入。 主板:LPC55S16-EVK IDE: Keil MDK v5.29 步骤1:PRINCE初始化:启用PRINCE区域0和两个不连续的子区域;生成密钥、IV码;启用加密。 //设置 SR_ENABLE , SR_ENABLE=0X28000000,使能子区域(0x30000-0x32000,0x34000-0x36000)加密。 状态=PRINCE_SetRegionSREnable(PRINCE( prince_region_t )region0,0X28000000); //为 region0 选择 PRINCE 加密 PRINCE_SetRegionBaseAddress(PRINCE_Type*base,prince_region_tregion0,uint32_t0X0) //生成 PRINCE region0 加密密钥 状态=FFR_KeystoreGetKC(&flashInstance,&keyCode[0],kFFR_KeyTypePrinceRegion0); 状态=PUF_GetHwKey(PUF,keyCode,sizeof(keyCode),kPUF_KeySlot2,rand()); //生成 PRINCE region0 加密 IV_code status=PRINCE_GenNewIV(kPRINCE_Region0,&prince_iv_code[0],true,&flashInstance) //将 IV 代码加载到 PRINCE status=PRINCE_LoadIV(kPRINCE_Region0,&prince_iv_code[0]) //启用 PRINCE 加密 PRINCE_EncryptEnable(PRINCE)   步骤2:选择两个不连续的子区域(0x30000-0x32000,0x34000-0x36000)。擦除其中一个(0x30000-0x32000),然后将数据写入该子区域。 输出:擦除和写入均成功。见图2。 //擦除0x30000-0x32000子区域 status=PRINCE_FlashEraseWithChecker(&flashInstance,0x30000,0x2000,kFLASH_ApiEraseKey); //写入0x30000-0x32000子区域 status=PRINCE_FlashProgramWithChecker(&flashInstance,0x30000,(uint8_t *)prince_iv_code,0x2000);   步骤3:擦除并写入另一个子区域(0x34000-0x36000) 输出:擦除和写入失败。见图2。 //擦除0x34000-0x36000子区域 status=PRINCE_FlashEraseWithChecker(&flashInstance,0x34000, 0x2000,kFLASH_ApiEraseKey); //写入0x34000-0x36000子区域 status=PRINCE_FlashProgramWithChecker(&flashInstance,0x34000, (uint8_t *)prince_iv_code,0x2000); 错误分析 根据UM11126( 49.16.1功能细节) ,每个加密区域都有自己的SKEY和IV代码。PRINCE在加密或解密加密区域子区域中的数据时,会同时使用SKEY和IV。 比如对于PRINCE的region1,每次执行擦除操作后,都会生成新的Skey1和IV1,因此在对另一个子区域执行擦除/读/写操作时,旧的IV1和新的IV1不匹配,导致PRINCE无法正确解密。   建议 我们建议用户使用 SR_ENABLE 来设置连续的加密子区域。当需要进行擦除操作时,将所有加密子区域一起擦除,避免擦除部分子区域。一个子区域大小为8K,请确保擦除/写入地址8K对齐。   感谢johnwu的建议 LPC营销 LPC55xx 中国用户论坛
View full article
从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> LS1021xA系列产品开始支持QSPI闪存启动。 但是从 QSPI 闪存启动与从 SPI 闪存启动不同。 QSPI 启动使用 XIP(就地执行)方法,就像 NOR Flash 启动一样。 分配给 QSPI 闪存的内存映射起始地址为 0x4000000。 您需要将代码放在正确的位置。 您应该注意的另一个关键点是 QSPI 控制器和 ARM AMBA AXI 总线之间的数据字节序格式。 任何刻录到 QSPI Flash 的二进制文件都应首先完成字节交换过程。 我们的 Ls1021xA Bsp 在名为“byte_swap.tcl”的 Tcl 脚本文件中提供了此功能。 按照以下命令完成此过程。 tclsh ./byte_swap.tcl ./ .bin ./ .bin 8 然后从 SD/MMC 媒体启动系统。 按照以下命令将映像文件刻录到 QSPI Flash 中。 => tftp 0x81000000 rcw_qspiboot_swap.bin (测量此二进制文件包含PBI命令:0xee0200、0x40010000 这是 u-boot 地址的解决方法) => SF探测器 => sf擦除 0 0x10000 => sf写入 0x81000000 0 0x100 => tftp 0x82000000 u-boot-qspiboot_swap.bin => sf擦除 0x10000 0x90000 => sf写入 0x82000000 0x10000 0x80000 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 是的,T系列、LS系列和部分P系列QorIQ产品需要RCW二进制文件。 我们的 SDK 将帮助您在代码构建过程之后自动将 RCW 数据插入 U-boot 二进制文件中。 但LS SDK尚未完成所有功能。 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 谢谢明哲, 无论我如何启动 LS1021A 板,是否总是需要 RCW 二进制文件? 这些配置是否已经像 imx6 一样包含在 u-boot 中? 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rcw_qspiboot_swap.bin 文件是什么? 您可以使用脚本“ byte_swap.tcl”将 rcw.bin 交换为rcw_qspiboot_swap.bin。 tclsh ./byte_swap.tcl ./ .bin ./ .bin 8 当我编译 u-boot 时,我只能得到 u-boot.bin。 您可以使用 QorIQ 配置套件“预引导加载程序工具”为您的定制板生成特定的 RCW 二进制文件。 该文件对于启动主板是否必要? 是的,这是一个预引导加载程序代码,您需要小心修改它。 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, 我正在从 QSPI 闪存启动定制的 LS1021A 板,我有一个问题: rcw_qspiboot_swap.bin 文件是什么? 当我编译 u-boot 时,我只能得到 u-boot.bin。 该文件对于启动主板是否必要? 谢谢!
View full article
使用 mpc5744p 在 s32ds v2.1 ide 中编辑和自动生成链接器文件数据 Hi, 我正在使用带有 e200z4 处理器的 MPC5744P。我正在使用带有集成 NXP gcc 编译器 v4.9 的 S32DS IDE 版本 2.1。当我创建示例项目时,链接器文件会自动生成在文件夹“Project_Settings -> Linker_Files ->...”下。 要更改链接器文件数据,我可以在某些 GUI 选项(处理器专家等)中修改它并重新生成它吗?还是只能在生成的链接器文件上直接修改它? 谢谢 MPC574xP DEVKIT-MPC5744P S32DS-PA  回复:使用 mpc5744p 在 s32ds v2.1 ide 中编辑和自动生成链接器文件数据 Hi, PE 中没有选项,您应该直接修改生成的链接器文件。 BR, Petr
View full article
MCUXpresso IDE への MCUXpresso SDK のインポート <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> MCUXpresso SDK パッケージは .zip としてダウンロードされますファイル。IAR や Keil などの 3 rd パーティ IDE を使用している場合、プロジェクト ファイルにアクセスするにはパッケージを解凍する必要があります。また、解凍した SDK フォルダーを MCUXpresso 構成ツールで使用できる必要があります。これが、ダウンロードしたSDKパッケージを解凍することがデフォルトの推奨事項である理由です。   ただし、MCUXpresso IDE を使用している場合は、圧縮された SDK または解凍された SDK を MCUXpresso IDE にインポートできます。圧縮されたSDKはディスク容量を節約し、解凍されたSDKフォルダよりも迅速にIDEにインポートできます。MCUXpresso の IDE パーツのサポートは、MCUXpresso SDK を IDE にインポートすることで拡張されるため、新しいデバイスを追加する必要がある場合に時間を節約できます。また、SDKパッケージはMCUXpressoをサポートしている必要があるため、SDKビルダーで最近(3月24日以降)作成され、パッケージでMCUXpressoが明示的にサポートされている必要があります。そうしないと、インポートしようとするとエラーが発生します。 MCUXpresso SDK の zip パッケージまたはフォルダを IDE にドラッグ アンド ドロップすると、その zip/フォルダのコピーが作成され、C:\Users\ \mcuxpresso\SDKPackages ディレクトリに配置されます。したがって、ダウンロードした元のコピーを削除して、ディスクスペースを節約できます。     インポートされた SDK が zip 圧縮されている場合、サンプル・プロジェクトを作成またはインポートすると、SDK ソース・ファイルは常にワークスペースにコピーされます。インポートされた SDK が解凍された場合は、SDK ソース ファイルをワークスペースにコピーするか (デフォルト)、SDK ファイルをリンクされた参照として直接参照するかを選択できます。 SDK を zip ファイルとしてインポートした場合は、後で MCUXpresso IDE 内から解凍できます。この解凍は最適化されているため、WinZipなどのプログラムを使用して解凍するよりもはるかに高速です。MCUXpresso IDE 内で解凍すると、MCUXpresso SDKPackages フォルダーにあった zip ファイルは、解凍が完了するとハード ドライブから自動的に削除されます。その後、MCUXpresso Config ツールを使用するときに、この解凍されたフォルダをその SDK の場所に使用できます。       また、SDK パッケージ (zip 形式または解凍済み) を既定の SDKPackages ディレクトリ (C:\Users\ \mcuxpresso\SDKPackage) に配置し、MCUXpresso IDE を再起動して、MCUXpresso SDK を追加することもできます。   最後に、Window -> Preferences -> MCUXpresso IDE -> SDK Options に移動して、MCUXpresso IDE が SDK ファイル (zip 圧縮または解凍済みの両方) を検索する追加のディレクトリを指定することもできます。これは、SDK のリポジトリをハード ドライブの特別な場所に保持する場合に便利です。ただし、デフォルトの場所の外部に保存されているSDKの場合、IDE内では「SDKの削除」機能は無効になっており、追加の検索パスはワークスペースごとにのみ保存されるため、別のワークスペースを選択した場合、パスを再度追加するまで新しいSDKフォルダについて認識されません。同じデバイスに対して異なる場所にある複数の SDK が見つかった場合、IDE はリスト上の優先順位で使用するパッケージを選択します (上位が優先されます)。   プリインストール部品のサポートとSDKのインポートの詳細については、MCUXpresso IDEユーザーズガイドのセクション4と 、この有益なトレーニングビデオを参照してください。
View full article
S32k342 使用 Pit Ip 跟踪毫秒。 这更像是一个 C 语言问题,但我试图模拟 arduino millis() 命令的功能,该命令以毫秒为单位返回程序运行的时间。我想做到这一点,我需要使用 PIT_IP 每毫秒增加一个全局变量,但我遇到的问题是,对于一个简单的延迟函数,我调用一个函数来返回值来设置起点,就像我使用 OsIf_GetCounter 一样,当计时器更新时,该值将更新,而不是保持计时器的当前值。 因此,我想要制作的延迟函数不能像我想要在类似函数 OsIf_GetCounter 中使用当前值作为时间戳的其他函数那样工作。 pb632146_0-1737692102722.png 中断有效,我只是不知道如何断开变量值与全局的直接引用。 pb632146_1-1737692160853.png pb632146_2-1737692167414.png 还有其他办法吗?我想避免使用 OsIf_GetCounter,因为它在实际时钟速度下仅使用 32 位,这会经常溢出,不符合我的需要。 回复:S32k342 使用 Pit Ip 跟踪毫秒。 将 PIT 计时器作为延迟功能打开和关闭很有趣,我会在将来记住它。 奇怪的是,这些问题似乎是调试器/编译器优化的结果,因为问题会从在全局更新时更新 startTime 变量变为根本不更新全局变量,并且中断可能不会触发。 但最终目标是使用计数器进行时间戳来跟踪开启/关闭时间而不是延迟,并且它在这种情况下似乎可以正常工作。 回复:S32k342 使用 Pit Ip 跟踪毫秒。 Hi @pb632146. 为了更有效地帮助您,您能否澄清一下您需要完成的具体功能?您是在寻找使用 PIT 的延迟函数,还是试图测量执行时间? 如果需要使用PIT实现阻塞延迟,我建议遵循下图所示的结构。经过 1 秒延迟测试,其工作正常: RomanVR_0-1738014764334.png PIT 配置为每毫秒中断一次,以更新“计数器”变量。PitDelay 函数启动计时器并不断检查“计数器”是否达到延迟值。一旦发生这种情况,变量就会重新启动,并且 PIT 就会停止。 如果需要测量执行时间,则可以在每次 PIT 进入中断时更新计数器变量。这将对程序的运行时间提供准确的估计。 如果这有帮助,请告诉我。 -RomanVR。
View full article
启用联发科 USB Wifi Dongle 大家好, 我正在尝试启用联发科 USB WiFi 加密狗(联发科 mt7921au),并在defconfig中启用了以下内容: CONFIG_WLAN=y CONFIG_WLAN_VENDOR_MEDIATEK=y CONFIG_MT76_CORE=y CONFIG_MT7921U=y CONFIG_MT7921_COMMON=y 当我插入 USB 加密狗并运行lsusb时,我看到以下内容: root@localhost:~# lsusb 总线 001 设备 002:ID 0e8d:7961 MediaTek Inc. Wireless_Device 总线 001 设备 001:ID 1d6b:0002 Linux Foundation 2.0 根集线器 但是,我在ip a或nmcli中没有看到任何 WiFi 接口。 有人知道我可能遗漏了什么吗?任何帮助都将不胜感激。 谢谢你! i.MX 8 系列 | i.MX 8QuadMax (8QM) | 8QuadPlus Yocto Project 回复:启用联发科 USB Wifi 加密狗 Hi @pilotnite! 您可以参考我们的 Linux 用户指南: https://www.nxp.com/docs/en/user-guide/IMX_LINUX_USERS_GUIDE.pdf https://www.nxp.com/design/design-center/software/embedded-software/i-mx-software/embedded-linux-for-i-mx-applications-processors:IMXLINUX 无线驱动支持wpa_supplicant,这是一个WEP/WPA/WPA2/WPA3加密认证工具。 • Wi-Fi 驱动:支持基于 NXP 88W8987 的 SDIO 接口模块、基于 NXP 88W9098 的 PCIe 和 SDIO 接口模块、基于 NXP 88W8997 的 PCIe 和 SDIO 接口模块、基于 NXP IW416 的 SDIO 接口模块、基于 NXP 88W8801 的 SDIO 接口模块、基于 NXP IW612 的 SDIO 接口模块。 • 固件 NXP 发布包已经包含所有 NXP、Wi-Fi/蓝牙固件。它需要接受 NXP 许可证。 要运行Wi-Fi,请先执行以下命令,然后按照以下常用命令操作: • 对于以下步骤,使用 connman 执行这些命令 # For all the Wi-Fi modules: modprobe moal mod_para=nxp/wifi_mod_para.conf $connmanctl connmanctl> enable wifi connmanctl> scan wifi connmanctl> services /* This should list of the network. For example wifi_c0e4347f5053_4a62726f_managed_psk*/ connmanctl> agent on connmanctl> connect wifi_c0e4347f5053_4a62726f_managed_psk /* Enter Passphrase */ Agent RequestInput wifi_c0e4347f5053_4a62726f_managed_psk Passphrase = [ Type=psk, Requirement=mandatory ] Passphrase? connmanctl> quit 此致! Chavira 回复:启用联发科 USB Wifi 加密狗 @Chavira  感谢您的反馈。 你能帮我解决船上 Wi-Fi 问题吗?需要什么 defconfig 和 linux-firmware(如果有)? 回复:启用联发科 USB Wifi 加密狗 Hi @pilotnite! 不幸的是我们没有在我们的主板上使用该 wifi 模块的经验。 我们建议使用安装在板上的 wifi。 此致! Chavira
View full article
第 12 节:信号量 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 该视频演示是MQX RTOS 应用程序开发基础知识培训课程的第十二部分。在本课程中,我们将向您介绍信号量。 该培训由Embedded Access Inc.创建,该公司是 Freescale 赞助的培训提供商和可靠的合作伙伴。 第 12 节课程线 实验室概要 信号量的工作原理 使用信号量的示例 二进制信号量 vs 计数信号量 当任务等待信号灯时会发生什么 发布信号量 轻量级信号量和 API 概述 功能齐全的信号量和 API 概述 信号量、事件和消息传递的比较 注意:本实验需要飞思卡尔的 TWR-SENSOR-PAK 中的温度传感器。 设置温度传感器所需的GPIO 将 I2C 代码添加到临时任务以读取温度 将读取的值转换为摄氏度 添加信号量来保护对 I2C 总线的访问 检测过热情况 显示过热情况 首先,观看第 12 节“信号量”的视频。 然后,完成下面的交互式实验室作业。 第 12 节:实验作业 简介 信号量在嵌入式系统中非常常用,在本实验中,您将发现将其添加到项目中非常简单。但是,需要注意一些情况,以确保不会意外锁定信号量。在本实验中,温度任务将得到增强,使用 I2C 总线与温度传感器通信并检索当前环境温度。这将用于检测过温情况并启动相应的响应。温度传感器模块是塔式主板传感器套件(飞思卡尔产品编号 TWR-SENSOR_PAK)的一部分。该套件不包含在 K70 塔式套件中,需要单独购买。温度传感器有几个输入,即复位线和关机线,需要注意。我们将使用 GPIO 线控制这些输入,并在启动时进行设置,以使温度传感器不会关机或复位。之后无需更改这些状态,因此我们只需进行初始设置即可。 目的 本实验的目标是通过使用信号量来保护对 I2C 总线的访问来了解信号量。您还将使用几个 GPIO,并且您将利用在实验中为第 11 节添加的 I2C 代码,因为临时任务将需要这些代码。 转让 GPIO设置 我们将从设置温度任务开始。首先要做的是设置两个 GPIO 线,用于驱动温度传感器的复位和关闭输入。使用 lwgpio_init() 函数初始化关断引脚(连接到 GPIO 端口 B,引脚 4)。这应该被配置为初始值为“高”的输出。执行相同操作以初始化复位线(连接到 GPIO 端口 B,引脚 8)。这也应该是一个初始值为“高”的输出。您可能需要回顾一下涵盖 GPIO 的第 5 节实验,以提醒自己如何执行此操作。 您还需要使用 lwgpio_set_functionity() 函数设置这两个引脚的功能。请注意,您需要为每个 LWGPIO_STRUCT 来设置功能。 使用 I2C 读取温度 在第 11 节的实验中,当首次添加对 I2C 接口的访问时,只有 Accel Task 正在访问总线,因此在此任务中声明了该总线的句柄。现在有多个任务将使用 I2C 总线,因此此声明需要是外部的。从 Accel Task 中删除此声明并将其作为 extern 添加到 main.h 中,如下所示: 外部 MQX_FILE * i2c; 然而,这个句柄仍然需要在 main.c 中声明将‘MQX_FILE * i2c’声明放在任务模板列表上方。 任何任务尝试使用 I2C 通道之前都需要打开它。目前 Accel Task 使用它,并且 Temp Task 很快也将访问 I2C 总线。因此,在执行其他启动管理(例如创建消息池)时,从 Accel Task 中删除 i2c 的 fopen 并将其移动到 Health Task。 需要指示温度传感器进行转换,但在临时任务发送此消息之前,需要进行一些设置。在 Temp Task 的 while(1) 循环中,您需要与温度传感器通信以: 将 I2C 总线置于主模式 设置目标地址 向温度传感器写入一个 2 字节消息(包含 0x12、0x0,将零写入寄存器 0x12 以启动转换) 冲洗公交车 然后断言停止条件 幸运的是,我们刚刚在上一节实验室的 Accel Task 中完成了所有这些工作。从 Accel Task 复制此部分代码并将其放在 Temp Task 的 while(1) 循环顶部。温度传感器的目标地址是0x60。记得声明用于 ioctl 参数的变量、数据数组、跟踪读取的字节以及从 io_read() 函数返回的结果。 保留此代码中已有的 _time_delay() 函数,但将延迟缩短至 50 毫秒,这对于温度转换来说足够了。这就是温度传感器完成转换所需要的全部内容。 一旦温度转换完成,您现在就可以读取温度值。我们可以再次从 Accel Task 借用此代码。您需要: 将目标地址设置为0x60 将 0x02 写入 I2C 总线以表明您希望从传感器读取两个字节。 使用 IO_IOCTL_I2C_FLUSH_OUTPUT 命令通过 ioctl() 调用刷新输出缓冲区 如果在前一次写入之后收到了 ACK 位(即未设置从 ioctl 调用返回的参数),则使用 Do 循环从总线读回两个字节。 使用 ioctl 调用通过 IO_IOCTL_I2C_STOP 发出停止指令。 做出所有必要的声明。由于我们从温度传感器读取较短的消息,因此 uint8_t 的数据数组大小可以是 4 个字节。 现在需要将从 I2C 读回的数据转换为温度。声明一个 32 位 uint 来保存读取的数据,并声明另一个 32 位 uint 来保存摄氏度值。 使用以下移位和掩码将从温度传感器读取的两个字节数据组合成一个 32 位数字,然后将其转换为摄氏度,如下所示。“Tadc”是来自 ADC 的温度,“Temp”是转换为摄氏度的温度。如果您想参考,可以在温度传感器的文档中找到此信息。           Tadc = ((data[0]<<2)&0x3fc) + ((data[1]>>6)&0x03);           Temp = (Tadc*100 - 60575)/-535; 我们现在准备将读取的温度发送到健康任务。更新当前消息,以便将摄氏度的温度作为此消息的数据发送。 最后,作为管家事务,将检查 i2c 句柄是否有效的代码复制到 Accel 任务的顶部并将其放在临时任务的顶部是一个好的做法。如果 i2c 句柄无效,这应该会阻止临时任务运行。另外,请确保临时任务中的 printf 语句之后的 _task_block() 调用已被删除。 添加信号量 现在我们准备进入实验的主要部分,即使用信号量来保护对 I2C 总线的访问。在 main.c 中声明一个 LWSEM_STRUCT 类型的轻量级信号量紧接着声明 I2C 文件句柄之后。将其作为 extern 添加到 main.h 中以使编译器正常运行。 信号量需要使用_lwsem_create()函数来创建,并且由于在健康任务中打开了I2C通道,因此信号量应该创建在同一区域。使用计数 1 初始化信号量,以限制对单个任务的访问(即二进制信号量)。 现在可以使用信号量来防止同时访问总线。在访问总线的代码区域中使用 _lwsem_wait() 函数和 _lwsem_post() 函数。信号量等待应在总线上第一次 ioctl 调用之前完成,并且应在停止条件被断言之后使用 post。请注意,Accel Task 中有两个地方访问 I2C 总线,首先是在打开加速度计时,其次是在读取数据时的 while(1) 循环中。 检测过热情况 现在已设置代码,以便将温度读数发送到健康任务,但目前健康任务所做的所有响应只是打印出它收到消息的事实。为了利用收到的温度数据,需要更新健康任务,以便检测是否存在过热情况并在发生该情况时对其做出反应。同样,如果出现过热情况,健康任务应该向显示任务发送消息以通知其情况。为了方便起见,在 main.h 中的 APPLICATION_MESSAGE 数据结构中添加一个布尔值称为“OVER_TEMP”。 在健康任务的 while(1) 循环中,添加对传入消息的检查,以查看它们是否属于“TEMP_MESSAGE”类型,并检查此消息中收到的温度是否高于阈值温度 32 C。添加代码以在过热情况下向显示任务发送消息。请注意,需要在 Health Task 的顶部声明类型为 APPLICATION_MESSAGE 的新消息。创建新消息时,必须设置目标队列 ID(“->Header.TARGET_QID”)和消息类型(“->MESSAGE_TYPE”)。消息数据('->data')可以是接收到的温度,当然我们对 APPLICATION_MESSAGE 的新参数 OVER_TEMP 应该设置为 true。 指示过热状况 最后要添加的是通过打开 LED 来直观地指示过热情况。这与上一个实验室中通过盗窃任务检测到运动时所做的事情类似。在显示任务中,向处理传入消息的 switch 语句添加一个新案例来处理 HEALTH_MESSAGE。如果设置了消息中的 OVER_TEMP bool,则 LED 2 应该亮起。 请注意,while (1) 循环顶部的 msgq_receive() 函数设置了 1 秒的超时时间。如果收到消息,则对其进行处理;如果在超时之前未收到消息,则 LED 2 会切换以显示系统的总体健康状况。这将干扰我们使用 LED 2 来指示过热情况,因此应注释掉或删除此行。 您可能希望将 LED 2 添加到当显示任务接收到 SW2 消息时设置为 1(关闭)的 LED 列表中。 您现在可以编译并运行该应用程序。为了造成过热情况,您可以“小心地”使用热风枪稍微加热温度传感器。或者,您可以将代码中的阈值更改为低于环境温度的值。这样,您的系统将始终处于过热状态,但至少您可以验证您的代码是否正常运行。 需要更多帮助吗?此实验室的完整源代码可以在此处的“实验室源代码”文件夹中找到。
View full article
S32G:M 内核待机演示及如何移植到 Mcal 本文详细说明 S32G M7 内核 Standby 演示及其移植至 Autosar Mcal 演示的方法。 目录 1 参考资料说明2 2 演示创建和运行过程。2 2.1 演示检查点2 2.2 Standby 与 StandbyRAMboot 的区别 3 S32G Standby 原理及代码说明5 3.1 外设初始化函数5 3.2 standbyramc_cpy(可选)5 3.3 WKPU_set 8 3.4  standby_modechange. 13 4 VR5510 PMIC Standby 原理及代码说明15 4.1  PMIC_initConfig. 15 4.2  PMIC_standbyEntry. 17 5 定制化修改18 5.1 禁用 RTC 唤醒功能18 5.2 启用 CAN1_RX 唤醒功能19 5.3 仅支持完整启动 21 5.4 打开与DDR相关的电源21 5.5 将调试串口修改为 UART124 5.6 修改设备驱动时钟26 5.7 关闭其他非主核30 6 构建新 MCAL 演示34 6.1 修改 UART 驱动程序 35 6.2 实现时钟关闭代码36 6.3 配置电源模式切换驱动程序 37 6.4 配置唤醒源42 6.5 添加 PMIC 驱动 51 6.6 主函数调用流程59 6.7 测试 61 6.8 后续开发计划62 本文说明S32G M7核Standby demo 详细情况及定制,以及如何新建一个mcal demo 录 1    参考资料说明... 2 2    Demo创建运行过程... 2 2.1  创建运行... 2 2.2  Standby和StandbyRAMboot的区别... 4 3    S32G Standby原理与代码说明... 5 3.1  外设初始化函数... 5 3.2  standbyramc_cpy(可选) 5 3.3 WKPU_set 8 3.4  standby_modechange. 13 4    VR5510 PMIC Standby原理与代码说明... 14 4.1  PMIC_initConfig. 14 4.2  PMIC_standbyEntry. 16 5    定制修改... 17 5.1  关闭RTC唤醒功能... 17 5.2  打开CAN1_RX唤醒功能... 19 5.3 只支持 full boot 20 5.4  打开DDR相关电源... 21 5.5  修改调试串口为UART1. 23 5.6  修改设备驱动时钟... 25 5.7  事先关掉所有其它的非主核... 29 6    修改为MCAL Demo. 33 6.1  修改UART驱动... 34 6.2  实现时钟关闭代码... 35 6.3  配置电源模式切换驱动... 36 6.4  配置唤醒源... 41 6.5  加入PMIC驱动... 50 6.6  主函数逻辑实现... 58 6.7  运行测试... 60 6.8  未来开发计划... 61 附件包含中英文文档、S32DS 工程代码(2 个压缩包,已移除 .7z 后缀)及 Mcal 代码。 汽车电子 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 Hi, 我需要将唤醒源引脚从 LLCE_CAN0_RXD 更改为 LLCE_CAN14_RXD(基于 S32G_VNP_RDB2)。已按照 6.4 章节指导通过 EB 工具修改端口配置。 将新生成的 standbyblob.bin 烧录至开发板后上电,唤醒源仍为 LLCE_CAN0_RXD。触碰 LLCE_CAN14_RXD 引脚接地时无任何变化。 请告知还需进行哪些修改才能更改唤醒引脚。 谢谢您, LIU 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 我不太确定您所说的“硬编码的工程”是什么意思 我希望能获得 S32 Design Studio 工程,这样我就可以对其进行修改和构建。 据我理解,这在第 2.1 章中有描述,但如前所述,我找不到备用演示项目,也找不到......UG.pdf jochengerster_0-1688623168376.png 附言:我是FAE,但不确定“窗口FAE”具体指什么…… 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 您的意思是您需要 S32DS 硬编码项目吗?如果您使用 mcal,建议您使用附件中的 mcal 演示。 如果您需要 S32DS 版本,请联系您的 NXP Windows FAE 以获取它。 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 Hi 我在哪里可以找到您在此提到的、需要我导入的 S32G M7 核心待机演示程序 将项目导入 S32DS:打开 S32DS 3.4.3 + RTD3.0.2,依次选择“文件” → “导入” → “将现有项目导入工作区” / “下一步” → 浏览到 …\S32G274Astandbymode /完成。 jochengerster_0-1688570437733.png 谢谢 Jochen 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 也许您可以用我的项目再测试一下。 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 Hi John, 我们按照文档实现了 M7 待机模式,但遇到了模式配置问题。 EB_SOC_STNADBY.jpg 如果我们将操作模式从RUN更改为SOC_STANDBY,图形用户界面(GUI)将显示错误并无法成功构建。 我是不是漏掉了一些流程? 谢谢。 Allen 回复:S32G:M 内核 Standby 演示及移植至 Mcal 的方法 Hi, 在 RDB2 开发板上进行唤醒时序测量(可通过 |A1-A2| 时序标记对读取持续时间): Pink: PMIC_STBY_MODE_B 蓝色:STBY_GOOD(PMIC_VDD_OK) 绿色:CAN_RX(唤醒源,当您手动触碰地线时会看到反弹) 黄色:UART1(可视为启动)。 10.PNG 15.PNG 20.PNG 逻辑分析仪测量时的开发板配置: board_setup.jpg
View full article
MCU 可用的 iMX8M Mini 资源 尊敬的专家们: 我可以知道 iMX8M mini SoC 中的 Cortex-M4 内核有哪些可用资源吗?我指的是 DRAM 内存范围和外围设备?例如,M4 可以访问 PCI 设备吗? 此致, yf 回复:iMX8M Mini MCU 可用资源 Hello, 是的,您可以参考表7-2。CM4中断参考手册摘要: Screenshot 2025-02-20 115114.png 顺祝商祺!   回复:iMX8M Mini MCU 可用资源 @JorgeCas再次感谢您! 那么这个 CM4 可以接收来自 PCI 设备的中断吗? 顺祝商祺! yf 回复:iMX8M Mini MCU 可用资源 Hello, Cortex-M 的中断处理由嵌套矢量中断控制器 (NVIC) 完成,该控制器与处理器内核紧密集成,以实现低延迟中断处理。 顺祝商祺! 回复:iMX8M Mini MCU 可用资源 @JorgeCas非常感谢! 我在 CM4 内存映射中看到了 GIC 和 PCI。这是否意味着 CM4 也可以与 GIC 配合进行中断处理?或者 CM4 只能更改设置并且 GIC 中断适用于 CA53 核心? 此致, yf 回复:iMX8M Mini MCU 可用资源 Hello, 您可以在第 2.1.3 节中查阅参考手册的Cortex-M4内存映射。 顺祝商祺!
View full article
加密的 U-boot 示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 此示例使用 U-Boot 映像作为引导加载程序。U-Boot 通常用作 Linux 设备的引导加载程序,由 Freescale Linux BSP 提供。 可以修改 Freescale U-Boot 端口的默认内存布局以满足加密启动要求。如图 5 所示。可以看出,此布局与任何其他 U-Boot 端口类似,并在图像末尾附加了安全机制。 图 加密 u-boot 的内存布局选择 1)假设 在设计 U-Boot 映像作为加密启动解决方案时,有三个假设可以加速和简化构建过程。 。可以为多板配置构建 U-boot 映像,但出于演示目的,此示例使用 i.MX6 Solo X 。用户熟悉 U-Boot 的安全配置,并且能够正确签名和启动 U-Boot 映像。 。加密图像将由个人方构建,无需担心提供 DEK。 2)要求 构建加密图像所需的组件如下所示。请注意,这些组件中的大多数都是遵循签名 U-Boot 映像程序的产物。 a)加密模式下的代码签名工具 o 要以加密模式构建 CST,请运行以下命令 使 OSTYPE=linux ENCRYPTION=yes HAB_RELEASE=~/hab/hab_release 发布 o 注意:默认情况下 CST 不处于加密模式。在加密引导加载程序映像之前需要启用此功能。由于 CST 依赖于宿主熵,其性能可能会受到影响。有关更多详细信息,请参阅 CST 用户指南。 b) iMX6 Solo X 设备处于安全模式 c) 启用安全启动支持的 U-Boot 映像。 o 要配置 U-Boot 以支持安全启动,需要在板头文件中定义 CONFIG_SECURE_BOOT(即 include/configs/mx6q_arm2.h) d) 签名的 U-Boot 映像 o 附有 CSF 和数字签名的 U-Boot 映像。 3)实施 构建加密的 U-boot 映像有许多不同的实现方式。正确的实施取决于解决方案的要求。所提出的实现旨在提供基础原则;它可以被修改以满足不同的需求。 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Satya,Yuri 的问题有什么不清楚的地方吗?本节内容如下: #提供 DEK blob 位置以进行解密 [解密数据] 验证索引 = 0 Mac 字节 = 16 块=0x17800010 0x00000C10 0x0007AFF0“。/u-boot.imx” ..您是如何得出“Blocks”行中的 0x00000C10 这个数字的?这些说明中没有提到这一点。有这个: - 第一个参数: HAB 块地址 + 签名头 = 0x 177ff400 + 0xc10 = 0x17800010 - 第二个参数:加密偏移量 = 签名头长度 = 0xc10 但它仍然将 0xc10 显示为某种神奇数字。如何找到我的特定 u-boot 映像的精确签名头长度?为什么它不只是 0xc00?? 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,Yuri, 你的问题不清楚。请详细解释一下。 您好, Satya 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi. 您从哪里获得签名标头的长度(在上面的示例中为 0xc10)? 谢谢! 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嗨,加里, 你是对的。背后的原因是,图像头中的大小是填充图像的大小 + CSF(0x2000) 的大小。因此,图像仅在 CSF 之前加载。但是如果我们将这个尺寸值增加dek_blob尺寸,那么这里描述的示例也将起作用。当我尝试验证内核映像(zImage)时发现了这一点。当然我还没有尝试过,但我就是这么认为。 您好, Satya 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, 是的,dek blob 必须位于 CSF 部分内。 原因是 bootROM 只知道直到 CSF 部分末尾的二进制文件,并且不会加载该地址的任何进一步内容。 此致, Gary 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 伙计们, 我观察到以下情况: 加密启动仅当dek_blob是 0x2000(CSF 签名)的一部分时才有效,如SabreSD i.MX6q 板上的加密启动加载程序中所述。dek_blob 的大小仅为 0x48。因此,我用零填充 CSF 签名直到 0x1F00,并用dek_blob + 零填充剩余部分(0x100)。 如果将其添加到 0x2000(CSF 签名)之后,则不会成功。 如果成员们确认或否认这一点就太好了。 谢谢并问候, Satya 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,Satya, 怎么样了? 1.加密启动映像:由CST工具生成。我只是使用 mkimage 来检索 u-boot 的信息。据我所知,按照我列出的 8 个步骤,即可生成加密图像。 2. DEK blob:是的,由 CST 创建。之后,dek.bin 被其密钥包裹在板内。您应该准备一个支持 dek_blob 命令的 u-boot 并尝试以下操作: fatload mmc 1:1 0x10800000 dek.bin dek_blob 0x10800000 0x10801000 128 fatwrite mmc 1:1 0x10801000 dek_blob.bin 0x48 3. u-boot.imx 包括 [IVT + DCD + 填充到 0xC00] + [u-boot.bin] (头文件 + u-boot.bin) 使用上述 CSF 文件执行 CST 工具后,u-boot.bin 部分被加密。 - 第一个参数: HAB 块地址 + 签名头 = 0x 177ff400 + 0xc10 = 0x17800010 - 第二个参数:加密偏移量 = 签名头长度 = 0xc10 - 第三个参数:u-boot.bin(u-boot二进制文件)的长度 注意:u-boot.imx 由 DENX u-boot 构建,如果您使用来自其他来源的 u-boot,例如 yocto,则可能不会生成它,而是 u-boot.bin。 希望这对你有帮助。 Best, An. 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,安, 我注意到一些我不明白的事情。如果您能抽出时间向我解释清楚,那就太好了: 1.加密的 u-boot 映像:mkimage 工具是否为您生成了它?我认为不是,但是谁会这么做呢?通常会生成 u-boot.bin,并且 mkimage 实用程序使用 imxcfg.imx 来生成 u-boot.imx。请解释一下如何使用 CST 生成的密钥加密 u-boot.bin。 2. DEK blob:我认为 [安装密钥] 生成 dek.bin。我认为 dek.bin 是最后必须添加的 blob。 3. 您的 CSF 文件:您能否详细说明您在解密部分使用的块? 第一个参数:加密的 USB 从哪里开始? 第二个参数:偏移量。这个偏移量是多少? 第三个参数:加密的 u-boot 二进制文件的长度或其他内容? 期待你的答复 您好, Satya 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,安, 这个构建对我来说很有效。 谢谢! Satya 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,Satya, 以下是我为 CST 2.3.2 启用加密功能的方法: 代码签名工具链接 i.MX软件和工具|恩智浦 $ sudo apt-get install libssl-dev $ cd ~/cst-2.3.2/code/back_end/src $ gcc -o cst -I ../hdr -L ../../../linux32/lib *.c -lfrontend -lcrypto $ mv cst ../../../linux32 祝您好运! An. 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,谢, “使用文档中提到的选项编译 cst 工具”。请问我可以在哪里获得代码签名工具的源代码,以便我可以重新编译它。 您好, Satya 回复:加密U-boot示例 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello, 感谢您提供的有用指导!我尝试了如下加密启动但启动失败: 主板:MCIMX6Q-SDB 1. 启用安全功能并从此源构建 u-boot: GitHub - boundariesdevices/u-boot-imx6 at boundaries-v2016.03 2. 使用mkimage实用程序构建并获取u-boot.imx映像的信息 图像类型:Freescale IMX 启动图像 图像版本:2(兼容 i.MX53/6/7) 数据大小:516096 字节 = 504.00 kB = 0.49 MB 加载地址:177ff420 入口点:17800000 HAB块:177ff400 00000000 0007bc00 3.使用 CST 2.3.2 生成密钥和证书,融合SRK 表并关闭配置( fuse prog 0 6 0x2) 4. 创建如下u-boot.csf文件,对u-boot.imx进行签名加密,并生成dek.bin 其中 Blob 地址 = 0x1787D000,因为: Loadd 地址 + 加密的 uboot + (CSF + 填充) = 0x177ff400 + 0x7bc00 + 0x2000 5.使用CST工具签名并加密: ./cst -o u-boot_csf.bin -i u-boot.csf 6. 将 u-boot_csf.bin 填充至 0x2000 objcopy -I 二进制 -O 二进制 --pad-to=0x2000 --gap-fill=0x00 u-boot_csf.bin u-boot_csf.bin 7. 按以下顺序合并所有组件 猫u-boot_csf.bin>>u-boot.imx 猫 dek_blob.bin >> u-boot.imx 每个的长度: 加密的u-boot.imx:0x7bc00 CSF + 填充:0x2000 dek_blob: 0x48 8.将加密的u-boot.imx安装到SD卡中 sudo dd if=u-boot.imx of=/dev/sdb bs=512 seek=2 同步 将 SD 卡插入主板,重新启动,但通过 USB 转 UART 端口在控制台上没有显示任何内容。 如果我跳过加密,只需对 u-boot.imx 进行签名,它就可以正常启动。 您能指导我更多吗?此外,您帖子中的图中 DEK_BLOB 后面的填充部分有多长? 顺祝商祺! An. //////////////////////////////////////////////////////////////////////////////// u-boot.csf //////////////////////////////////////////////////////////////////////////////// [页眉] 版本 = 4.1 哈希算法 = SHA256 引擎配置 = 0 证书格式 = X509 签名格式 = CMS 引擎=CAAM [安装 SRK] 文件 = “../crts/SRK_1_2_3_4_table.bin” # 待安装的SRK表中密钥位置的索引 源索引 = 0 [安装CSFK] # 用于验证 CSF 数据的密钥 文件 = “../crts/CSF1_1_sha256_4096_65537_v3_usr_crt.pem” [验证 CSF] [开锁] 引擎=CAAM 功能=RNG [安装密钥] # 用于验证要安装的密钥的密钥槽索引 验证索引 = 0 # 安装密钥 目标指数 = 2 文件 = “../crts/IMG1_1_sha256_4096_65537_v3_usr_crt.pem” [验证数据] # 用于验证图像数据的密钥槽索引 验证指数 = 2 # 地址偏移量长度数据文件路径 块 = 0x177ff400 0x00000000 0x00000C10 “./u-boot.imx” #加密启动映像并创建DEK [安装密钥] 验证索引 = 0 目标索引 = 0 Key = "./dek.bin" 密钥长度 = 128 Blob地址 = 0x1787D000 #提供 DEK blob 位置以进行解密 [解密数据] 验证索引 = 0 Mac 字节 = 16 块=0x17800010 0x00000C10 0x0007AFF0“。/u-boot.imx”
View full article
FreeMASTER 3.0 - 安装指南 本文将引导您完成 FreeMASTER 3.0 的安装流程。您可以从FreeMASTER 下载页面获取安装包。 数据包内容 根据您的目标操作系统平台,您可以选择以下选项之一: Windows软件包包含 FreeMASTER 桌面应用程序、FreeMASTER Lite 服务(均为 32 位版本)及相关文档。该软件包是独立的,无需任何先决条件,可直接安装在干净的机器上。 Linux软件包仅包含 FreeMASTER Lite 服务的 64 位版本。下载安装文件后,请确保为其授予执行权限。然后在终端中以可执行文件的形式运行该文件: sudo chmod +x FreeMASTER3.0.bin ./FreeMASTER3.0.bin            安装 在安装过程中,您会看到一个组件选择窗口(在 Linux 上只有一个选项——FreeMASTER Lite)😞   FreeMASTER Lite 需要一个激活码,您可以免费获取,具体方法是点击链接,该链接也在窗口底部提供(见上文)。 一旦您访问该链接,还会收到一封包含激活码的电子邮件。这可能需要一些时间,因此您可以使用浏览器选项,该选项会引导您进入产品页面。 激活码位于License Keys选项卡内。在安装组件的过程中,系统会要求您提供密钥。   输入激活信息后,安装过程将继续进行。 现在,FreeMASTER 3.0 已成功安装到您的计算机上,安装位置为您所选择的目录(如上文所示,最终安装窗口也会显示该路径)。 您可以通过创建的快捷方式或直接运行安装文件夹中的可执行文件来启动FreeMASTER和FreeMASTER Lite: FreeMASTER - FreeMASTER 3.0\FreeMASTER\pcmaster.exe 如需获取更多信息,您可以通过快捷方式访问《用户指南》,或直接打开 FreeMASTER 3.0\FreeMASTER\doc\pcm_um.pdf 文件查看 FreeMASTER Lite - FreeMASTER 3.0\FreeMASTER Lite\node.exe 运行该可执行文件后,系统会自动在默认网页浏览器中打开用户指南(若未自动打开,请导航至http://localhost:8090/)。您无需运行工具,也可通过打开FreeMASTER 3.0\FreeMASTER Lite\html\index.html文件来访问用户指南。 请尽情使用! 回复:FreeMASTER 3.0 - 安装指南 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi yangyangzhang, 在排查此问题前,请注意,只有 FreeMASTER Lite 需要激活。您可以从使用 FreeMASTER(主工具)开始,在组件选择界面取消选中第二个选项(参考上文第一张图片)。这样,您就可以跳过许可证验证流程。 故障排除 在大多数情况下,此类问题与用户权限或群组策略有关。请您确认在尝试安装 FreeMASTER 的电脑上是否拥有管理员权限。 如果是这样,您能否检查以下项目的系统服务:FlexNet Licensing Service(它应该已启动并正在运行) 另外,还请提供您的安装日志,其默认位置为 C😕NXP\FreeMASTER 3.0\_FreeMASTER_installation\Logs。 此致敬礼, Iulian 回复:FreeMASTER 3.0 - 安装指南 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 尊敬的 Lulian: 在尝试安装版本 3.0.1 时,我收到了以下错误信息。您能帮我这个忙吗?谢谢您 顺祝商祺!
View full article
MagniV和S12(X)应用笔记列表 AN12086 S12Z 简单串行引导加载程序 AN12086 SW     AN5330 迁移指南适用于 S12ZVM 设备 AN5330       AN5327 三相无传感器单旁路电流传感 PMSM 电机控制应用(带有 MagniV MC9S12ZVM) AN5327       AN5264 模拟 I2C 主模式 AN5264 SW     AN5207 S12ZVM 微控制器硬件设计指南 AN5207       AN5190 S12ZVM 衍生产品配置 PMF 模块 AN5190 SW     AN5168 在 S12ZVM 中使用 ADC 模块 AN5168 SW     AN5135 三相无传感器 PMSM 电机控制套件 (带有 MagniV MC9S12ZVM) AN5135       AN5122 使用飞思卡尔的 LIN 驱动程序与 MagniV 系列 AN5122 SW     AN5084 S12ZVL 微控制器硬件设计指南 AN5084       AN5082 MagniV 在 24V 应用中的应用 AN5082       AN4975 在 MagniV 系列中使用 MSCAN AN4975 SW     AN4912 利用 MCAT 工具调试三相 PMSM 无传感器控制应用 AN4912       AN4867 S12ZVC硬件设计指南 AN4867       AN4852 在 S12ZVC 设备中使用 SENT 发射模块 AN4852 SW     AN4842 支持 LIN 的 S12ZVL RGB LED 照明应用 AN4842 SW     AN4841 支持 LIN 的 S12ZVL 超声波距离测量 AN4841 SW     AN4731 理解 Freescale 汽车微控制器上的注入电流 AN4731       AN4723 S12Z MagniV 引导加载程序 AN4723 SW     AN4722 S12ZVH系列上的实时计数器(RTC) AN4722       AN4721 S12ZVH:硬件设计指南 AN4721       AN4718 采用 S12ZVM 的三相 BLDC 霍尔传感器应用 AN4718 SW     AN4704 带 S12 MagniV MC9S12ZVM 的三相无传感器 BLDC 电机控制套件 AN4704       AN4680 PMSM 电气参数测量 AN4680       AN4643 S12VR - 硬件设计指南 AN4643       AN4642 三相 PMSM 的电机控制应用调试 (MCAT) 工具 AN4642       AN4618 基于 HVAC 平台、采用 S12G240 的无传感器 BLDC 电机控制 AN4618       AN4617 使用 HVAC 平台进行 HMI 设计 AN4617       基于 HVAC 平台的 AN4616 翼片电机控制 AN4616       AN4558 三相无传感器 BLDC 电机控制开发套件(带有 MC9S12G128 MCU) AN4558 SW     AN4540 MC9S12VR 和 MM912_634 的比较 AN4540       AN4506 CodeWarrior for MCU 中的软件分析 AN4506       AN4505 安全注意事项 S12G系列 AN4505       AN4483 S12P 系列的仿真 EEPROM 例程 AN4483 SW     AN4455 MC9S12G128_A240 演示实验室培训 AN4455 SW     AN4448 MC9S12VR系列演示实验室培训 AN4448 SW     AN4418 MC9S12G64 演示实验室培训 AN4418 SW     AN4388 四方扁平封装 (QFP) AN4388       AN4364 血糖仪基础知识与设计 AN4364 SW     AN4320 使用 MC9S12GN32 的 16位塔式开发板简介 AN4320       AN4303 使用 MC9S12GN32 MCU 进行灯光控制和诊断 AN4303 SW     AN4302 S12G 系列 EEPROM 简介 AN4302 SW     AN4283 从 S12 (XEXSP) 和 S08 向 S12G 微控制器迁移软件应用 AN4283       AN4268 三相无传感器 BLDC 电机控制套件(带有 Qorivva MPC5604P) AN4268       AN4263 针对字符显示器的 eGUI (D4D) 驱动程序修改 (D4CD) AN4263 SW     AN4258 基于 180nm 工艺的 S12 (x) 微控制器串行引导程序 AN4258 SW     AN4236 MC9S12XHY系列演示实验室培训 AN4236 SW     AN4143 从 16 位 S12XE 向 32 位 MPC5604B 系列微控制器迁移 AN4143       AN4058 采用 9S08MP 的带霍尔效应传感器的 BLDC 电机控制 AN4058       AN4024 S12HY 系列高速失速检测 AN4024 SW     AN4021 MC9S12HY系列演示实验室培训 AN4021 SW     AN3961 以 AN2302 为参考的 MC9S12XS 和 MC9S12P 系列 EEPROM 仿真 AN3961 SW     AN3937 MC9S12P系列演示实验室培训 AN3937 SW     AN3936 如何在64位Windows 7 PC上安装和运行Classic CodeWarrior产品 AN3936       AN3832 采用 MC9S08AC16 的无传感器无刷直流电机控制 AN3832 SW     AN3784 理解 S12 (X) 架构中的存储器方案 AN3784       AN3743 仿真 EEPROM 快速入门指南 AN3743       AN3624 S12X 温度传感器 AN3624       AN3622 S12XS CRG 模块与 S12P CPMU 模块的比较 AN3622       AN3613 使用 MC9S12XS 系列作为 MC9S12P 系列的开发平台 AN3613       AN3589 适用于 S08-S12 微控制器的光隔离 Multilink BDM 接口 AN3589       AN3555 调查 XGATE 软件错误 AN3555       AN3510 S12HZ 和 S12XHZ 系列的兼容性 AN3510       AN3497 S12XS 系列兼容性注意事项 AN3497       AN3493 TFT显示屏 AN3493 SW     AN3490 MC9S12XE 模拟 EEPROM 概述 AN3490       AN3469 S12 和 S12XE 系列的兼容性 AN3469       AN3458 调试 XGATE 代码 AN3458       AN3419 S12XE 的系统完整性技术 AN3419       AN3391 用于 AN2546(S12XE 的 CAN 引导程序)的 LFAE 引导程序示例及接口 AN3391       AN3333 实现 CAN 和 LIN 信号级网关 AN3333 SW     AN3330 步进失速检测器模块简介 AN3330 SW     AN3328 HCS12XD 系列兼容性考量 AN3328       AN3327 使用 S12XE-Family 作为 S12XS-Family 的开发平台 AN3327       AN3300 通用焊接温度工艺指南 AN3300       AN3298 焊点温度和封装峰值温度 AN3298       AN3292 XGATE库 SCI仿真 AN3292 SW     AN3291 如何在 M68HC08、HCs08 和 HCS12 微控制器上使用 IIC 模块 AN3291       AN3289 S12X 系列的低功耗技术 AN3289       HCS12 微控制器系列的 AN3275 S12 全访问引导程序 AN3275 SW     AN3262 HCS12X D 系列硬件设计 AN3262       AN3257 采用 MC9S08AW60 满足 IEC 60730 B 级合规性 AN3257       AN3253 XGATE库负载测量 AN3253 SW     AN3242 S12XD 和 S12XE 系列的兼容性 AN3242       AN3226 XGATE 库 ATD 平均值 AN3226 SW     AN3225 XGATE库 PWM 驱动程序 AN3225 SW     AN3224 向消费类和工业类应用开发者介绍 XGATE 模块的教程 AN3224       AN3219 XGATE 库 TN STN LCD 驱动程序 AN3219 SW     AN3208 晶体指南 AN3208       AN3153 USB - HID - ZSTAR AN3153 SW     AN3145 采用 Freescale XGATE 软件库的 XGATE 库 AN3145       AN3144 使用 XGATE 实现简单缓冲 SCI AN3144 SW     AN3034 在 HCS12 系列中使用 MSCAN AN3034 SW     适用于 HCS08 微控制器系列的 AN3031 温度传感器 AN3031 SW     AN3015 使用 XGATE 进行曼彻斯特解码 AN3015 SW     AN2974 初学者步进电机驱动快速入门 AN2974       AN2881 在 HCS12 微控制器上映射内存资源 AN2881       AN2880 利用后门访问功能解除 HCS12 微控制器的安全保护 AN2880 SW     AN2836 基于 MC9S12NE64 和 OpenTCP 的 Web 服务器开发 AN2836 SW SW2 SW3 AN2764 提升基于 MCU 的应用的瞬态抗扰度性能 AN2764       AN2759 使用 MC9S12NE64 实现以太网接口 AN2759 SW     AN2734 HCS12X 系列存储器组织 AN2734       AN2732 使用 XGATE 在 HCS12X 上实现 LIN 通信 AN2732       AN2727 HCS12 D 系列硬件设计 AN2727       AN2726 XGATE库 CAN驱动程序 AN2726 SW     AN2724 把 HCS12X PIT 用作 24 位运行计时器 AN2724       AN2720 具有最小 RAM 开销的单 FLASH 阵列 HCS12 MCU 编程工具 AN2720 SW SW2   AN2708 HCS12X 外部总线接口简介 AN2708       AN2700 基于 MC9S12NE64 和 CMX-MicroNetT TCP-IP 协议栈的基础 Web 服务器开发 AN2700 SW     AN2692 MC9S12NE64 集成以太网控制器 AN2692       AN2685 如何在 S12X 器件上配置和使用 XGATE AN2685       AN2678 使用 HCS12 NVM 标准软件驱动程序与 Cosmic 编译器 AN2678       AN2624 基于 CMX-MicroNet TCP-IP 协议栈的基础 Web 服务器开发 AN2624 SW     AN2617 HCS12 微控制器上的软件优先级中断方案 AN2617 SW     AN2615 HCS12 和 S12X 系列兼容性 AN2615       AN2612 使用 HCS12 定时器通道生成 PWM AN2612 SW     AN2597 使用 MC9S12E128 实现 IrDA 接口 AN2597 SW     AN2573 LINkits LIN 评估板 AN2573       AN2554 清除和禁用中断标志 AN2554       AN2552 在 MC9C12E128 中配置系统和外设时钟 AN2552 SW     AN2548 HCS12 MCU 串行监控程序 AN2548 SW     AN2546 HCS12 加载 RAM 并执行 Bootloader 用户指南 AN2546 SW     AN2485 HCS12 软件模板 AN2485 SW     AN2461 采用 HCS12 和 SBC 器件的低功耗管理 AN2461       AN2438 ADC 定义和规格 AN2438       AN2434 HCS12 系列 MCU 的输入输出引脚驱动器 AN2434       AN2433 5V 到 3V 的设计考量 AN2433       AN2429 与 HCS12 ATD 模块的接口 AN2429       AN2428 HCS12 ATD 模块概述 AN2428       AN2408 HCS12 外部总线设计示例 AN2408       AN2400 HCS12 NVM 指南 AN2400       AN2396 LIN 上的伺服电机控制应用 AN2396 SW     AN2342 用于 68HC9 (s) 12 和 68HC908 微控制器在线调试的光隔离电路 AN2342       AN2321 电路板级电磁兼容设计 AN2321       AN2318 HCS12 微控制器与 I2C 总线的使用 AN2318 SW     AN2304 在HCS12微控制器上实现UDP-IP(用户数据报协议)协议栈 AN2304 SW     AN2302 MC9s12C32 的 EEPROM 仿真 AN2302 SW     AN2295 适用于 M68HC08 和 HCS08 MCU 的开发者串行引导程序 AN2295       AN2287 HCS12 外部总线设计 AN2287       AN2283 可扩展控制器局域网 (MSCAN) 中断 AN2283       AN2263 PC Master 软件:创建高级控制页面 AN2263       AN2255 MSCAN 低功耗应用 AN2255       AN2250 HCS12 微控制器上的音频重放 AN2250 SW SW2 SW3 AN2221 MI Bus 软件驱动程序,适用于 MC9S12DP256 AN2221 SW     AN2216 采用 Metrowerk's CodeWarrior 进行 MC9S12DP256 软件开发 AN2216       AN2213 使用 Cosmic Software 的 M68HC12 编译器进行 MC9S12DP256 软件开发 AN2213       AN2204 MC9S12DP256 的快速 NVM 编程 AN2204 SW     AN2201 汽车应用中的低电池启动脉冲 AN2201       AN2189 HC12 D 系列上时钟生成模块的使用 AN2189       AN2153 用于重新编程 MC9S12DP256 FLASH 存储器的串行引导程序 AN2153 SW     AN2104 M68HC12 系列背景调试模式的使用 AN2104       AN2103 本地互连网络 (LIN) 演示 AN2103       AN2011 MC9S12DP256 上的 MSCAN 与 HC12 系列上的 MSCAN 比较 AN2011       AN1954 MPXY8000 系列胎压监测传感器 AN1954       AN1837 非易失性存储技术概述 AN1837       AN1798 CAN位时序要求 AN1798       AN1783 确定 MCU 振荡器启动参数 AN1783       AN1775 利用 AD 转换器扩展数字输入 AN1775       AN1771 使用 8 位 MCU 的精密正弦波音调合成 AN1771       AN1716 使用 M68HC12 索引间接寻址 AN1716       AN1705 基于微控制器的系统降噪技术 AN1705       AN1284 将 M68HC11 代码移植到 M68HC12 设备 AN1284       AN1280 使用和扩展 D-Bug12 例程 AN1280       AN1263 单芯片微控制器的系统设计与布局技巧 AN1263       AN1259 基于微 MCU 的系统中降噪的系统设计与布局技巧 AN1259       AN1058 减少微控制器应用中的 A/D 误差 AN1058       AN1051 印刷电路板应用中的传输线效应 AN1051       AN1050 HCMOS 微控制器的电磁兼容性 (EMC) 设计 AN1050       AN5389 S12Z MagniV LIN 引导加载程序 AN5389 SW     AN11967 S12ZVM 系列在 48 V 应用中 AN11967      
View full article
【RTD400 LLD】K344 センターアライメント PWM トリガー ADC BCTU 【RTD400 LLD】K344 センターアライメント PWM トリガー ADC BCTU 1. アブストラクト 少し前まで、お客様の実際のプロジェクトでは、ADC BCTUマルチチャンネルサンプリングをトリガーするために、中央にアライメントされたPWMの高レベル中心点をS32K3XXに実装する必要がありました。この機能を使用するには、EMIOS、ADC、および BCTU を使用する必要があります。当初、お客様は常にPWMの中心点でトリガーを達成することができず、トリガー位置が間違っていました。その後、K3関連モジュールの原理の説明と分析をお客様に提供した後、実際のコード構成テストのガイダンスを提供し、お客様も必要な機能を達成しました。テストの便宜上、PITおよびUARTのprintf関数もここに追加されています。したがって、ここでは、この関数の特定の状況の要約を示します。これにより、将来同様の機能要件に遭遇する他のお客様が参照を得て、迅速に構築できます。 要件は下図の通りです。アップダウンカウントモードでは、中央揃えのPWMが出力され、ADC BTCU LISTのトリガサンプリングがハイレベルの中心点で実現されます。この記事では、RTD400 LLDバージョンに基づく公式のS32K344-EVBボードでADC BTCU LISTサンプリングを達成するために、1KHZのセンターアライメントPWM、50%デューティサイクル、および高レベルセンターポイントを実装します。 kerryzhou_12-1737802508258.png 図1 2. センターアライメントPWMセンターポイントトリガーADCの原理 原理に関しては、ADCについてサスペンスはありません。ADCソフトウェアとハードウェアのトリガに関する前の記事を直接参照できます。 【RTD400 LLD】K344 ADC SW + HWトリガー これが図 2 に示す構造です。ADC を設定したら、BCTU でトリガーされた EMIOS チャネルを選択します。EMIOS の関連フラグが生成されると、BCTU がトリガーされます。ウォーターマークに達すると、すべてのLIST ADCチャネル値をバッファに保存するための通知が生成され、ADC値を印刷して簡単に表示することができます view状況に応じて。 kerryzhou_13-1737802525461.png 図2 現在の動作条件では、主に、中央に揃えられたPWMを生成する方法、高レベルの中央ポイントでフラグを生成する方法、およびこのフラグを使用してBTCUサンプリングをトリガーする方法を考慮する必要があります。 2.1 センターアライメントPWMの生成方法 まず、EMIOSのチャネルステータスと、センターアライメントPWMに対応したチャネルステータスについて見ていきましょう。 kerryzhou_14-1737802545570.png 図3 中央揃えのPWMモードはOPWMCBです。 図1に示すように、このモードのカウンタカウントモードはアップとダウンであることがわかります。OPWMCB をサポートするチャネルの種類を見てみましょう。タイプGしかないことがわかります。 kerryzhou_15-1737802657145.png 図4 では、Type Gでサポートされているチャネルは何ですか?次の図を参照してください。 kerryzhou_16-1737802660362.png 図5 謎が解けた。eMIOS の CH1-CH7 のみがセンターアライメント PWM をサポートしています。 さて、そこで新たな疑問が生じます。このモードでは、PWMハイレベルの中心点でトリガー信号を直接生成して、ADC BCTUサンプリングをトリガーできますか?答え:いいえ! その理由は図1からわかります。このPWMモードでは、アップカウントとダウンカウントの比較が完了したときに生成される2つのトリガフラグがあります。したがって、このモード・チャンネルを使用してADCサンプリングを直接トリガすると、1サイクルで2つのトリガが生成され、どちらもPWMのエッジ上にあります。 OPWMCBはPWMの中心点で直接トリガーを生成できないため、どのように実現しますか? また、専用のチャンネルを開くと、クロックソースはOPWMCBと同じですが、そのチャンネルはトリガーフラグの生成にカウントされるだけで、波形は出力されません。 2.2 PWM中心点トリガーフラグの生成方法 重要な情報:OPWMCB同時クロックソース、カウントモードのみ、またはアップおよびダウンMCBモード、1つのチャネルのみが満たされます:ADC CH0、カウンターバスタイプもcounter_bus_Bとして選択する必要があります kerryzhou_17-1737802664429.png 図6 MCB のトリガー フラグを見てみましょう。 kerryzhou_18-1737802668518.png 図7 ご覧の通り、完璧です。トリガーマークは、上向きと下向きのカウントの上部にあり、これは同じソースPWMの高レベルの中心点です。 したがって、ここでは、特定のチャネル配置は原則として決定されており、2つのチャネルがあります:MCBモードEMIOS0_CH0純粋なカウントとフラグの生成をトリガーしてADCサンプリングをトリガーします。EMIOS0_CH1-CH7はOPWMCBモードで、単純に中央揃えのPWMを出力します。 3. ソフトウェアの設定と実装 ソフトウェアはS32K3 RTD400バージョンを使用しており、他のバージョンも同様の構成になっています。 3.1 デモCTモジュールの設定 まず、K344 デモを準備し、次にピン、クロック、およびペリフェラル モジュールを構成する必要があります。以下に、設定について説明します。使用したモジュールは、2つのGPIO、ADC、BCTU、EMIOSクロック、EMIOS PWM、LPUART(ログ印刷用)、PITタイミング印刷用、Trgmuxは設定されていますが、この記事では使用していないので、それについては触れません。 3.1.1ピン構成 使用されるピンは次のとおりです。 kerryzhou_19-1737802674350.png 図8 2つのGPIOは、BCTUトリガ通知とBCTUウォーターマーク通知をそれぞれ切り替えて、波形の位置決めをテストするために使用されます。ADC1にはADC1_s10ピンを使用していますが、この記事では主にBCTUを使用してADC0を組み合わせます。ADC0 は特定の外部ピンを追加せず、内部信号を使用します。LPUARTは印刷に使用され、EMIOS0_CH1はセンターアライメントされたPWM波形を生成するために使用されます。 3.1.2クロック構成 ここで注意が必要なクロックは、ADCクロック、EMIOSクロック、UARTクロック、PITクロックです。 kerryzhou_20-1737802679200.png 図9 これらのクロックは、後で特定のタイミング期間とボーレートを設定するときに使用します。 3.1.3ペリフェラル構成 使用される周辺機器には、主に次のモジュールが含まれます。 kerryzhou_21-1737802684346.png 図10 (1)Adc_Sar_Ip ADC0モジュールの構成では、1つのトリガーの後に1つの変換を生成するというワンショットモードを使用します。このように、タイマーEMIOSチャネルを使用して、変換をトリガーするトリガー条件を生成できます。プリサンプリングは、前のチャンネルのサンプリング値の残留電荷が電流チャンネルの結果に影響を与え、ADC値の偏差を引き起こすのを防ぐために有効になっています。トリガー モードは BCTU を使用します。ADCプリスケーラ値とキャリブレーションプリスケールの設定では、RMの周波数分割要件を満たす必要があります。最終的な設定は次のとおりです。 kerryzhou_22-1737802689462.png 図11 kerryzhou_23-1737802693578.png 図12 (2)Bctu_Ip Bctu_Ipの設定では、使用する適切なEMIOSチャネルを選択する必要があります。上記の原則から、EMIOS0_CH0が使用され、次にLISTモードが採用されることがわかります。ADC0 の場合、現在 3 つの内部チャネル (BANDGAP、VREFL、VREFH) がリストに追加されています。具体的な設定は次のとおりです。 kerryzhou_24-1737802696994.png 図13 kerryzhou_25-1737802702313.png 図14 (3)Emios_Mcl_Ip ここでは、生成する必要のあるPWMサイクルを考慮する必要があります。目標は1Khzの中央に整列したPWMを生成することであるため、EMIOSモードはMCBアップダウンカウントモードです。 MCB のクロック サイクルの式は、(2 x AS1) – 2 です。 では、160MhzのEMIOS0クロックソースの場合、対応する1KHZカウンターは何ですか?最初に160除算を行って1Mhzを取得し、次に(2 x AS1)– 2に従って計算します。 (2 x AS1)– 2 = 1Mhz / 1KHZ = >AS1 = 1000/2 + 1 = 501。 設定は次のとおりです。 kerryzhou_26-1737802711894.png 図15 (3)Emios_Pwm 前の原理分析では、PWMはOPWMCBセンターアライメントモードPWMを使用し、クロックはEMIOS CH0のカウンターバスBから来て、周期は1kHz、デューティサイクルは50%であることを示しています。具体的な設定は次のとおりです。 kerryzhou_27-1737802722172.png 図16 (4)Lpuart_Uart UART6 クロック ボー レートを 115200 に設定します。 kerryzhou_28-1737802726379.png 図17 (5)ピット kerryzhou_29-1737802729584.png 図18 (6)IntCtrl_Ip 割り込みの設定は以下の通りで、実際にはコードで設定することができます。 kerryzhou_30-1737802734820.png 図19 3.2 メインコードの状況 コンフィギュレーションが完了したら、メインで次のコードを呼び出すことで、センターPWMの出力とADC BCTUのサンプリングを実現できます。 #include "Clock_Ip.h" #include "IntCtrl_Ip.h" #include "Adc_Sar_Ip.h" #include "Bctu_Ip.h" #include "Siul2_Port_Ip.h" #include "Pit_Ip.h" #include "Siul2_Dio_Ip.h" #include "Trgmux_Ip.h" #include "Lpuart_Uart_Ip.h" #include "Lpuart_Uart_Ip_Irq.h" #include "string.h" #include "stdio.h" #include "retarget.h" #include "Emios_Mcl_Ip.h" #include "Emios_Pwm_Ip.h" /* PIT instance used - 0 */ #define PIT_INST_0 0U /* PIT Channel used - 0 */ #define CH_0 0U /* PIT time-out period - equivalent to 1s */ #define PIT_PERIOD 40000000 static volatile uint8 toggleLed = 0U; #ifdef ADC_3V3_VREF_SELECTED #define ADC_BANDGAP 5980U /* Vbandgap ~ 1.2V on 14 bits resolution, 3.3V VrefH */ #else #define ADC_BANDGAP 3932U /* Vbandgap ~ 1.2V on 14 bits resolution, 5V VrefH */ #endif #define ADC_SAR_USED_CH 48U /* Internal Bandgap Channel */ #define BCTU_USED_SINGLE_TRIG_IDX 0U #define BCTU_USED_FIFO_IDX 0U #define BCTU_FIFO_WATERMARK 3U #define ADC_TOLERANCE(x,y) (((x > y) ? (x - y) : (y - x)) > 200U) /* Check that the data is within tolerated range */ #define LED_Q172_PIN 13u #define LED_Q172_PORT PTA_H_HALF #define GPIO_PTA2_PIN 2u #define GPIO_PTA2_PORT PTA_L_HALF #define EMIOS_INST0 0U volatile int exit_code = 0; volatile boolean notif_triggered = FALSE; volatile boolean notif_triggered1 = FALSE; volatile uint16 data; volatile uint16 data1; volatile uint16 data_bctu[3]; #define UART_LPUART_INTERNAL_CHANNEL 6 #define WELCOME_MSG_1 "Hello, This message is sent via Uart!\r\n" volatile Lpuart_Uart_Ip_StatusType lpuartStatus = LPUART_UART_IP_STATUS_ERROR; uint32 remainingBytes; uint32 T_timeout = 0xFFFFFF; uint8* pBuffer; extern void Adc_Sar_0_Isr(void); extern void Bctu_0_Isr(void); extern void Adc_Sar_1_Isr(void); void AdcEndOfChainNotif(void) { notif_triggered = TRUE; data = Adc_Sar_Ip_GetConvData(ADCHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, ADC_SAR_USED_CH); /* Checks the measured ADC data conversion */ } void AdcEndOfChainNotif1(void) { notif_triggered1 = TRUE; data1 = Adc_Sar_Ip_GetConvData(ADCHWUNIT_1_BOARD_INITPERIPHERALS_INSTANCE, 34); /* Checks the measured ADC data conversion */ } void Pit0ch0Notification(void) { toggleLed = 1U; } void BctuWatermarkNotif(void) { uint8 idx; Siul2_Dio_Ip_WritePin(GPIO_PTA2_PORT, GPIO_PTA2_PIN, 1U); notif_triggered = TRUE; for (idx = 0u; idx < BCTU_FIFO_WATERMARK; idx++) { data_bctu[idx] = Bctu_Ip_GetFifoData(BCTUHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, BCTU_USED_FIFO_IDX); } Siul2_Dio_Ip_WritePin(GPIO_PTA2_PORT, GPIO_PTA2_PIN, 0U); } void BcutTriggerNotif() { Siul2_Dio_Ip_WritePin(LED_Q172_PORT, LED_Q172_PIN, 1U); Siul2_Dio_Ip_WritePin(LED_Q172_PORT, LED_Q172_PIN, 0U); } void TestDelay(uint32 delay); void TestDelay(uint32 delay) { static volatile uint32 DelayTimer = 0; while(DelayTimer < delay) { DelayTimer++; } DelayTimer = 0; } int main(void) { StatusType status; uint8 Index; Clock_Ip_StatusType clockStatus; /* Initialize and configure drivers */ clockStatus = Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); while (clockStatus != CLOCK_IP_SUCCESS) { clockStatus = Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); } Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_InitConfigArr_PortContainer_0_BOARD_InitPeripherals); #if 1 Bctu_Ip_Init(BCTUHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, &BctuHwUnit_0_BOARD_INITPERIPHERALS); status = (StatusType) Adc_Sar_Ip_Init(ADCHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, &AdcHwUnit_0_BOARD_InitPeripherals); while (status != E_OK); status = (StatusType) Adc_Sar_Ip_Init(ADCHWUNIT_1_BOARD_INITPERIPHERALS_INSTANCE, &AdcHwUnit_1_BOARD_InitPeripherals); while (status != E_OK); /* set PIT 0 interrupt */ IntCtrl_Ip_Init(&IntCtrlConfig_0); IntCtrl_Ip_EnableIrq(PIT0_IRQn); /* Install and enable interrupt handlers */ IntCtrl_Ip_InstallHandler(ADC0_IRQn, Adc_Sar_0_Isr, NULL_PTR); IntCtrl_Ip_InstallHandler(BCTU_IRQn, Bctu_0_Isr, NULL_PTR); IntCtrl_Ip_InstallHandler(ADC1_IRQn, Adc_Sar_1_Isr, NULL_PTR); IntCtrl_Ip_EnableIrq(ADC0_IRQn); IntCtrl_Ip_EnableIrq(BCTU_IRQn); IntCtrl_Ip_EnableIrq(ADC1_IRQn); // IntCtrl_Ip_EnableIrq(EMIOS0_5_IRQn); /* Call Calibration function multiple times, to mitigate instability of board source */ for(Index = 0; Index <= 5; Index++) { status = (StatusType) Adc_Sar_Ip_DoCalibration(ADCHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE); if(status == E_OK) { break; } } for(Index = 0; Index <= 5; Index++) { status = (StatusType) Adc_Sar_Ip_DoCalibration(ADCHWUNIT_1_BOARD_INITPERIPHERALS_INSTANCE); if(status == E_OK) { break; } } Adc_Sar_Ip_EnableNotifications(ADCHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, ADC_SAR_IP_NOTIF_FLAG_NORMAL_ENDCHAIN | ADC_SAR_IP_NOTIF_FLAG_INJECTED_ENDCHAIN); Adc_Sar_Ip_EnableNotifications(ADCHWUNIT_1_BOARD_INITPERIPHERALS_INSTANCE, ADC_SAR_IP_NOTIF_FLAG_NORMAL_ENDCHAIN | ADC_SAR_IP_NOTIF_FLAG_INJECTED_ENDCHAIN); /* Start a SW triggered normal conversion on ADC_SAR */ Adc_Sar_Ip_StartConversion(ADCHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, ADC_SAR_IP_CONV_CHAIN_NORMAL); /* Wait for the notification to be triggered and read the data */ while (notif_triggered != TRUE); notif_triggered = FALSE; /* Start a SW triggered injected conversion on ADC_SAR */ Adc_Sar_Ip_StartConversion(ADCHWUNIT_0_BOARD_INITPERIPHERALS_INSTANCE, ADC_SAR_IP_CONV_CHAIN_INJECTED); /* Wait for the notification to be triggered and read the data */ while (notif_triggered != TRUE); notif_triggered = FALSE; #endif /* Initialize PIT instance 0 - Channel 0 */ Pit_Ip_Init(PIT_INST_0, &PIT_0_InitConfig_PB_BOARD_InitPeripherals); /* Initialize channel 0 */ Pit_Ip_InitChannel(PIT_INST_0, PIT_0_CH_0); /* Enable channel interrupt PIT_0 - CH_0 */ Pit_Ip_EnableChannelInterrupt(PIT_INST_0, CH_0); /* Start channel CH_0 */ Pit_Ip_StartChannel(PIT_INST_0, CH_0, PIT_PERIOD); // Trgmux_Ip_Init(&Trgmux_Ip_xTrgmuxInitPB);// Lpuart_Uart_Ip_Init(UART_LPUART_INTERNAL_CHANNEL, &Lpuart_Uart_Ip_xHwConfigPB_6_BOARD_INITPERIPHERALS); Emios_Mcl_Ip_Init(EMIOS_INST0, &Emios_Mcl_Ip_0_Config_BOARD_INITPERIPHERALS); Emios_Pwm_Ip_InitChannel(EMIOS_PWM_IP_BOARD_INITPERIPHERALS_I0_CH1_CFG, &Emios_Pwm_Ip_BOARD_InitPeripherals_I0_Ch1); printf("S32K344 PIT TRIGMUX ADC demo RTD400.\r\n"); /* Uart_AsyncSend transmit data */ lpuartStatus = Lpuart_Uart_Ip_AsyncSend(UART_LPUART_INTERNAL_CHANNEL, (const uint8 *) WELCOME_MSG_1, strlen(WELCOME_MSG_1)); /* Check for no on-going transmission */ do { lpuartStatus = Lpuart_Uart_Ip_GetTransmitStatus(UART_LPUART_INTERNAL_CHANNEL, &remainingBytes); } while (LPUART_UART_IP_STATUS_BUSY == lpuartStatus && 0 < T_timeout--); Siul2_Dio_Ip_WritePin(GPIO_PTA2_PORT, GPIO_PTA2_PIN, 0U); while(1) { #if 1 if( toggleLed == 1) { toggleLed = 0; printf("ADC0_bandgap ch48 data_bctu = %d .\r\n", data_bctu[0]); printf("ADC0_vrefl ch54 data_bctu = %d .\r\n", data_bctu[1]); printf("ADC0_vrefh ch55 data_bctu = %d .\r\n", data_bctu[2]); } #endif } return exit_code; } 3.3 テスト結果 テスト結果には、印刷された結果がADCのサンプリング値と、PWM出力とBCTUトリガ位置の関係を示す2つの部分があります。印刷された結果は次のとおりで、3つの異なるADCチャネルの値が正しいことがわかります。 kerryzhou_31-1737802747820.png 図20 PWM波テストの結果は次のとおりです。 Ch1:PTB13 PWM Ch2:PTA29 BCTUトリガー通知 Ch3:PTA2 BCTU透かし通知 kerryzhou_33-1737802767062.png 図21 この図から、最初のBCTUトリガーがPWMハイレベルの中心点にあり、ADCサンプリングが3回トリガーされた後にBCTUウォーターマーク通知がデータを保存するために使用されていることがわかります。 PWMサイクルを表示する別の波形を次に示します。 kerryzhou_34-1737802770654.png 図22 PWM周期は1Khz、デューティサイクルは50%、BCTUの最初のトリガーはPWMハイパルスの中心にあることがわかります。 4.概要と旅行の説明 上記の構成により、最終的にRTD400 LLD方式をS32K344-EVBで使用して、1Khz、50%デューティサイクルのセンターアライメントPWMを実装し、高パルスセンターポジションがADC BCTU LISTの収集をトリガーしました。 遭遇したトリップは、私自身の構成の問題でした。最初は、ウォーターマークの設定値がLISTチャンネルの数と一致していると勘違いしていました。実際、ウォーターマーク トリガーは、ウォーターマーク値を超えた場合にのみトリガーされます。したがって、3チャネルLISTの場合、ウォーターマークは3ではなく2に構成する必要があります。3の場合、テスト波形は次のようになります。 kerryzhou_35-1737802774543.png 図23 ご覧のとおり、ウォーターマーク通知は、実際には4回トリガーされた後に生成されます。 したがって、ウォーターマークのFIFO番号を一致させることを忘れないでください。 愛着: 1. S32K344_centerPWM1k_TRIGMUX_BCTUHWLIST_EMIOS_ADC_printf_RTD400.zip センターPWMトリガーBCTU LIST 2.S32K344_CPWM1k_TRIGMUX_BCTUHWLIST_EMIOSch4_ADC_printf_RTD400.zip PWM emios0_ch4立ち下がりエッジは、コメントの状況で BCTU をトリガーします。 3.センタートリガーの別の方法:MCB_Counterアップします。 カウンターバスとしてEmios0_CH0 PWM出力としてのEMIOS0_CH1 EMIOS0_CH2をセンタートリガーとして使用しますが、PWM出力はありません、OPWMB S32K344_NCPWM1k1_TRIGMUX_BCTUHWLIST_EMIOS_ADC_printf_RTD400.zip Re: [RTD400 LLD]K344 センターアライメント PWM トリガー ADC BCTU 別のタイプセンタートリガー方法を追加すると、EMIOS CH0 MCBカウンターをカウンターバスとして使用し、EMIOS0_CH1 PWM出力として、OPWMB EMIOS_CH2トレーリングトリガーとして使用します。 kerryzhou_0-1745500703705.png テスト結果は次のとおりです。 kerryzhou_0-1745500063009.png code is: S32K344_NCPWM1k1_TRIGMUX_BCTUHWLIST_EMIOS_ADC_printf_RTD400.zip Re: [RTD400 LLD]K344 センターアライメント PWM トリガー ADC BCTU 一部のお客様は、BCTU LISTをトリガーするためにEMIOS0_CH4下降エッジを必要とし、変更は次のとおりです。 kerryzhou_1-1739182812746.png kerryzhou_2-1739182853585.png kerryzhou_3-1739182873001.png kerryzhou_0-1739182779543.png Code is:S32K344_CPWM1k_TRIGMUX_BCTUHWLIST_EMIOSch4_ADC_printf_RTD400.zip
View full article
S32K310-SRAM-OVERFLOW 问题 队员们好 本周,当我在集成开发环境中为 S32K310 项目构建外设时,它报告了 SRAM 溢出错误。 但是,我的项目是全新的,主功能是空的。根本没有应用代码,我只是为我的 MCU 配置了必要的外设。 我检查了 demo_310.map 文件,以确定内存使用过多的原因。 我发现 RTD 代码包中的一个文件占用了大量的 SRAM 空间。K310 的 SRAM 地址范围为 0×20400000 至 0×20404000,但现在的地址分配已达到 0x20404200。 仅 RTD/src/SchM_Gpt 文件就占用了超过 2KB 的空间。我知道 S32K310 MCU 的外部 SRAM 空间只有 16KB,我相信 RTD 软件包中肯定存在一些问题。 我打开了相应的文件,发现了下图所示的问题。 如图所示,在文件中,变量定义的长度设置为 4。我知道这是为多核系统准备的。但是,在我目前使用只有一个内核的 S32K310 的项目中,RTD 软件包仍然将内核数量设置为 4。这会导致变量占用的空间扩大四倍。 调整核心编号配置并重建项目后,我可以看到 RTD/src/SchM_Gpt 占用的空间从 0x860 降至 0x218,这是相当可观的。 因此,请解释为什么像 S32K310 这样的单核设备仍然将内核数设置为 4。这是错误吗? RTD Re: S32K310-SRAM-OVERFLOW Problem 你好,@Senlent、 在我看来,这个问题是 RTD 驱动程序的一个错误。因此,我就这个问题向开发团队提交了一份故障单(BENV-763)。 顺祝商祺! 丹
View full article
MIFARE DESFire EV3:CREATE_STANDARD_FILE(0xCD)总是返回 0x917E(LENGTH_ERROR)。 我在 Android 上使用 IsoDep 处理 MIFARE DESFire EV3 卡。 我想创建一个非常简单的标准数据文件,但 CREATE_STANDARD_FILE 命令(INS 0xCD)总是返回 0x91 0x7E (LENGTH_ERROR),即使在最简单的设置中也是如此。 测试场景 FORMAT_PICC (默认 PICC 主密钥,DES) (可选) SELECT_APPLICATION 000000 (PICC 主站) CREATE_STANDARD_FILE : 应用程序:默认应用程序(AID 000000) fileNo = 0x01 通信设置 = 普通 访问权限 = 0xFFFF (无需验证) 文件大小 = 32 字节 命令包装为本地 DESFire 命令: CLA = 0x90,INS = 0xCD,P1 = 0x00,P2 = 0x00,Lc = 0x07,Data = [fileNo + fileOption + accessRights(2) + fileSize(3)],无 Le。 我还尝试了以下变体: 带和不带 ISO 文件 ID 带和不带文件选项字节 在 APDU 中包含 Le 和不包含 Le 但是,在所有情况下,卡的响应都是 0x91 0x7E (LENGTH_ERROR)。 问题 是否有任何 EV3 特有的先决条件或配置位会导致 CREATE_STANDARD_FILE (0xCD) 返回 0x917E,即使根据公开文档,数据长度是正确的? 关于 CREATE_STANDARD_FILE / CreateStdDataFile 的命令或参数格式,EV2 和 EV3 之间是否有任何公开数据表未涵盖的区别? 根据所附的 APDU 日志,您是否发现有任何迹象表明该卡可能处于特殊配置中(例如,......)?阻止创建标准数据文件的工程样本、特殊固件、受限命令集)? 你能否提供一个已知很好的例子(完整的 APDU 字节,包括 CLA/INS/P1/P2/LC/Data [/Le]),说明在这个确切的卡类型上成功创建了 CREATE_STANDARD_ FILE,这样我就可以验证和调整我的实现? 附加信息 CREATE_STANDARD_FILE 上述简单测试用例中的 APDU 日志(命令和响应 卡信息(IC 类型、ATQA/SAK、GET_VERSION 输出等) 年份产量:24 周产量:29 硬件存储大小(int):4096 硬件存储大小(字节):18 硬件类型:01 最诚挚的问候 Re: MIFARE DESFire EV3: CREATE_STANDARD_FILE (0xCD) always returns 0x917E (LENGTH_ERROR) 您好,感谢您对我们的产品感兴趣。 遗憾的是,支持 MIFARE DESFire 卡需要签署 NDA。如果您是大学的一员,则有可能获得保密协议。请查看以下常见问题解答:保密协议常见问题解答|恩智浦半导体 此外,我建议使用您的大学电子邮件创建一个 NXP 账户。 对于由此可能产生的问题,我深表歉意。
View full article
ファンタム電源 FRDM i.MX 91S UART? UART が接続された FRDM i.MX 91S ボードの電力消費を測定するときに、電力メーターの読み取り値が不正確だったことに気づいた人はいますか? 二次 USB ケーブル (UART) を取り外すと電力の読み取り値が 520mW まで上がるため、USB テスターで記録した消費電力の 50mW というおそらく誤った読み取り値を取得できました。 TomasA_0-1766837050506.png ネットの「DEBUG_VBUS_5V」または「VIO」は、UART チップ以外にも電力を供給できますか? ありがとう、 トマス Re: phantom power FRDM i.MX 91S UART? 解決しました。それはグラウンドループでした。デバイスの電源と PC の電源を分離することをお勧めします。 EG デバイスは主電源から分離されているため、USB C PD 充電器 (J1) を介して電源が供給されます。UARTはノートPC/PCから
View full article
MCUXpresso IDE 25.6 烧录 MCXW716C 失败:processor is in secure mode,EraseSector timeout(6000ms) PC=0xFFFF MCUXpresso IDE 25.6 烧录 MCXW716C 失败:processor is in secure mode,EraseSector timeout(6000ms) PC=0xFFFFFFFE,ChecksumSectors Ef(38) 各位好,我在使用 MCUXpresso IDE + LinkServer 给 NXP MCXW716C(板卡:FRDM-MCXW71 / 或自研板)下载程序时遇到烧录失败问题,现象如下,想请教可能原因与恢复方法。 软硬件环境 IDE:MCUXpresso IDE 25.6.136 LinkServer:RedlinkMulti Driver v25.6 (Jun 26 2025 build 1017) 调试器:板载 MCU-LINK on-board (r0E3) CMSIS-DAP V3.117 连接方式:SWD 芯片:MCXW716CxxxA 系统:Windows [版本号可选] 工程/示例:[例如 frdmmcxw71_lpi2c_read_fxls896x_accel_value_transfer] 复现步骤 打开工程并正常编译生成 AXF/ELF 点击 Debug(或下载/烧录) LinkServer 连接正常,但在擦除/写入阶段失败 关键日志(截取)   processor is in secure mode ... Writing 23936 bytes to address 0x00000000 in Flash driver "ChecksumSectors" error 'Ef(38): Flash operation has returned an error (see log)' ... driver "EraseSector" timeout (6000 ms) PC: FFFFFFFE 现象说明 能正常识别芯片与 Flash:Flash variant 'FMU 1MB' detected 但提示 processor is in secure mode 随后在 Flash driver 操作阶段报错:ChecksumSectors Ef(38) 最终 EraseSector 擦除扇区 超时 6000ms,并且 PC 显示 0xFFFFFFFE 我想确认/请教的问题 processor is in secure mode 在 MCXW716C 上通常意味着什么?是否表示已进入安全生命周期/开启安全配置从而限制 Flash 擦写与调试? 对于这种状态,正确的恢复方式是什么?是否需要 mass erase / recover / unsecure 流程?在 MCUXpresso/LinkServer/MCU-LINK 下如何操作最规范? PC: 0xFFFFFFFE 是否可视为 flash driver 跑飞/HardFault/调试访问被安全域隔离导致的“无效 PC”? 是否有人在 LinkServer v25.6 + MCXW716C 上遇到类似 EraseSector timeout?有没有已知 bug、推荐的连接脚本/参数(如降低 SWD 频率、connect under reset、改变复位策略等)? 我可以补充的信息(如需要) [是否使用过安全示例/TrustZone/secure boot 配置:是/否/不确定] [芯片是否曾经烧录过安全相关固件/配置区:是/否/不确定] [尝试过的操作:降低 SWD 频率、换线/换口、断电重启、按住复位连接、换 LinkServer 版本等] 可提供完整 LinkServer log / 工程 / 最小复现步骤 感谢大家指点。 Board Design Re: MCUXpresso IDE 25.6 烧录 MCXW716C 失败:processor is in secure mode,EraseSector timeout(6000ms) PC=0x Hi @向明月  I think you can download the secure provision tool. MCUXpresso Secure Provisioning Tool | NXP Semiconductors And create the w71 workspace. Harry_Zhang_1-1766737112192.png And erase it. Harry_Zhang_0-1766737059406.png Hope this will help you. BR Harry
View full article
S32K312 IAR FUSAを使用してコードをビルドすることに関する質問 S32K312、S32DS3.5開発環境、RTD5.0.0を使用しています。HSEファームウェア(およびA/Bスワップ)をインストールした後、MCUを正常にデバッグして起動できるようになりました。 現在、S32DSをIAR 9.50 FUSAバージョンにエクスポートする場合、J-FLASHを使用して正常に調整できますが、MCUに書き込んで再度電源を入れると正常に動作しません。 デバッグ方法について何か提案はありますか? NXP は IAR FUSA 8.50.10 環境を提供できますか? 私は S32DS 3.5 開発環境と RTD 5.0.0 を備えた S32K312 を使用しています。HSE ファームウェア (A/B スワップ有効) をインストールした後、正常にデバッグでき、プログラミング後に MCU が正しく起動します。 現在、S32DS から IAR Embedded Workbench FUSA 9.50 にプロジェクトをエクスポートしています。J-Flash によるデバッグは正常に動作しますが、MCU をプログラミングして電源サイクルを実行すると、システムは正常に動作しなくなります。 この問題に対して推奨されるデバッグ方法があるかどうかをお尋ねしたいと思います。 さらに、NXP は IAR FUSA 8.50.10 環境を提供できますか? Re: S32K312 使用IAR build code疑問(S32K312 Question about using IAR FUSA to build code) クリスマス休暇期間中は、サポートの応答時間は通常より長くなる場合がありますのでご了承ください。場合によっては、ご要望への対応が新年以降になることもあります。ご理解のほどよろしくお願いいたします。 Re: S32K312 使用IAR build code疑問(S32K312 Question about using IAR FUSA to build code) こんにちは@Joe064 「システムが正常に機能しない」とはどういう意味ですか? MCU の現在の状態を確認するために、電源を入れ直した後にデバッガーを接続しようとしましたか?つまり、リセットなしのホットシンクです。プログラムは正確にはどこでハングするのでしょうか?それは障害ハンドラですか? MC_RGM モジュールの DES および FES レジスタも確認できますか?これらのレジスタには、破壊的リセット ソースと機能的リセット ソースのステータスが含まれます。 RAMの内容も確認してください。RAMが初期化されていることがわかりますか?つまり、有効なデータが含まれているということです。デバッガーは通常、ECC エラーのために RAM を読み取ることができない場合、「??」や「XX」などの文字を表示します。 RTD 5.0.0 は IAR コンパイラ 8.50.10 をサポートしています。 lukaszadrapa_0-1767115239034.png リンカー ファイルとスタートアップ ファイルは RTD に含まれています。 ..\RTD\Platform_TS_T40D34M50I0R0\build_files\iar\ ..\RTD\Platform_TS_T40D34M50I0R0\スタートアップ\src\m7\iar\ その他のリソースは提供しておりません。 よろしくお願いいたします。 ルーカス Re: S32K312 使用IAR build code疑問(S32K312 Question about using IAR FUSA to build code) IAR 9.50 FUSA には UART ドライバ設定の要件があり、修正後に書き込んで実行できることが分かりました。 また、IAR 8.50.10 FUSA バージョンは S32K312 デバイスをサポートしていません。
View full article
用于外部 MPC574xP 目标机和低成本 JTAG 调试器的 MPC5744P DevKit 板载调试器 我有一个基于 mpc574XP 微控制器的定制板。我能使用 MPC5744P DevKit 的板载调试器进行编程和调试吗?如果是,应如何布线和配置?是否有任何经济实惠的 JTAG 调试器可用来支持 mpc57xx 设备的编程/调试? 谢谢! Re: MPC5744P DevKit Onboard Debugger for External MPC574xP Target and Low-Cost JTAG Debuggers 你好@KP_1999 板载 OpenSDA 接口只能与 DevKit 一起使用。 很多客户都在使用 Pemicro 的这些工具: https://www.pemicro.com/products/product_viewDetails.cfm?product_id=15320180&productTab=5045 他们还拥有用于生产编程的工具: https://www.pemicro.com/products/product_viewDetails.cfm?product_id=15320169&productTab=5009 所有这些都与 S32 Design Studio 兼容。 此致, Lukas
View full article
ADC DMAの例が動作しない こんにちは、 私はMBDT v1.5を使用してS32K3X8EVB-Q289のプロジェクトを開発しています 私は DMA を備えた ADC を実装しようとしており、少し努力した後、オンラインで次のチケットを見つけました: https://community.nxp.com/t5/モデルベース設計ツールボックスMBDT/DMA有効化-in-MBDT/mp/1819674 これに基づいて、 @Irina_Costachescuが示したすべての指示を実装しようとしました。 ビルドしようとすると問題が発生します...matlab で次のエラーが発生します: simon98_0-1750087663761.png この問題を解決する方法が分かりません... 解決方法や、何か見落としている点があれば教えていただけますか? よろしくお願いします。 サイモン Re: ADC DMA Example doesn't work こんにちは、 @simon98さん、 最新のNXP モデルベース デザイン ツールボックス (S32K3 用) バージョン 1.8.0 には、ADC と DMA を使用する更新されたモデル例(adcフォルダー内のs32k344_pwm_adc_dma_s32ct)が含まれています。このモデルはアプリケーションのリファレンスとして使用できます。 お役に立てば幸いです。 ドラゴス Re: ADC DMA Example doesn't work 提供された例から構成をインポートして少し前進しましたが、まだこの問題が残っています。 https://community.nxp.com/t5/Model-Based-Design-Toolbox-MBDT/ADC-DMA-Example-doesn-t-work-with-my-S32CT-Configuration/mp/2124851#M10317 Re: ADC DMA Example doesn't work こんにちは@dragostomaさん、 MBDT バージョン 1.8 から初めて、DMA の例を使用して ADC をテストできるようになりました。 最初は、同じ問題が発生しました。コールバックは実行されましたが、FreeMASTER では変数ADC_POT0の値が更新されませんでした (バージョン 1.6 で発生したのと同じ動作)。 何度か試した後、DMA が実際に正しく動作しているかどうかを確認するために、次の MCL ブロックを追加してみました。 2.png さらに調査するために、 S32DS 3.6でプロジェクトを開きました。デバッグ中に、Simulink の MCL ブロックがコメント アウトされている場合でも、 ADC_POT0 がポテンショメータの位置に応じて変化することがわかります。しかし、FreeMASTERではADC_POT0は更新されません。 したがって、私はこの動作の原因は何なのか、そして何らかの方法で FreeMASTER の動作を修正できるかどうか疑問に思いました。 添付されているのは、これらのテストに使用したプロジェクトです。 皆様のフィードバックをお待ちしております。 ありがとう、 サイモン
View full article