Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
断点 FreeRtos 调试 你好 , 我无法启用断点,而且我看不到 FreeRtos 任务(线程)。我创建了4个任务。 可能是配置不太好。我基于Freertos s32k344示例。 也许我的调试器不支持 FreeRtos,我的调试器是: AchrafOukheir_0-1712082323905.png 回复:断点 FreeRtos 调试 Hi, 我正在使用 S32 DS V3.4,使用带有 2 个任务的免费 RTOS。当我尝试调试时,断点第一次出现,但触发“恢复”选项后,断点没有出现。 任何人都可以给我一些建议来解决这个错误。 回复:断点 FreeRtos 调试 谢谢。如果断点得到解决,FreeRTOS 调试功能将会起作用。 回复:断点 FreeRtos 调试 你好@AchrafOukheir 根据共享的图像,看起来您已选择跳过所有断点。此命令将当前视图中的所有断点标记为已跳过。标记为跳过的断点不会暂停执行。 VaneB_0-1712266326956.png B.R. VaneB
記事全体を表示
阀门控制器SoC <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 本演示采用磁体周围的磁场模拟气压和液压系统的阀门控制。   演示/产品功能 阀门控制器 SoC:MC34SB0800(八阀驱动器)和 MC34SB0410(四阀驱动器) 具有电流调节或PWM模式的集成线圈驱动器 安全关闭模式,确保安全性和稳健性 SPI 接口用于控制所有功能 故障管理(欠压/过压、过热、开路负载、过流……)   恩智浦推荐 产品 链接 塔式系统电路板 - SB0800,八通道阀门/泵控制器SoC 塔板 - SB0800,八通道阀门/泵控制器 SoC | NXP 塔式系统电路板 - SB0410,四通道阀门/泵控制器SoC 塔板 - SB0410,四阀/泵控制器 SoC | NXP 基于 MC34SB0410 或 MC34SB0800 的处理器专家阀门驱动器 SB0410 / SB0800 阀门控制器 | NXP 基于MC34SB0410/MC34SB0800的阀门驱动器 嵌入式软件:阀门驱动器 | NXP 8通道阀门控制器片上系统 https://www.nxp.com/products/power-management/smart-switches-and-drivers/low-side-switches/octal-valve-controller-system-on-chip:MC34SB0800?&fsrch=1&sr=1&pageNum=1 4通道阀门控制器片上系统 https://www.nxp.com/products/power-management/smart-switches-and-drivers/low-side-switches/quad-valve-controller-system-on-chip:MC34SB0410?&lang_cd=en           工业控制
記事全体を表示
芯片擦除后 mke18f512 锁定 我有一系列工厂新的 mke18f512 芯片,我尝试对其进行编程。 最初,它们可以连接到 J-Flash 并使用其读取: boguc_0-1715330401866.png 读取空白输出: boguc_1-1715331097038.png 但是,在擦除第一个扇区(或尝试编程)后,J-Link 无法与 MCU 建立连接: boguc_2-1715331183004.png j-flash 中的解锁 Kinetis 命令没有帮助。在新的、未锁定的设备上运行它会导致锁定。 我的问题的根源可能是什么? 回复:mke18f512 在芯片擦除后被锁定 你好,我发现了这个问题。VDDA 电源滤波电路设计不良,导致该线路出现 1V 振荡。这会导致与 MCU 的连接偶尔丢失。 boguc_0-1716274537454.png 用 0 欧姆电阻器替换 L2 可解决问题。 回复:mke18f512 在芯片擦除后被锁定 您好,通过将 11 个值写入 FSEC.SEC 寄存器,它看起来就是您的小盒设备。请查看 AN4507 https://www.nxp.com/docs/en/application-note/AN4507.pdf。第2.1.1章FSEC 寄存器和字段设置。您能直接从 MCUXpresso 或 IAR 或 Keil 擦除和编程设备吗?批量擦除解决了您的问题吗?
記事全体を表示
LPC55S16的UART配置和操作 Hi, 我正在使用 LPC55S16 评估板。在我们的设计中,有一个 UART 需要配置为半双工操作。它通常应该在 RX 模式下运行,但在接收数据时,它应该切换到 TX 模式以发回响应。稍后,在某些时候,我们需要将 UART 转换为全双工操作。这能实现吗?如果可以的话,该怎么做呢? 此致, 温斯顿 回复:LPC55S16的UART配置和操作 Hi, 后续问题,当 UART 工作在半双工模式时,实际上我需要将其设置为单线 UART - TX 和 RX 在同一条线上。当UART工作在全双工模式时,TX和RX是单独的线。针对此类设置有没有什么解决办法? 此致, 温斯顿 回复:LPC55S16的UART配置和操作 HI @yangao  是的,您可以将 LPC55S16 上的 UART 配置为半双工和全双工操作。 初始配置 UART 以接收(RX) USART_GetDefaultConfig(&config); config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; config.enableTx = false; config.enableRx = true; USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ); 将 UART 配置为全双工(启用 TX 和 RX) USART_GetDefaultConfig(&config); config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; config.enableTx = true; config.enableRx = true; USART_Init(DEMO_USART, &config, DEMO_USART_CLK_FREQ); BR 悬挂
記事全体を表示
评估基于 MYIR i.MX 8M Mini 的 SOM 和 EVM <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 这 MYC-C8MMX CPU 模块 由 MYIR 设计 ,它是基于 NXP 的 i.MX 8M Mini Quad 应用处理器 的 ARM 嵌入式系统模块 (SoM) 。MYD -C8MMX 开发板基于 MYC-C8MMX CPU 模块构建,是一套完整的评估模块,可用于原型设计和参考设计。它能够运行 Linux 和 Android 操作系统,并提供丰富的软件资源。典型应用包括工业控制、智慧城市、智能家居、人机界面 (HMI)、物联网 (IoT)等。 我们来看一段MYD-C8MMX开发板的视频介绍。 https://youtu.be/FL_CZiSMYsM MYC -C8MMX CPU 模块采用 MIMX8MM6CVTKZAA (MIMX8MM6DVTLZAA) 处理器芯片,该芯片属于 NXP i.MX 8M Mini 系列,并结合先进的 14LPC FinFET 工艺技术,可提供更快的速度和更高的能效。它拥有一个四核 Cortex-A53 处理器,运行速度高达 1.6 (1.8) GHz。此外,它还配备了一个通用的 Cortex-M4 400 MHz 核心处理器,可实现低功耗处理。以下列出了该处理器芯片的一些参数和目标应用,供参考。 Parameter Value 内核:内核数量(规范值) 4 内核类型 Arm Cortex-A53 工作频率[最大值] (MHz) 1600 (MIMX8MM6CVTKZAA)/1800 (MIMX8MM6DVTLZAA) L2 Cache (Max) (KB) 512 协处理器类型 Arm Cortex-M4F 协处理器频率(最大)(MHz) 400 支持的外部存储器 DDR3L SDRAM, DDR4 SDRAM, ECC, LPDDR4 DRAM, NAND FLASH, NOR FLASH, QSPI GPU 2D / GPU 3D 1x shader, Vivante GC320, Vivante GCNanoUltra MIMX8MM6CVTKZAA (MIMX8MM6DVTLZAA) processor 该芯片仅有MIPI-DSI和MIPI-CSI接口,没有HDMI等显示接口。它可以支持-40至105摄氏度的宽工作温度范围。MYIR 的 MYC-C8MMX CPU 模块可支持 -40 至 85 摄氏度的工作温度。 Parameter Value 硬件视频编码器/解码器 HD1080p60 H.264, HD1080p60 H.265 视频/显示功能 MIPI-CSI, MIPI-DSI PCIe PCIe 2.0 x 1 音频专用模块 8-ch PDM input, SAI USB控制器 2 串行通信 1 x PCIe 2.0、3 x SPI、4 x I²C、4 x UART 结温( ℃ ) -40 至 105 ( MIMX8MM6CVTKZAA), 0 至 95 ( MIMX8MM6DVTLZAA) MIMX8MM6CVTKZAA (MIMX8MM6DVTLZAA) processor i.MX 8M Mini 处理器的目标应用 汽车电子 智慧城市 暖通空调(HVAC) 自动车辆识别 摩托车发动机控制单元(ECU)和小型发动机控制 车队管理   库存和供应链管理 工业控制 扩音装置系统 空调(AC) 交通票据 楼宇安全   楼宇安全 智能家居 数字指示牌 音频/视频(AV)接收器 能源网关 游戏机 热量计量 家庭控制面板 住院机 家庭安保与监控 图像分析 家庭传感器 工业控制 家用能源显示器 工业HMI 大型家用电器 机器视觉检查 机器人电器 智能照明 机顶盒 智能电源插座和电灯开关 中小型电器 双向视频会议 智能音箱 视觉、高级传感和处理板 音箱   环绕声和声霸 移动设备 无线或联网音箱 线缆   可听戴设备 技术 输入设备(鼠标、笔、键盘) 语音助手 智能手表 语音控制 无线充电板   腕带   MYC -C8MMX CPU 模块是一个最小系统,带有 PMIC、CPU、RAM(DDR4)、Flash(eMMC、SPI Flash)和时钟,外加一个以太网 PHY 芯片。许多外设和 IO 信号都可以通过 两个0.8mm间距100针板对板扩展连接器。   MYC-C8MMX CPU 模块顶视图 MYC-C8MMX CPU 模块底视图 MYD-C8MMX底板主要扩展了四个部分: 1.音频接口:增加音频芯片,扩展音频输入输出接口 2.外部电源部分:增加一颗DC-DC电源芯片 3.增加一颗USB集线器芯片,从SoC USB接口扩展出4个USB,分别用于4G LTE、两个USB Host和一个扩展接口上的USB。 4.通过I2C接口扩展RTC模块 还提供了许多其他外围接口供用户扩展。 MYD-C8MMX功能框图 MYD-C8MMX接口图 在众多的接口中,背光、LVDS LCD、MIPI接口是与显示功能相关的。背光接口有6个引脚,包括两个电源信号,两个GND和两个GPIO(一个是使能端,用于控制背光电源,另一个是PWM,用于控制背光亮度。) 两个GPIO控制端分别来自i.MX 8M Mini的GPIO1_01和08。 LVDS LCD 和 MIPI 接口,共 3 个接口用于显示。但实际上i.MX 8M Mini只有一个MIPI DSI接口。另外两个LVDS接口是通过一片DS12LVDS桥接芯片从DSI转过来的,一个是单链路LVDS,一个是双链路LVDS。所以,我们只能选择MIPI DSI显示器或者LVDS显示器。另外,我们只能选择单链路 LVDS 或双链路 LVDS。 MYIR 提供可选的基于 LVDS 的 7 英寸 LCD 模块MY-LVDS070C,其中包含电容式触摸屏,可与 MYD-C8MMX 板配合使用。显示分辨率高达 1024 x 600 像素。 MY-LVDS070C 7英寸电容触摸屏液晶模块 MYD-C8MMX 有一个 2.0mm 间距 2*15 针公头扩展接头。PDM和SAI是从扩展头引出的音频相关接口。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 这 MYC-C8MMX CPU 模块 由 MYIR 设计 ,它是基于 NXP 的 i.MX 8M Mini Quad 应用处理器 的 ARM 嵌入式系统模块 (SoM) 。MYD -C8MMX 开发板基于 MYC-C8MMX CPU 模块构建,是一套完整的评估模块,可用于原型设计和参考设计。它能够运行 Linux 和 Android 操作系统,并提供丰富的软件资源。典型应用包括工业控制、智慧城市、智能家居、人机界面 (HMI)、物联网 (IoT)等。 我们来看一段MYD-C8MMX开发板的视频介绍。 https://youtu.be/FL_CZiSMYsM MYC -C8MMX CPU 模块采用 MIMX8MM6CVTKZAA (MIMX8MM6DVTLZAA) 处理器芯片,该芯片属于 NXP i.MX 8M Mini 系列,并结合先进的 14LPC FinFET 工艺技术,可提供更快的速度和更高的能效。它拥有一个四核 Cortex-A53 处理器,运行速度高达 1.6 (1.8) GHz。此外,它还配备了一个通用的 Cortex-M4 400 MHz 核心处理器,可实现低功耗处理。以下列出了该处理器芯片的一些参数和目标应用,供参考。 Parameter Value 内核:内核数量(规范值) 4 内核类型 Arm Cortex-A53 工作频率[最大值] (MHz) 1600 (MIMX8MM6CVTKZAA)/1800 (MIMX8MM6DVTLZAA) L2 Cache (Max) (KB) 512 协处理器类型 Arm Cortex-M4F 协处理器频率(最大)(MHz) 400 支持的外部存储器 DDR3L SDRAM, DDR4 SDRAM, ECC, LPDDR4 DRAM, NAND FLASH, NOR FLASH, QSPI GPU 2D / GPU 3D 1x shader, Vivante GC320, Vivante GCNanoUltra MIMX8MM6CVTKZAA (MIMX8MM6DVTLZAA) processor 该芯片仅有MIPI-DSI和MIPI-CSI接口,没有HDMI等显示接口。它可以支持-40至105摄氏度的宽工作温度范围。MYIR 的 MYC-C8MMX CPU 模块可支持 -40 至 85 摄氏度的工作温度。 Parameter Value 硬件视频编码器/解码器 HD1080p60 H.264, HD1080p60 H.265 视频/显示功能 MIPI-CSI, MIPI-DSI PCIe PCIe 2.0 x 1 音频专用模块 8-ch PDM input, SAI USB控制器 2 串行通信 1 x PCIe 2.0、3 x SPI、4 x I²C、4 x UART 结温( ℃ ) -40 至 105 ( MIMX8MM6CVTKZAA), 0 至 95 ( MIMX8MM6DVTLZAA) MIMX8MM6CVTKZAA (MIMX8MM6DVTLZAA) processor i.MX 8M Mini 处理器的目标应用 汽车电子 智慧城市 暖通空调(HVAC) 自动车辆识别 摩托车发动机控制单元(ECU)和小型发动机控制 车队管理   库存和供应链管理 工业控制 扩音装置系统 空调(AC) 交通票据 楼宇安全   楼宇安全 智能家居 数字指示牌 音频/视频(AV)接收器 能源网关 游戏机 热量计量 家庭控制面板 住院机 家庭安保与监控 图像分析 家庭传感器 工业控制 家用能源显示器 工业HMI 大型家用电器 机器视觉检查 机器人电器 智能照明 机顶盒 智能电源插座和电灯开关 中小型电器 双向视频会议 智能音箱 视觉、高级传感和处理板 音箱   环绕声和声霸 移动设备 无线或联网音箱 线缆   可听戴设备 技术 输入设备(鼠标、笔、键盘) 语音助手 智能手表 语音控制 无线充电板   腕带   MYC -C8MMX CPU 模块是一个最小系统,带有 PMIC、CPU、RAM(DDR4)、Flash(eMMC、SPI Flash)和时钟,外加一个以太网 PHY 芯片。许多外设和 IO 信号都可以通过 两个0.8mm间距100针板对板扩展连接器。   MYC-C8MMX CPU 模块顶视图 MYC-C8MMX CPU 模块底视图 MYD-C8MMX底板主要扩展了四个部分: 1.音频接口:增加音频芯片,扩展音频输入输出接口 2.外部电源部分:增加一颗DC-DC电源芯片 3.增加一颗USB集线器芯片,从SoC USB接口扩展出4个USB,分别用于4G LTE、两个USB Host和一个扩展接口上的USB。 4.通过I2C接口扩展RTC模块 还提供了许多其他外围接口供用户扩展。 MYD-C8MMX功能框图 MYD-C8MMX接口图 在众多的接口中,背光、LVDS LCD、MIPI接口是与显示功能相关的。背光接口有6个引脚,包括两个电源信号,两个GND和两个GPIO(一个是使能端,用于控制背光电源,另一个是PWM,用于控制背光亮度。) 两个GPIO控制端分别来自i.MX 8M Mini的GPIO1_01和08。 LVDS LCD 和 MIPI 接口,共 3 个接口用于显示。但实际上i.MX 8M Mini只有一个MIPI DSI接口。另外两个LVDS接口是通过一片DS12LVDS桥接芯片从DSI转过来的,一个是单链路LVDS,一个是双链路LVDS。所以,我们只能选择MIPI DSI显示器或者LVDS显示器。另外,我们只能选择单链路 LVDS 或双链路 LVDS。 MYIR 提供可选的基于 LVDS 的 7 英寸 LCD 模块MY-LVDS070C,其中包含电容式触摸屏,可与 MYD-C8MMX 板配合使用。显示分辨率高达 1024 x 600 像素。 MY-LVDS070C 7英寸电容触摸屏液晶模块 MYD-C8MMX 有一个 2.0mm 间距 2*15 针公头扩展接头。PDM和SAI是从扩展头引出的音频相关接口。
記事全体を表示
如何跟踪低级 Malloc <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 跟踪 malloc 并揭露对已释放内存的违规访问 跟踪 malloc 并揭露对已释放内存的违规访问 简介 在 Bionic 中跟踪低级 malloc/free 将内存访问暴露给释放区域 简介 Libc 有一个用于差异调试器的 malloc 调试框架。每个调试器都以库的形式存在,并在调用实际函数之前覆盖默认的 malloc/free/calloc/realloc/。 注意:本技巧假设您正在使用平台的 eng 或 userdebug 版本,而不是在生产设备上。 在 Bionic 中跟踪低级 malloc/free Bionic 有一个称为泄漏调试器的 malloc 调试器,它可以在低级别记录所有的 malloc/free。并且开发人员可以在主机上使用 ddms 通过 malloc 检查堆上的每个内存块。并且ddms支持将调用者函数地址转换为名称转换。这让我们很容易检查哪个组件、哪个功能分配了多少内存。 您可以使用调试级别 1 来打开内存跟踪: $ adb shell setprop libc.debug.malloc 1 $ adb shell 停止 $ adb shell 启动 您需要重新启动运行时,以便 zygote 和从其启动的所有进程都使用属性设置重新启动。现在所有 Dalvik 进程都已打开内存跟踪。您可以使用 DDMS 查看这些内容,但首先您需要打开其本机内存 UI: Open ~/.android/ddms.cfg 添加一行“native=true” 重新启动 DDMS 并选择一个进程后,您可以切换到新的本机分配选项卡并用分配列表填充它。这对于调试内存泄漏特别有用。 注意:要解决模块符号,请在 HOST 上导出两个环境: $ 导出 PATH=$PATH: /prebuilt/linux-x86/toolchain/arm-linux-androideabi-4.4.x/bin $ export ANDROID_PRODUCT_OUT= /out/target/product/ 将内存访问暴露给释放区域 在此版本中,Electric Fence 2.2.0 已移植到 Android。它也是一个内存调试工具,就像上面的泄漏调试器一样。 它可以帮助您检测两种常见的编程错误:超出 malloc() 内存分配边界的软件,以及触及已由 free() 释放的内存分配的软件。如果未使用正确的参数调用 malloc/free,它将转储进程的调用堆栈和 mmap。当应用程序想要访问已释放的地址时,也会引起段错误。 efence 的使用方法和上面基本相同,我们将其调试级别定义为 15: $ adb shell setprop libc.debug.malloc 15 设置此属性后,您可以运行您的应用程序,如果有任何内存泄漏,logcat 将显示信息。 示例: 访问已经释放的内存: root@android:/data # setprop libc.debug.malloc 15 I/libc(4136):setprop 使用 MALLOC_DEBUG = 1(泄漏检查器) root@android:/data # ./memtest I/libc (4138):./memtest使用 MALLOC_DEBUG = 15 (efence) F/libc(4138):致命信号 11(SIGSEGV)位于 0x4015bff4(代码=2) I/DEBUG  ( 3856): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** I/DEBUG  ( 3856): Build fingerprint: 'freescale/sabresd_6dq/sabresd_6dq:4.0.4/R13.5-rc1/eng.b03824.20120711.11133 8:eng/测试键' I/DEBUG  ( 3856): pid: 4138, tid: 4138  >>> ./memtest <<< I/DEBUG(3856):信号 11(SIGSEGV),代码 2(SEGV_ACCERR),故障地址 4015bff4 我/调试(3856):r0 00000000 r1 00000002 r2 40151c6c r3 00000000 我/调试(3856):r4 4015bff4 r5 bec75a54 r6 00000001 r7 bec75a5c I/DEBUG  ( 3856):  r8 00000000  r9 00000000  10 00000000  fp 00000000 我/调试(3856):ip 00000000 sp bec75a20 lr 40133f8f pc 0000a554 cpsr 60000010 I/DEBUG  ( 3856):  d0  203f810033915fe5  d1  0000000000000000 I/DEBUG  ( 3856):  d2  0000000000000000  d3  0000000000000000 I/DEBUG  ( 3856):  d4  0000000000000000  d5  0000000000000000 I/DEBUG  ( 3856):  d6  0000000000000000  d7  204cb48d00000000 I/DEBUG  ( 3856):  d8  0000000000000000  d9  0000000000000000 I/DEBUG  ( 3856):  d10 0000000000000000  d11 0000000000000000 I/DEBUG  ( 3856):  d12 0000000000000000  d13 0000000000000000 I/DEBUG  ( 3856):  d14 0000000000000000  d15 0000000000000000 I/DEBUG  ( 3856):  d16 41c0265a46a47ae1  d17 3f50624dd2f1a9fc 我/调试(3856):d18 41c9c8aff2800000 d19 00000000000000000 I/DEBUG  ( 3856):  d20 0000000000000000  d21 0000000000000000 I/DEBUG  ( 3856):  d22 0000000000000000  d23 0000000000000000 I/DEBUG  ( 3856):  d24 0000000000000000  d25 0000000000000000 I/DEBUG  ( 3856):  d26 0000000000000000  d27 0000000000000000 I/DEBUG  ( 3856):  d28 0000000000000000  d29 0000000000000000 I/DEBUG  ( 3856):  d30 0000000000000000  d31 0000000000000000 I/DEBUG  ( 3856):  scr 00000010 I/DEBUG  ( 3856): I/DEBUG  ( 3856):          #00  pc 0000a554  /data/memtest I/DEBUG  ( 3856):          #01  pc 00016834  /system/lib/libc.so (__libc_init) I/DEBUG  ( 3856): I/DEBUG(3856):PC 周围的代码: I/DEBUG  ( 3856): 0000a534 e3a0000a ebfff8d1 e3a01001 e1a00004  ................ I/DEBUG  ( 3856): 0000a544 e5c4100a ebfff8d9 e3560001 e3a03000  ..........V..0.. I/DEBUG  ( 3856): 0000a554 e5c43000 0a000064 e59f21f0 e2857004  .0..d....!...p.. I/DEBUG  ( 3856): 0000a564 e5954004 e08f1002 e1a00004 ebfff8c0  .@.............. I/DEBUG  ( 3856): 0000a574 e3500000 0a00003f e59fc1d4 e1a00004  ..P.?........... I/DEBUG  ( 3856): I/DEBUG(3856):lr 周围的代码: 我/调试(3856):40133f6c 68200701 0001f020 454e1046 2e00d018..h...F.NE.... 我/调试(3856):40133f7c 2102da01 1c81e000 43394338 f7eb4622 ...!....8C9C“F.. I/DEBUG  ( 3856): 40133f8c 4605ed56 d1ec2800 da062e00 0101f008  V..F.(.......... 我/调试(3856):40133f9c f06f4620 f7ea4200 4628e8d4 87f0e8bd Fo..B....(F.... I/DEBUG  ( 3856): 40133fac eff0f7e9 6003234b 30fff04f bf00e7f6  ....K#.`O..0.... I/DEBUG  ( 3856): I/DEBUG(3856):地址 4015bff4 周围的内存映射: I/DEBUG  ( 3856): 40150000-4015a000 I/DEBUG  ( 3856): 4015a000-4015d000 I/DEBUG  ( 3856): 4015d000-4015e000 I/DEBUG  ( 3856): I/DEBUG  ( 3856): stack: I/DEBUG  ( 3856):    bec759e0  00000000 I/DEBUG  ( 3856):    bec759e4  00000000 I/DEBUG  ( 3856):    bec759e8  00000000 我/调试(3856):bec759ec 4012090f /system/lib/libefence.so 我/调试(3856):bec759f0 4015a014 我/调试(3856):bec759f4 00002000 我/调试(3856):bec759f8 00000004 我/调试(3856):bec759fc 40120df1 /system/lib/libefence.so 我/调试(3856):bec75a00 4015bff4 I/DEBUG(3856):bec75a04 bec75a54 [堆栈] 我/调试(3856):bec75a08 00000001 I/DEBUG(3856):bec75a0c bec75a5c [堆栈] 我/调试(3856):bec75a10 00000000 我/调试(3856):bec75a14 400d9167 /system/lib/libc.so 我/调试(3856):bec75a18 df0027ad 我/调试(3856):bec75a1c 00000000 我/调试(3856):#00 bec75a20 00008924 /数据/内存测试 I/DEBUG(3856):bec75a24 bec75a54 [堆栈] 我/调试(3856):bec75a28 00000001 I/DEBUG(3856):bec75a2c bec75a5c [堆栈] 我/调试(3856):bec75a30 00000000 我/调试(3856):bec75a34 400d9837 /system/lib/libc.so 我/调试(3856):#01 bec75a38 00000000 我/调试(3856):bec75a3c 00000000 我/调试(3856):bec75a40 00000000 我/调试(3856):bec75a44 00000000 我/调试(3856):bec75a48 00000000 我/调试(3856):bec75a4c b00046ef /系统/箱/链接器 我/调试(3856):bec75a50 00000001 I/DEBUG(3856):bec75a54 bec75b79 [堆栈] 我/调试(3856):bec75a58 00000000 I/DEBUG(3856):bec75a5c bec75b83 [堆栈] I/DEBUG(3856):bec75a60 bec75b8f [堆栈] I/DEBUG(3856):bec75a64 bec75ba2 [堆栈] I/DEBUG(3856):bec75a68 bec75bc5 [堆栈] I/DEBUG(3856):bec75a6c bec75bde [堆栈] I/DEBUG(3856):bec75a70 bec75c08 [堆栈] I/DEBUG(3856):bec75a74 bec75c20 [堆栈] I/DEBUG(3856):bec75a78 bec75c57 [堆栈] I/DEBUG(3856):bec75a7c bec75c61 [堆栈] I/BootReceiver(3551):将 /data/tombstones/tombstone_00 复制到 DropBox(SYSTEM_TOMBSTONE) D/dalvikvm(3551):GC_CONCURRENT 释放了 398K,10% 释放了 8805K/9735K,暂停了 3ms+5ms [2] + 分段错误 ./memtest Android i.MX6_全部
記事全体を表示
NXP Connects - 圣克拉拉 - 2018年6月13-14日 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 汽车电子 NXP DroneCode 平台用于开发低成本小型自动驾驶汽车并利用高可靠性汽车零部件 车身与舒适度:探索汽车通用 MCU 产品组合 零部件选择——迈向自动驾驶汽车的关键里程碑 2018 连接:使用时间敏感网络 (TSN) 和以太网构建您的汽车网络 连接性:未来汽车网络中的 CAN——了解不同的趋势和解决方案 连接性:恩智浦汽车门禁——智能门禁路线图(NFC、BLE、UWB、SE) 驾驶员替代:AD/ADAS 概述  驾驶体验:i.MX 8/8X 多媒体——图形、显示控制器、视觉、机器学习 驾驶员更换:恩智浦自动化驾驶套件简介 驾驶体验:i.MX 8 上的 IVI/eCockpit 平台 功能安全与保障:功能安全简介 功能安全与保障:下一代功能安全架构 功能安全与保障:NXP ®汽车网络安全计划 i.MX 8/8X Overview  美光科技®技术:美光为全新 i.MX 8 微处理器系列提供内存解决方案 汽车电源管理解决方案 动力总成与车辆动力学:电气化——HV EV 电源逆变器系统和 GD3100 评测 动力传动系统和车辆动力学:电气化——用于高压电池管理系统的 MC3377x 电池控制器 动力系统和车辆动力学:恩智浦 xEV 能源管理解决方案 安全网络与网关:OTA 更新——完整系统解决方案的要求 安全网络与网关:汽车网关的兴起与发展 安全网络和网关:采用 MPC5748G MCU + LS1043A 处理器的车辆网络处理 工具与支持:BlueBox v2.0 的软件支持:ADAS 支持 人工智能、使能技术、安全与解决方案 低成本边缘计算节点中的机器学习 (ML) 和人工智能 (AI) 愿景 一秒内即可启动?了解详情 边缘计算——何时、为何以及如何 EdgeScale:云端安全边缘设备和应用程序管理解决方案 实践研讨会:从安全启动开始实现端到端安全 i.MX RT Secure Boot Lab Guide.pdf 实践研讨会:使用 MCUXpresso IDE 进行高级调试 实践研讨会:跨界 MCU 内存扩展优势:利用现场执行串行闪存进行设计 i.MX RT 就地执行串行闪存实验室指南.pdf 实践研讨会:学习如何使用 MCUXpresso 软件和工具快速启动和运行 AMF-ENT-T3024 - 实验 2 - MCUXpresso 入门.pdf 实时和非实时操作系统中的 NFC 集成——如何选择合适的 NFC 产品 传感器工具箱:传感器产品开发的完整生态系统 Toradex ® :用于实时和低功耗性能的非对称异构架构 使用 OpenWRT、Yocto、Ubuntu 还是您自己的定制 Linux ®发行版?了解恩智浦如何轻松利用多发行版方法进行软件开发 Zephyr™ OS Overview  智能机械和工业自动化 A71CH 即插即用解决方案,助力物联网安全 NFC 在工业和医疗保健领域的应用——比你想象的更多 开放工业Linux ® (OpenIL)——安全、稳健、实时的工业和自动化应用 时间敏感网络 (TSN) 和精确时间协议 (PTP):挑战、机遇和解决方案 智能网络与计算 使用 5G 固定无线的最后一英里连接——了解市场和解决方案 了解从 DPDK 到 SD-WAN 再到 VIRTIO 的网络虚拟化字母汤 智能世界解决方案和多模连接 基于 i.MX 应用处理器的 Amazon Alexa 语音服务 实践研讨会:使用基于 LPC54018 的物联网模块开发云连接终端节点 AMF-SMC-T3148 - AWS Shadow - 实验室 1-2 实践研讨会:i.MX 8M 体验——面向高性能、智能设计和先进多媒体的下一代应用处理器 实践研讨会:i.MX RT 概述和培训 如何使用 Android ® Things 构建成功的物联网设备 耗材及配件的识别与认证 i.MX 8M - 新一代高性能、智能设计和先进多媒体应用处理器 NXP无线充电介绍 米格洛® NFC 在消费电子产品和家用电器中的应用 - 2018 NTAG ®智能传感器 NXP BLE 低功耗解决方案面向消费电子、医疗、工业物联网和汽车市场 恩智浦智能家居、楼宇和照明连接解决方案 恩智浦无线充电解决方案设计——深入探究 快速物联网原型设计套件 智能放大器软件 Type-C端到端解决方案 低功耗物联网应用传感器的使用技巧 新兴趋势与创新 NXP 基于 Arm ® Cortex ® -M 内核的 MCU 产品组合 安全防篡改认证
記事全体を表示
UART3 オーバーラン エラーが RT1020 で発生 Hi, RT1020のuart3割り込みを使用していますが、rs-485通信にはuart3を使用しており、その速度は3MBpsです。 また、他の通信にはLPSPI4 CMSISドライバーハンドラーを使用しています。 uart3 個々は正常に動作しますが、spi ハンドラを追加すると、オーバーランが発生し始めます。 まだオーバーランフラグをクリアしていますが、なぜこのフラグが設定されているのですか。 また、このフラグが設定されている場合の1つのクエリは、この場合、すべてのデータを受け取るか、または失われます Uart_status register.PNG   ? i.MXRT 102倍 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  お返事ありがとうございます。 NXPのポリシーにより、ソースコードを直接お送りすることはできません。 私の確認コードはMIMXRT1020-EVKおよびMIMXER1064-EVKボードに基づいていますが、私の確認コードはカスタマイズされたボードに適しているとは思いません。 また、あなたの質問に関する重要なコードのスクリーンショットをお送りしました。 次の3つのプロジェクトを検証プロジェクトに統合します。 MIMXRT1020-EVKボードの場合: 1: evkmimxrt1020_pit 2:evkmimxrt1020_lpi2c_edma_b2b_transfer_master 3:evkmimxrt1020_lpuart_edma_transfer MIMXRT1064-EVKボードの場合: 1:evkmimxrt1064_lpi2c_edma_b2b_transfer_slave それでもI2Cプログラムが正しく機能しない場合は、I2Cプログラムに問題がある可能性があります。他の機能を無効にして、I2Cだけをテストして、正常に動作するかどうかを確認することをお勧めします。 私は現在の問題を解決したと思います。このケースを閉じるように私に言ってください。 それでも問題が解決しない場合は、新しいケースを作成してください、ありがとう。 BR mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 貴重なご提案をいただき、ありがとうございます。 あなたのコードを私と共有していただけませんか。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , edma_b2b_transfer_masterとしてMIMXRT1020-EVKボードを使用し、edma_b2b_transfer_slaveとしてMIMXRT1064-EVKボードを使用します。 mayliu1_4-1732184845065.jpeg MIMXRT1020-EVKボードをベースにプロジェクトを作成し、このボードをI2Cマスターとして設定し、UART TX、UART RXを追加し、完全に4つのDMAチャネルを使用します。MIMXRT1020-EVKプロジェクトとMIMXRT1064-EVKプロジェクトの両方のコードを一部修正します。 その結果、両方のプロジェクトが正常に実行されます。 mayliu1_5-1732184992668.png だから、あなたのコードを確認してください、私があなたに示した重要なコードは以下です。 mayliu1_0-1732184067449.png mayliu1_1-1732184078401.png mayliu1_2-1732184103892.png mayliu1_3-1732184133614.png 試してみて、このケースを閉じるように私に言ってください。 それでも疑問がある場合は、新しいケースを作成してください。 BR mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu 、 返信ありがとうございます。 freeRTOSではなく、裸のmatelを使用しています。 裸のボードプロジェクトを確認して下さい。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , あなたの返信をありがとう、私は私の側でそれをやってみます。 プロジェクトがFreeRTOSオペレーティングシステムを使用しているか、ベアボードを使用しているかを教えてください。私はあなたが行うようにプロジェクトを作成し、検証しようとします、それは非常に重要です。 どうかご辛抱ください、ありがとう。 BR mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 返信ありがとうございます。 2つのDMAを追加するだけで、これらのことをシミュレートできますか:1つはUART、もう1つはI2Cで、優先度が競合するかどうかを確認できます Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , 返信ありがとうございます。 よろしければ、現在のケースリストの項目が多すぎるため、新規にケースを作成してください。 モジュールを DMA で適切に動作させる場合、特に一部のモジュールをタイムリーに処理する必要がある場合は、使用するすべての DMA チャネルの優先順位付けを検討する必要があります。 あなたのプロジェクトとDMAの優先設定がわかりません。ですから、都合が良ければコードを送ってください。 不便な場合は、この2つの機能を検討し、パラメータを再確認することをお勧めします。 void EDMA_SetChannelPreemptionConfig(DMA_Type *base, uint32_t channel, const edma_channel_Preemption_config_t *config) NVIC_SetPriority それがあなたの助けになることを願っています。 それでもご不明な点がございましたら、お気軽にお知らせください。 BR  mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 返信ありがとうございます。 この問題を解決する方法を教えてください。 それでも、私はこのDMAの優先課題に直面しています。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , 更新していただきありがとうございます。 私はあなたの返信を再確認しました、私はあなたが正しいと思います。おそらく、I2C DMAとUART DMAの優先順位が競合しているためです。 それがあなたの助けになることを願っています。 それでもご不明な点がございましたら、お気軽にお知らせください。 よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 更新していただきありがとうございます、 私のカスタムボードRT1020はi2cマスターで、スレーブDACに接続されており、正常に動作します。 しかし、私の問題は、チャネルの優先度(EDMA_SetChannelPreemptionConfig)構成コードを追加しようとすると、コードがi2c dmaに固執することです。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , 更新していただきありがとうございます。 アプリケーションがスタックする理由は、開発ボードのI2CマスターノードをI2Cスレーブノードに接続する必要があるためです。 開発ボードで確認しましたが、I2Cスレーブノードに接続しないと、あなたと同じようにエラーが発生します。2つの開発ボードを使用する場合、1つは「lpi2c_edma_b2b_transfer_master」、もう1つは「lpi2c_edma_b2b_transfer_slave」です。2つのボードを正しく接続すると、プログラムは正常に動作します。 "lpi2c_edma_b2b_transfer_master" プロジェクトを作成でき、検証する他のコードを追加しないでください。 よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 これは「lpi2c_edma_b2b_transfer_master」であり、この名前の下に、uart、dma、spi、i2c、dmaなどのすべてのモジュールを追加しました。 優先度関連を削除したとき、アプリケーションは正常に動作します Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , この問題は、現在のケーステーマ「UART3オーバーランエラーがRT1020で発生する」とは関係ないと思います。 私はあなたと同じようにSDKデモをインポートします、私はこのデモ「lpi2c_edma_b2b_transfer_master」がスレーブとして他のボード上のlpi2cインスタンスを必要とすることを発見しました。 mayliu1_0-1731493594740.png I2Cスレーブがないため、lpi2c_master_callbackを呼び出すことができず、アプリケーションがスタックしました。 mayliu1_1-1731493614957.png BR mayliu Re:UART3オーバーランエラーがRT1020で発生 Hi @mayliu1  更新していただきありがとうございます。 I2c DMA に引っかかっています。 ここで1つの質問があります:I2C DMAとUART DMAの間で優先順位が競合していますか しかし、I2C DMAでは、優先度を設定していません。 Re:UART3オーバーランエラーがRT1020で発生 親愛なる@hanmant、 更新していただきありがとうございます。 関数を追加すると、アプリケーション全体がスタックすると言いました。 アプリケーション全体が行き詰まったときの詳細情報を教えてください。 1:アプリケーションが行き詰まった場所、どの機能か教えてください。 2:アプリケーションが動かなくなった場合は、RT1020レジスタ、障害、周辺機器のステータスを読み取り、何か異常がないか確認してください。 次の図は、問題を確認するためのデモにすぎません。 mayliu1_0-1731480630949.png それがあなたを助けることを願っています! よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu このコードが機能していないのは、この行のコードをコードに追加すると、アプリケーション全体が動かなくなったことを意味します 定数 edma_channel_Preemption_config_t Channel_preemption_config = { .enableChannelPreemption= false、 .enablePreemptAbility= trueの場合、 .channelPriority(英語)= 15ユー }; 定数 edma_channel_Preemption_config_t Channel14_preemption_config = { .enableChannelPreemption= false、 .enablePreemptAbility= trueの場合、 .channelPriority(英語)= 14U }; EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR,LPUART_TX_DMA_CHANNEL,&Channel_preemption_config); EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、&Channel14_preemption_config); 注:このuart DMAには別のi2c DMAもありますが、i2c DMAの優先度は設定していません Re:UART3オーバーランエラーがRT1020で発生 親愛なる@hanmant、 私はあなたの成功を願っています、そしてまた私は少しアドバイスがあります。 LPUART_TransferCreateHandleEDMA機能の後にNVIC_SetPriority機能を置く方が良いでしょう。 あなたの良いニュースを待っています。 mayliu1_0-1730453159868.png よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 返信ありがとうございます lpuart_config_t lpuartConfig; lpuart_transfer_t sendXfer; lpuart_transfer_tはXferを受け取ります。 edma_config_t userConfig = {0}; uint32_t uiCnt = 0; /* LPUART を初期化します。*/ /* ※lpuartConfig.baudRate_Bps= 115200U; * lpuartConfig.parityMode = kLPUART_ParityDisabled; * lpuartConfig.stopBitCount= kLPUART_OneStopBit; * lpuartConfig.txFifoWatermark= 0; * lpuartConfig.rxFifoWatermark= 0; * lpuartConfig.enableTx = false; * lpuartConfig.enableRx = false; */ LPUART_GetDefaultConfig(&lpuartConfig); lpuartConfig.baudRate_Bps= UART3_BAUDRATE; lpuartConfig.enableTx = true; lpuartConfig.enableRx = true; LPUART_Init(DEMO_LPUART, &lpuartConfig, DEMO_LPUART_CLK_FREQ); DMA 割り込みの NVIC 優先度を最高優先度に設定します NVIC_SetPriority(DMA0_DMA16_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 0, 0));DMA0割り込みの優先度が最も高い DMA1_DMA17_IRQn #if 定義(FSL_FEATURE_SOC_DMAMUX_COUNT) & FSL_FEATURE_SOC_DMAMUX_COUNT /* DMAMAX を初期化する */ DMAMUX_Init(EXAMPLE_LPUART_DMAMUX_BASEADDR); /* LPUARTのチャンネルを設定 */ DMAMUX_SetSource(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_TX_DMA_CHANNEL、LPUART_TX_DMA_REQUEST); DMAMUX_SetSource(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_RX_DMA_CHANNEL、LPUART_RX_DMA_REQUEST); DMAMUX_EnableChannel(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_TX_DMA_CHANNEL); DMAMUX_EnableChannel(EXAMPLE_LPUART_DMAMUX_BASEADDR、LPUART_RX_DMA_CHANNEL); #endif /* EDMAモジュールを初期化します */ EDMA_GetDefaultConfig(&userConfig); #if 定義(BOARD_GetEDMAConfig) BOARD_GetEDMAConfig(userConfig); #endif EDMA_Init(EXAMPLE_LPUART_DMA_BASEADDR, &userConfig); EDMA_CreateHandle(&g_lpuartTxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_TX_DMA_CHANNEL); EDMA_CreateHandle(&g_lpuartRxEdmaHandle, EXAMPLE_LPUART_DMA_BASEADDR, LPUART_RX_DMA_CHANNEL); #if 定義(FSL_FEATURE_EDMA_HAS_CHANNEL_MUX) && FSL_FEATURE_EDMA_HAS_CHANNEL_MUX EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_TX_DMA_CHANNEL、DEMO_LPUART_TX_EDMA_CHANNEL); EDMA_SetChannelMux(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、DEMO_LPUART_RX_EDMA_CHANNEL); #endif DMAチャネルの優先順位を設定 EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_TX_DMA_CHANNEL] = (EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_TX_DMA_CHANNEL] & ~DMA_DCHPRI_CHPRI_MASK) |DMA_DCHPRI_CHPRI(15); EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_RX_DMA_CHANNEL] = (EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI[LPUART_RX_DMA_CHANNEL] & ~DMA_DCHPRI_CHPRI_MASK) |DMA_DCHPRI_CHPRI(15); EXAMPLE_LPUART_DMA_BASEADDR->DCHPRI0 定数 edma_channel_Preemption_config_t Channel_preemption_config = { .enableChannelPreemption= false、 .enablePreemptAbility= trueの場合、 .channelPriority(英語)= 14U }; 定数 edma_channel_Preemption_config_t Channel14_preemption_config = { .enableChannelPreemption= false、 .enablePreemptAbility= trueの場合、 .channelPriority(英語)= 15ユー }; EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR,LPUART_TX_DMA_CHANNEL,&Channel_preemption_config); EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、&Channel14_preemption_config); /* LPUART DMA ハンドルを作成します。*/ LPUART_TransferCreateHandleEDMA(DEMO_LPUART, &g_lpuartEdmaHandle, LPUART_UserCallback, NULL , &g_lpuartTxEdmaHandle, &g_lpuartRxEdmaHandle); 私はこの方法を使うことを考えています。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , 以下の定義の違いを確認し、必要に応じて使用してください。 EDMA_SetChannelPreemptionConfig:主にDMAチャネルのプリエンプション優先度を設定するために使用され、複数のDMAタスクが同時に発生した場合に、最も重要なタスクを最初に処理できるようにします。 NVIC_SetPriority:割り込みの優先度を設定するために使用され、複数の割り込みが同時に発生した場合に、優先度の高い割り込みにCPUが最初に応答して処理できるようにします。 よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 私はこのように追加することを考えています、 定数 edma_channel_Preemption_config_t Channel_preemption_config = { .enableChannelPreemption= false、 .enablePreemptAbility= trueの場合、 .channelPriority(英語)= 14U }; 定数 edma_channel_Preemption_config_t Channel14_preemption_config = { .enableChannelPreemption= false、 .enablePreemptAbility= trueの場合、 .channelPriority(英語)= 15ユー }; EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR,LPUART_TX_DMA_CHANNEL,&Channel_preemption_config); EDMA_SetChannelPreemptionConfig(EXAMPLE_LPUART_DMA_BASEADDR、LPUART_RX_DMA_CHANNEL、&Channel14_preemption_config); それは正しいですか、そうではありません。 ご確認ください Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant , 更新情報ありがとうございます。 私はあなたがNVIC_SetPriority(IRQn_Type IRQn、uint32_t優先度)機能を使用できることをお勧めします。 1: 最初のパラメータはIRQn_Typeです。 デザインによって異なりますが、UART3 が DMA チャネル 0(#define LPUART_TX_DMA_CHANNEL 0U) を使用している場合、最初のパラメーターは DMA0_DMA16_IRQn です。 2:2番目のパラメータは優先度で、値が小さいほど、対応する割り込みの優先度が高くなります。 よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu、 CPUよりもDMAコントローラーにHighest the Priorityを設定する方法を教えてください。 また、DMAでは、SPIよりもUART受信とTXに最高の優先度を設定したいと思います。 プロセスとAPIまたは例を教えてください。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  遅延機能を追加するだけです、私はあなたに示しました。 SDK_DelayAtLeastUs(100000, CLOCK_GetFreq(kCLOCK_CpuClk)); 1:さらに、UARTの送受信のデータ形式が一貫しているかどうかを確認することをお勧めします。 2:NXP開発ボードとTI開発ボードが共通の基盤を共有しているかどうかを確認してください。 3:UARTの送信と受信の接続が安全かどうか確認してください。 BR  mayliu Re:UART3オーバーランエラーがRT1020で発生 返信ありがとうございます。 ソースコードファイルを共有していただけませんか。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  問題の原因はわかっていると思います。 プログラム内での継続的なデータ伝送により、TiボードUARTレシーバーがオーバーランし、異常なデータ転送が発生する可能性があります。 52バイトのUARTデータを送信した後、遅延を追加することをお勧めしますので、ぜひお試しください。 私はこれを私の側で100回テストおよび検証しましたが、データの送受信は一貫しています。 mayliu1_1-1729667293341.png それがあなたの助けになることを願っています。 それでもご不明な点がございましたら、お気軽にお知らせください。 Re:UART3オーバーランエラーがRT1020で発生 Hi @mayliu1 , 返信ありがとうございます。 今のところ、私はuartレシーバーを使用していません。 私が共有したものは UART 送信のみ (サイズ 52 バッファー) ですが、DMA を使用して Ti ボードで正しいデータを受信しません。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  更新情報ありがとうございます。 おっしゃるように、UARTデータのみを送信する場合、なぜUARTオーバーランエラーが発生しましたか? UART オーバーラン エラーは、UART 受信に関連しています。 そして、UARTデータを送信したい場合は、 それは非常に簡単で、LPUART_SendEDMAを呼び出すだけです。 mayliu1_0-1729663958271.png BR mayliu Re:UART3オーバーランエラーがRT1020で発生 返信ありがとうございます。 このプロジェクトでは、DMA uartを使用してデータを送信するだけです。 つまり、私のレシーバーはTiプロセッサデバイスです。 この例ではDMA Uartのみが実行されているため、この例では優先度は重要ではないと思います。 2バイトのデータを送信しようとしましたが、それでも同じ問題があります。 この単純なuart DMA伝送のため、これを機能させるための確固たる解決策を教えてください。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  更新情報ありがとうございます。 DMA UART 受信機能インターフェースをいつ、どこで呼び出すのか教えてください。 「ソースファイル内(lpuart_edma_transfer.c)あなたが送信した、DMA UARTデータ受信インターフェースへの呼び出しは見当たりませんでした。 以下の手順で確認をお試しください。 1:DMA_UART割り込みの優先度を他のモジュールよりも高く設定します。 2:ピンポンバッファを使用してUARTデータを受信します。 それがあなたの助けになることを願っています。 それでもご不明な点がございましたら、お気軽にお知らせください。 よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 Hi @mayliu1 , あなたの提案に従って、私はDMAでuartを設定しましたが、それでも損失が見られます。 レシーバー側で明確な損失が見られます(私のレシーバーは別のデバイスコンポートです)。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  特にUARTのボーレートが特に高い場合は、DMA UARTを使用することを強くお勧めします。 BR mayliu Re:UART3オーバーランエラーがRT1020で発生 それで、私はDMA uartを実装する必要がありますか? Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  質問: このオーバーランの問題は、spi cmsis ハンドラが含まれた後に発生します。 回答:spi cmsisハンドラの追加により、UART割り込みのエントリが遅延し、UARTデータを時間内に受信できなくなります。 BR mayliu Re:UART3オーバーランエラーがRT1020で発生 返信ありがとうございます。 このオーバーランの問題は、spi cmsis ハンドラを組み込んだ後に発生します。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  更新情報をいただきありがとうございます。 UART割り込みを使用してUARTデータを送受信すると、UARTバイトごとにUART割り込みがトリガーされます。 UARTのボーレートが非常に高く(3MBps)、頻繁にUART割り込みが発生しますが、これは不合理です。 UARTのボーレートが非常に高い場合にUART割り込みを使用することはお勧めしません。 よろしくお願いいたします。 mayliu Re:UART3オーバーランエラーがRT1020で発生 こんにちは @mayliu1 、 注意:現在、DMA uartを使用していません。uart割り込みを使用しています。 Re:UART3オーバーランエラーがRT1020で発生 Hi @mayliu1 , 返信ありがとうございます。 現在、DMA uartを使用しています。uart割り込みを使用しています。 以下のコードスニペットを参照してください。 Re:UART3オーバーランエラーがRT1020で発生 Hi @hanmant  私たちの製品に興味を持ち、コミュニティをご利用いただき、誠にありがとうございます。 通常、UARTのオーバーランエラーには様々な原因があり、データ処理速度や割り込み処理など、さまざまな側面を考慮する必要があります。 問題を解決するために、以下の質問に回答してください。 まず、UARTデータを受信するためにどのDMA_UARTインターフェース機能を呼び出すか教えてください 次に、インターフェース機能をいつどこで呼び出すか教えてくださいDMA_UART。 私はあなたにいくつかの提案があります。 1:DMA_UART割り込みの優先度を他のモジュールよりも高く設定します。 2:ピンポンバッファを使用してUARTデータを受信します。 それがあなたの助けになることを願っています。 それでもご不明な点がございましたら、お気軽にお知らせください。 良い一日をお過ごしください!   よろしくお願いいたします。 mayliu
記事全体を表示
如何:使用带有 AUTOSAR 的 S32 RTD 为 S32M2xx 创建闪烁 LED 应用项目 本文档展示了使用 S32 RTD AUTOSAR 驱动程序为 S32M2xx 系列创建简单闪烁 LED 应用程序的分步过程。此示例用于 S32M244 EVB,通过 P&E 调试器连接到 PC。 准备 设置软件工具 为 S32 平台安装 S32 Design Studio   安装S32M2xx开发包和S32M24 RTD AUTOSAR 1.9.0S32 配置工具都需要这两者。 DanielBarbu_8-1724226300276.png 推出适用于 S32 平台的 S32 Design Studio 程序 新的S32DS项目 DanielBarbu_9-1724226331305.png 或者 DanielBarbu_10-1724226341630.png 为项目提供一个名称,例如“Blinking_LED_RTD_With_AUTOSAR”。输入的名称不得包含空格。    扩展系列 S32M2xx,选择 S32M244 DanielBarbu_11-1724226369028.png 单击“下一步” 点击 SDK 旁边的“…”按钮 DanielBarbu_12-1724226407245.png 选中 PlatformSDK_S32K1_S32M24_2_0_0_S32M244_M4F(或已安装的 S32M2xxx 的最新 SDK)旁边的复选框。单击“确定” DanielBarbu_13-1724226421435.png 单击“完成”。等待项目生成向导完成,然后在项目资源管理器视图中展开项目以显示内容。 DanielBarbu_14-1724226431520.png 要控制电路板上的 LED,需要在 Pins Tool 内执行一些配置。有几种方法可以做到这一点。一种简单的方法是双击 MEX 文件。 DanielBarbu_15-1724226441629.png 选择概览选项卡并禁用 Pins 工具。确保概览选项卡窗口显示如下所示的设置。在这里,我们禁用引脚工具并使用外围工具中的 MCAL 驱动程序来使用 AUTOSAR 驱动程序。 DanielBarbu_16-1724226460441.png 现在从概览菜单中,选择外围工具并双击打开它。 DanielBarbu_17-1724226918658.png 在驱动程序部分,“Port_Ip_1 驱动程序”是非 AUTOSAR 版本驱动程序,因此必须替换它。右键单击“Port_Ip_1”并将其删除。保持 BaseNXP 驱动程序原样。 DanielBarbu_18-1724226929472.png 单击 MCAL 框旁边的“+”。 从列表中找到并选择“MCU”组件,然后单击“确定”。    DanielBarbu_20-1724226964138.png DanielBarbu_22-1724227070886.png 再次单击 MCAL 框旁边的“+”,然后从列表中找到并选择“Dio”组件,然后单击“确定”。 DanielBarbu_0-1724227968887.png 再次单击 MCAL 框旁边的“+”,然后从列表中找到并选择“端口”组件,然后单击“确定”。 DanielBarbu_1-1724227980496.png    现在组件选项卡应显示如下: DanielBarbu_2-1724227993995.png 暂时忽略端口组件的错误。 现在我们需要配置我们添加的不同 MCAL 驱动程序。从Dio配置开始,打开Dio配置。 现在,打开“DioConfig”选项卡。将 Dio Port Id 改为 4,而不是 0 DanielBarbu_3-1724228062485.png 其中,选择 Dio Channel 旁边的“+”号。 DanielBarbu_4-1724228092954.png 然后将名称编辑为“DioChannel_0”,将“Dio Channel Id”编辑为“6”而不是“0”。   从S32M244 EVB的原理图上,我们可以从原理图上选择用户LED的信号线,通道6连接到用户LED信号,所以我们使用通道6信号线连接到用户LED上的芯片。        现在选择端口选项卡进行端口配置。 选择并打开端口配置选项卡,然后从中打开“PortConfigSet”选项卡。 将 PortPin Pcr 编辑为“134”而不是“0”。     DanielBarbu_6-1724228234732.png    另外,将 Portpin 方向更改为“PORT_PIN_OUT”,并将 PortPin 电平值更改为 “PORT_PIN_LEVEL_LOW”。更改后应如下所示。 DanielBarbu_7-1724229205889.png 在底部你会发现“UnTouchedPortPin”。点击“+”并添加PortPins。 DanielBarbu_8-1724229272751.png 现在按照以下配置添加 6 个端口引脚。应设置引脚 0、1、2、3、4、5 和 6。 DanielBarbu_12-1724229514693.png DanielBarbu_13-1724229545811.png 现在设备配置已完成,可以生成 RTD 配置代码。单击菜单栏中的“更新代码”。 DanielBarbu_14-1724229583484.png 为了控制刚刚配置的输出引脚,需要编写一些应用程序代码。回到‘C/C++’视角。 DanielBarbu_15-1724229592068.png 如果尚未打开,请在项目窗口中单击“src”文件夹旁边的“>”以显示内容,然后双击“main.c”文件来打开它。这是添加应用程序代码的地方。 DanielBarbu_16-1724229603281.png 在做任何其他事情之前,初始化时钟树并应用 PLL 作为系统时钟,应用模式配置,通过添加使用端口驱动程序初始化所有引脚 - 在主函数中在此处编写代码注释之前编辑代码。 /* 初始化Mcu驱动程序 */ Mcu_Init(&Mcu_Config_BOARD_InitPeripherals); /* 初始化时钟树并应用 PLL 作为系统时钟 */ Mcu_InitClock(McuClockSettingConfig_0); 当( MCU_PLL_LOCKED != Mcu_GetPllStatus() ) { /* 忙碌等待直到系统 PLL 锁定 */ } Mcu_DistributePllClock();        Mcu_SetMode(McuModeSettingConf_0);   /* 使用端口驱动程序初始化所有引脚 */ 端口初始化(NULL_PTR);    DanielBarbu_17-1724229670230.png 现在将 for 循环的逻辑替换为下面的代码部分所示,这将使 LED 闪烁 10 次: 您还需要声明并初始化循环变量 uint8 count = 0U 然后替换如下代码:               /* LED 闪烁 10 次的逻辑 */ while (count++ < 10) { /* 获取通道的输入电平 */ Dio_WriteChannel(DioConf_DioChannel_DioChannel_0,STD_HIGH);         TestDelay(2000000);   Dio_WriteChannel(DioConf_DioChannel_DioChannel_0,STD_LOW);         TestDelay(2000000);   } DanielBarbu_18-1724229703422.png 在“main”函数之前,添加一个延迟函数,如下所示: void TestDelay(uint32 delay); void TestDelay (uint32延迟) { 静态易失性uint32 延迟定时器 = 0;     while (DelayTimer { 延时定时器++; } 延迟计时器=0; } DanielBarbu_19-1724229855098.png 更新 main.c 顶部的包含行文件包含应用程序中使用的驱动程序的标题: Add   #include "Mcu.h" #include "端口.h" #include "Dio.h" DanielBarbu_20-1724229910820.png 现在,再次选择并打开 max 文件。然后,选择并打开外围工具。 DanielBarbu_21-1724229922596.png 现在,从顶部的工具栏选择菜单中,选择并双击符号,如下所示: DanielBarbu_22-1724229946722.png 现在,从全局设置中,为 ComponentGenerationMethod 选择 从下拉菜单中选择“FunctionalGroups”,如下所示:    DanielBarbu_23-1724230001051.png 现在,单击菜单栏中的“更新代码”。 DanielBarbu_24-1724230011335.png 构建“Blinking_LED_RTD_AUTOSAR”。在“C/C++ 项目”视图中选择项目名称,然后按“构建”。 DanielBarbu_25-1724230023823.png 构建完成后,检查是否没有错误。 DanielBarbu_26-1724230036819.png 打开调试配置并选择“Blinking_LED_RTD_with_AUTOSAR_Debug_RAM”。确保选择与执行的构建类型相匹配的配置,否则如果构建输出不存在则可能会报告错误。 现在,您需要配置 P&E MULTILINK 调试探针。 使用 USB 将 PE Micro 调试器连接到 EVB,并确保调试器通过 USB 接口连接,然后会自动检测 COM 端口(在极少数情况下,当 2 个或更多调试探测器通过 USB 连接到主机 PC 时,可能需要为连接到 EVB 的探测器选择正确的 COM 端口)。 现在,选择 PEMicro Multilink 调试器,选择“运行”,选择调试配置选项卡,然后选择 GDB PE Micro Interface Debugging,并从其下方可用的选项中选择带有 Debug_FLASH_PNE 的选项。 现在,在调试配置窗口中,选择 PEmicro Debugger 选项卡,并在 PEMicro 接口设置中选择 USB Multilink 接口。 Clink 应用和调试 点击“调试” 要查看 LED 闪烁,请单击“恢复” DanielBarbu_27-1724230053348.png 此代码将使 LED 闪烁 10 次,您可以更改循环条件以使其无限闪烁。
記事全体を表示
补丁支持 NXP Linux 和 Android BSP(HDMI、LCD 和 LVDS)的 uboot 徽标从 uboot 保留到内核 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 此补丁使得从 uboot 到内核再到 Android 的显示不再中断。IPU及相关硬件显示接口在Uboot中只会初始化一次,内核代码会跳过IPU初始化。   1.描述 1) 在UBoot中支持HDMI、LVDS和LCD输出。 2) 支持从uboot到内核到Android的UBoot标志保持。 3)对于HDMI,支持720P和1080P模式。 4) 对于LVDS,支持1024x768和1080P双通道面板。 5)标志文件是一个32 bpp的bmp文件。 2. 文件列表 --kernel_imx\0001-Keep-uboot-logo-for-Android-boot-supports-HDMI-LCD-a.patch --kernel_imx\0002-uboot-logo-keep-patch.patch 的错误修复 内核补丁支持徽标保留功能。 --uboot-imx\0001-启用HDMI-LCD和LVDS的uboot徽标.patch Uboot补丁支持logo显示。 -- 徽标.bmp 示例 32bpp 徽标文件。 --自述文件.txt 此文件,请在使用补丁前参考它 3. 要求 -iMX6 SabreSD 板。 - Android JB4.2.2_1.1.0-GAUBoot 和内核。 4. 使用方法 -- 将两个补丁文件复制到Android kernel_imx和uboot-imx文件夹并应用它们。 $ cd ~/myandroid/kernel_imx/ $ git apply ./0001-Keep-uboot-logo-for-Android-boot-supports-HDMI-LCD-a.patch $ cd ~/myandroid/bootable/bootloader/uboot-imx/ $ git apply ./0001-Enable-uboot-logo-for-HDMI-LCD-and-LVDS.patch $ git apply ./0002-Bug-fix-for-uboot-logo-keep-patch.patch   -- 构建新的 uboot 映像: $ cd ~/myandroid/bootable/bootloader/uboot-imx $ 导出 CROSS_COMPILE=~/myandroid/prebuilt/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- $ 导出 ARCH=arm $制作mx6q_sabresd_android_配置 $ make   -- 在构建新的 UBoot 映像之前,可以从文件 uboot-imx\include\configs\mx6q_sabresd.h 中选择显示类型 // 选择一种输出模式 定义IPU_输出_模式_HDMI //#定义IPU_OUTPUT_MODE_LVDS //#定义IPU_OUTPUT_MODE_LCD   -- 构建新的内核映像: $ cd ~/myandroid/kernel_imx $ 导出 CROSS_COMPILE=~/myandroid/prebuilt/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- $ 导出 ARCH=arm $制作imx6_android_defconfig $ 制作 uImage   -- 在“make uImage”之前,可以使用make menuconfig来选择显示类型。 系统类型 ---> 飞思卡尔 MXC 实施 ---> MX6 clk 设置用于从引导加载程序到内核的平滑 UI 转换 ---> 选择显示界面 ()LCD、IPU1、DI0 上的平滑 UI 转换 ()LVDS、IPU1、DI1 上的平滑 UI 转换 (X)HDMI、IPU2、DI0 上的 UI 转换流畅   -- 视频模式的 Uboot 参数 1080P HDMI: “视频=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 fb0base=0x27b00000 fbmem=28M hdmi_audio_clk=148500000”   720P HDMI: “视频=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 fb0base=0x27b00000 fbmem=28M hdmi_audio_clk=74250000”      1024x768 LVDS:       "video=mxcfb0:dev=ldb,LDB-XGA,if=RGB666,bpp=32 fb0base=0x27b00000 fbmem=28M"      800x480 LCD:       "video=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB565,bpp=32 fb0base=0x27b00000 fbmem=28M" -- 将 logo.bmp 添加到 SD 卡地址 0x100000 并跳过 54 字节 bmp 文件头。 sudo dd if=logo.bmp of=/dev/sdc bs=1 seek=1048576 skip=54 5. 注意 1)logo.bmp文件应为32bpp或16bpp,并且应与视频模式参数“bpp=xx”同步, 和 uboot 配置文件 mx6q_sabresd.h(#define DISPLAY_BPP xx)。   2)IPU编号和DI编号在内核文件“board-mx6q_sabresd.c”中硬编码。 静态结构fsl_mxc_hdmi_core_platform_data hdmi_core_data={ .ipu_id=1, .disp_id = 0, }; 静态结构fsl_mxc_lcd_platform_data lcdif_data = { .ipu_id=0, .disp_id = 0, .default_ifmt = IPU_PIX_FMT_RGB565, }; 静态结构fsl_mxc_ldb_platform_data ldb_data={ .ipu_id=0, .disp_id = 1, .ext_ref = 1, .模式=LDB_SEP1, .sec_ipu_id=0, .sec_disp_id = 0, };   3)IPU编号和DI编号由Uboot文件“include\configs\mx6q_sabresd.h”中的宏定义 #define IPU_NUM 2 //1 代表 IPU1,2 代表 IPU2。 #define DI_NUM 0 // 0 代表 DI0,1 代表 DI1。   4)uboot和kernel中使用的显示器类型必须相同,类型相同,IPU号相同,DI端口相同, 相同的分辨率。     [2015-06-29更新]:JB4.2.2_1.1.0_uboot_logo_keep_patch_2015-06-29.zip 修复 iMX6DL 的一些 LVDS 问题。 还给出了带有 DI0 的 LVDS0 的示例。 新的 Uboot 补丁: 0002-更新-lvds-时钟源至-pll2_pfd0.-与-kern.patch相同 0003-添加对iMX6DL的支持.补丁   新的内核补丁 0003-跳过-lvds-重新初始化以保留徽标.patch 0004-添加-示例-用于-LVDS0-徽标-保留.补丁     [2015-08-07更新]:JB4.2.2_1.1.0_uboot_logo_keep_patch_2015-08-07.zip 添加了新的 Uboot 补丁 0004-Correct-the-sequence-to-set-LDB-clock.patch 它可以纠正 LVDS 时钟设置序列,这是一个已知问题,有时会导致没有 LVDS 显示。   [2015-09-18更新]:JB4.3_1.1.1_uboot_logo_keep_patch_2015-09-18.zip 添加了针对Android JB4.3_GA1.1.1版本的补丁。 更新了时钟使用计数,在显示屏空白后,相关时钟可以正确关闭。 支持来自 PLL5 的 LVDS 时钟。   [2015-12-21更新]:新增3.10.53_GA1.1.0补丁:L3.10.53_GA1.1.0_uboot_logo_keep_patch_2015-12-21.zip。 在 iMX6DL/Q SabreSD 板上验证。它支持 LCD 和 LVDS 面板,HDMI 补丁将稍后发布。   [2016-01-04更新]:新增3.10.53_GA1.1.0补丁:L3.10.53_GA1.1.0_uboot_logo_keep_patch_2016-01-04.zip。 增加了 HDMI 显示支持。现在它支持 LCD、LVDS 和 HDMI 显示器。 修复了启动时的视频播放问题。   [2016-05-18 更新]:0001-修复分割模式LVDS面板无TX3信号问题.patch 发现一个问题,当使用双通道4通道LVDS面板时,在uboot中会有一个LVDS端口没有LVDS TX3信号,附件“0001-Fix-the-split-mode-LVDS-panel-no-TX3-signal-issue.patch”用于修复该问题,它基于JB4.3_1.1.1_uboot_logo_keep_patch_2015-09-18.zip,对于其他BSP,请手动移植。   [2016-08-29更新]:0001-重置后IPU在SRC控制寄存器中等待res.patch 在某些 iMX6 芯片上,在 SRC 控制寄存器中重置 IPU 后,立即启用 IPU 将导致系统挂起,为了避免此类问题,软件需要通过轮询 SRC 寄存器等待 IPU 重置完成。 附件“0001-After-reset-IPU-in-SRC-Control-Register-wait-for-res.patch”用于修复此问题,它基于JB4.3_1.1.1_uboot_logo_keep_patch_2015-09-18.zip +“0001-Fix-the-split-mode-LVDS-panel-no-TX3-signal-issue.patch”,对于其他BSP,请手动移植。   [2017-01-06更新] 添加 L4.1.15_GA1.2.0 BSP 和 Android M6.0.1_GA2.1.0 补丁BSP。 文件:L4.1.15_GA1.2.0_uboot_logo_keep_patch_2017-01-06.zip;M6.0.1_2.1.0_uboot_logo_keep_patch_2017-01-06.zip Android 图形与显示 i.MX6DL i.MX6 双核 i.MX6 四核 i.MX6S Re: Patch to support uboot logo keep from uboot to kernel for NXP Linux and Android BSP (HDMI, LCD and LVDS) 谢谢您,明白了 回复:补丁支持 NXP Linux 和 Android BSP(HDMI、LCD 和 LVDS)的 uboot 徽标从 uboot 保留到内核 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Qiang_FSL‌ 你好ubootlogo已经可以显示在屏幕上了我现在想要ubootlogo和kernellogo不停的显示,现在我打了0001-Keep-uboot-logo-for-Linux-boot-supports-HDMI-LCD-and.patch,内核启动时屏幕黑屏,请问如何解决 期待你的答复 回复:补丁支持 NXP Linux 和 Android BSP(HDMI、LCD 和 LVDS)的 uboot 徽标从 uboot 保留到内核 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Qiang_FSL‌ 屏幕上已显示“谢谢”标志 回复:补丁支持 NXP Linux 和 Android BSP(HDMI、LCD 和 LVDS)的 uboot 徽标从 uboot 保留到内核 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好, 李强, 如果我们的客户使用 emmc 并且没有 SD 卡设计,他们如何将徽标 bmp 文件下载到 emmc?在路径自述文件中,我们使用 dd 将徽标 bmp 文件复制到 SD 卡。非常感谢并期待您的回复。 祝您有美好的一天 Dan 回复:补丁支持 NXP Linux 和 Android BSP(HDMI、LCD 和 LVDS)的 uboot 徽标从 uboot 保留到内核 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Qiang, 在我的主板上,我使用 800x480 RGB LCD,内核的视频参数是: “视频=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB24,bpp=32 fb0base=0x27b00000 fbmem=28M” 通过这种配置,显示在 Android 中运行完美,但在 uboot 中徽标不正确。我检查了补丁并发现对于 LCD 模式我们有定义: #define DISPLAY_IF_BPP 16 //RGB565接口 于是我按照如下方式更改定义并重建uboot,但问题仍然存在。 #define DISPLAY_IF_BPP 24 //RGB24 接口 我对 uboot 代码进行了硬编码(通过在 board/freescale/mx6q_sabresd/mx6q_sabresd.c 中将 bmpReady 设置为 0)以显示红色、绿色和蓝色条,但颜色不正确,如下图所示。 如果您对此有任何建议,请告诉我。谢谢!
記事全体を表示
启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, 这是有关如何在 imx6 中启用扩频的文档。   顺祝商祺! 杰克 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 请修复扩频.docx 中的拼写错误“ssc_top” --> “ssc_stop” 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 请参阅顶部附加的新文档 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 通过CONFIG_USE_PLUGIN启用 U-Boot 插件 (v16.03)或CONFIG_USE_IMXIMG_PLUGIN (v18.03) 在 plugin.S 中的宏imx6_XXX_ddr_setting中将您的 DCD 数据转换为汇编语言脚本 将以下 URL 中的宏扩频定义复制到i.mx6 | 参考设计器中的 plugin.S 扩频 修改宏扩频中的#60和#40寄存器 在 plugin.S 中的 imx6_XXX_ddr_setting 第一行调用 宏 扩频 构建、闪存和测试 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> jackmao‌ 我对附件“spread spectrum.docx”感到困惑 为什么您的脚本和文档中没有使用 CCM_ANALOG_PLL_SYS_NUM?以及如何使用它? ssc_top 应该是第 4 页中的 ssc_stop 吗? 在第 3 页中: 调制频率控制在48k左右。 在第 4 页: 公式“调制频率 = Fref * (ssc_step) / (2 * ssc_top)”与演示代码不匹配:24000 ≠ 48000         回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Dear Jack Mao, 如何在 UBOOT 2016 中实现此功能? 此致问候 曾德胜 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 加载的代码缺少一行,请在您的代码中添加该行。 在调用 rom___pu_irom_hwcnfg_setup 之前: ldr r3,=ROM_VERSION_OFFSET ldr r4,[r3] ldr r3,=ROM_VERSION_TO12 cmp r4, r3 ldrge r3,=ROM_API_TABLE_BASE_ADDR_MX6DL_TO12 ldrlt r3,=ROM_API_TABLE_BASE_ADDR_LEGACY ldr r4, [r3, #ROM_API_HWCNFG_SETUP_OFFSET] //缺失行 blx r4 /* 此地址在未来的 ROM 版本中可能会改变 */ 调用 rom___pu_irom_hwcnfg_setup 后: 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嗨,跳跃的毛, 我使用的是 imx6 的 2015 版 uboot,但插件支持不起作用。我想知道我应该使用哪个 repo 来测试扩频补丁? 此致, 约翰 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 亲爱的毛俊平, 您是否有关于 Linux BSP L3.10.17_1.0.2 中需要修改哪些文件的详细信息? 此致, PK 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,Tim Jaacks, 看来您修改了 flash_header.S 以外的其他文件。那是哪个 BSP 版本?您修改了哪个文件? 我正在使用 Linux BSP L3.10.17_1.0.2,但我看不到 flash_header.S。 此致 PK 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 谢谢蒂姆,它对我们有用! 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 请参阅我的代码中的以下片段: /* 禁用扩频模式 */ __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) & ~ANADIG_PLL_528_SYS_SS_ENABLE),anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET);     /* 写入新值 */ __raw_writel(sys_ss,anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET); __raw_writel(denom,anatop_base + PLL2_528_OFFSET + PLL_528_DENOM_DIV_OFFSET);     /* 启用扩频模式 */ 如果(已启用) __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) | ANADIG_PLL_528_SYS_SS_ENABLE),anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET); 尝试使用 denom=0x190、sys_ss=0xFA0001 和 enabled=1(这给出了 15 MHz 的扩频范围、48 kHz 的调制频率和 60 kHz 的频率步长)。 内核启动后,我通过写入 procfs 条目在运行时使用此代码。 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Uwe, 我在 IVT 部分看到了所有绝对地址(例如app_code_jump_v: .long0x00907458),但在我的旧代码中,我们有基于标签的地址分配(app_code_jump_v:.word _start)。 它也适用于独奏吗?我正在使用 uboot 2009,经过给定的更改后,我的主板无法启动。 此致问候 Rajendra 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Tim, 您能否提供启用动态扩频的说明?我正在从内核板初始化文件中写入以下两个寄存器,但我没有看到任何变化。 0x20c 8060 = 0x1770 0x20c 8040 = 0x05dc8006 还有什么需要做的吗? 此致问候 Rajendra 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嗨,Jumping Mao, 非常感谢您提供这篇文章和引导加载程序更改以在扩频模式下设置 PLL2。 我遵循该指南,但在我的 i.MX6D 系统上运行它时遇到启动问题。最后我发现该插件被拒绝了并且可以修复它。 在此讨论中,在 i.MX6D 上启用 PLL2 扩频功能 我上传了我的 flash_header.S,以防其他用户遇到同样的问题。 我还改变了 PLL2 断电/通电的顺序。使用 MX6D 的 PLL2 寄存器描述,设置 BYPASS 模式的位 (0x00010000) 而不是 Power Down (0x00001000)。 干杯, Uwe 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 谢谢,跳毛。飞思卡尔,您能确认一下吗?有没有官方文件描述这个序列?我们在基于 i.MX6 的系统上即时启用扩频,它似乎可以发挥作用(在测量的频谱中可以立即看到变化)。我们需要预料到任何副作用吗? 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Tim, 该信息来自 SOC 所有者,这是必需的序列,无法即时设置 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好,Jumping Mao, 谢谢你的文档。您说“为了启用扩频,PLL2 需要重新配置,它需要关闭并启用/设置扩频并再次打开电源”。您从哪里获得这些信息?我在 i.MX6 参考手册 (IMX6DQ-RefMan-RM-r2-2014-06.pdf) 中找不到类似内容。据我了解,应该可以即时启用扩频。我说得对吗?飞思卡尔有人可以证实这一点吗? 顺祝商祺! Tim 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 亲爱的毛俊平, 感谢您的帖子,但请考虑将其移至正确的社区位置以获得更好的可见性。 有关详细信息,请参阅一般建议https://community.freescale.com/docs/DOC-99909 感谢您使用飞思卡尔社区。 此致, Wlodek_D。 回复:启用扩频 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 修正文档中的一些文字,将“切换到OSC_CLK之前,需要关闭PLL2 ”更改为“切换到OSC_CLK之后,关闭PLL2 ”
記事全体を表示
スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, ここでは、imx6 でスペクトラム拡散を有効にする方法についてのドキュメントを示します。   よろしくお願いいたします ジャック Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 誤字脱字「ssc_top」 ---> スプレッドspectrum.docxの「ssc_stop」>を修正してください Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 上部に添付されている新しいドキュメントを参照してください Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> jackmao‌ 付属している「スプレッドspectrum.docx」に戸惑っています なぜCCM_ANALOG_PLL_SYS_NUMがスクリプトやドキュメントで使用されていないのですか?そしてそれをどのように使用するのですか? ssc_top 4ページにssc_stopるべきですか? 3ページ目:               変調周波数は約48Kに制御されます。 4ページ目: 「変調周波数 = Fref * (ssc_step) / (2 * ssc_top)」という式は、デモ コード 24000 ≠ 48000 と一致しません。         Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Dear Jack Mao, この機能をUBOOT 2016に実装するにはどうすればよいですか? よろしくお願いします。 ピーター・ツェン Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ロードされたコードに行がありません。コードに行を追加してください。 before_calling_rom___pu_irom_hwcnfg_setup: ldr r3、=ROM_VERSION_OFFSET LDR R4, [R3] ldr r3, =ROM_VERSION_TO12 CMP R4、R3 ldrge r3, =ROM_API_TABLE_BASE_ADDR_MX6DL_TO12 ldrlt r3, =ROM_API_TABLE_BASE_ADDR_LEGACY LDR R4, [R3, #ROM_API_HWCNFG_SETUP_OFFSET] //行がありません blx r4 /* このアドレスは将来のROMバージョンで変更される可能性があります */ after_calling_rom___pu_irom_hwcnfg_setup: Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはジャンピングマオ、 私はimx6用のubootの2015バージョンを使用していましたが、プラグインのサポートが機能しませんでした。スプレッドスペクトルのパッチをテストするために、どのリポジトリを使用すべきか知りたいのですが。 よろしくお願いします。 John Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 親愛なるジュンピン・マオ、 Linux BSP L3.10.17_1.0.2で変更するファイルの詳細はありますか? よろしくお願いします。 PK Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはティム・ヤークス、 flash_header.S.以外のファイルを変更したようです。それはどのBSPバージョンで、どのファイルを変更しましたか? Linux BSP L3.10.17_1.0.2を使用していますが、flash_header.Sが表示されません。 よろしくお願いします。 PK Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ありがとうティム、それは私たちのために働きます! Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 私のコードから次のスニペットを見てください: /* スペクトラム拡散モードを無効にする */ __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) & ~ANADIG_PLL_528_SYS_SS_ENABLE), anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET);     /* 新しい値を書き込む */ __raw_writel(sys_ss、anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET); __raw_writel(デノム、anatop_base + PLL2_528_OFFSET + PLL_528_DENOM_DIV_OFFSET);     /* スペクトラム拡散モードを有効にする */ if (有効) __raw_writel((__raw_readl(anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET) |ANADIG_PLL_528_SYS_SS_ENABLE)、anatop_base + PLL2_528_OFFSET + PLL_528_SS_OFFSET); denom=0x190、sys_ss=0xFA0001、enabled=1 で試してみました (これにより、スペクトラム拡散範囲は 15 MHz、変調周波数は 48 kHz、周波数ステップは 60 kHz になります)。 カーネルが起動した後、実行時に procfs エントリに書き込んでこのコードを使用します。 Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Uwe, IVT セクションにすべての絶対アドレスが表示されます (例:app_code_jump_v: .long0x00907458)が、私の古いコードでは、ラベルベースのアドレス割り当て(app_code_jump_v:.word _start)があります。 ソロでも機能しますか?私はuboot 2009を使用していますが、与えられた変更により、私のボードは起動しません。 よろしくお願いします。 Rajendra Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hello Tim, スペクトラム拡散をオンザフライで有効にするための説明をお願いします。カーネルボードのinitファイルから下に2つのレジスタを書き込んでいますが、変更はありません。 0x20c 8060 = 0x1770 0x20c 8040 = 0x05dc8006 他に何かやるべきことはありますか? よろしくお願いします。 Rajendra Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはジャンピングマオ、 このアーティスを提供していただき、PLL2をスペクトラム拡散モードで設定するためのブートローダーの変更に感謝します。 このガイダンスに従っていますが、i.MX6Dシステムで実行すると起動の問題が発生します。最後に、プラグインが拒否され、それを修正できることがわかりました。 このディスカッションでは 、i.MX6DでPLL2スペクトラム拡散機能を有効にします flash_headerをアップロードしました。他のユーザーが同じ問題を抱えている可能性がある場合に備えて。 また、PLL2の電源を切る/上げる順序も変更しました。MX6D の PLL2 レジスタ記述を使用して、BYPASS モードのビットを Power Down (0x00001000) ではなく (0x00010000) に設定しました。 それでは。 Uwe Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ありがとう、ジャンピングマオ。フリースケール、これを確認していただけますか?このシーケンスが説明されている公式の文書はありますか?ここでは、i.MX6ベースのシステムでスペクトラム拡散をオンザフライで有効にしており、機能しているようです(測定された周波数スペクトラムで変化がすぐに確認できます)。副作用を覚悟する必要がありますか? Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Tim, 情報はSOCの所有者からのものであり、必要なシーケンスであり、その場で設定することはできません Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはジャンピングマオ、 あなたの文書をありがとう。「スペクトラム拡散を有効にするには、PLL2 を再構成し、シャットダウンしてスペクトラム拡散をイネーブル/設定し、再び電源をオンにする必要がある」と言います。この情報はどこから入手しましたか?i.MX6のリファレンスマニュアル(IMX6DQ-RefMan-RM-r2-2014-06.pdf)にはこのようなものが見つかりません。私の理解では、スペクトラム拡散をオンザフライで有効にすることは可能になるはずです。私は正しいですか?フリースケールの人でこれを確認できる人はいますか? よろしくお願いいたします。 Tim Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 親愛なるジュンピン・マオ、 投稿ありがとうございますが、視認性を高めるために、適切なコミュニティの場所に移動することを検討してください。 詳細については、一般的なアドバイスを参照してください https://community.freescale.com/docs/DOC-99909 平素よりフリースケール・コミュニティをご利用いただき、誠にありがとうございます。 よろしくお願いします。 Wlodek_D。 Re:スペクトラム拡散を有効にする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ドキュメント内の一部の単語を修正し 、「OSC_CLKに切り替える前に、PLL2の電源を切る必要があります 」を「OSC_CLKに切り替える後、PLL2の電源を切り ます」に変更します。
記事全体を表示
UbuntuとROSをiMX8QMにインストールする デフォルトの BSP は、合理化された実稼働レベルの Linux BSP である Yocto プロジェクトに基づいてコンパイルされます。しかし、Ubuntu環境に慣れているユーザー、特にROSユーザーにとっては、Yoctoの操作は比較的複雑になります。この記事では、iMX8QM用のUbuntu BSPの作り方とROSの使い方を紹介します。 完全なUbuntu BSPには、u-boot、Linuxカーネル、Ubuntu rootfsが含まれています。Yocto BSP公式の6.1V BSPではu-bootとLinuxカーネルを使用し、rootfsは引き続きubuntu-base-18.04.4-base-arm64を使用します。コンパイル方法は、NXPフォーラムから取得されています。 まず、上記のリンクからubuntu-base-18.04.4-base-arm64.tar.gzをダウンロードし、解凍します。 $ mkdir ~/ubuntu-rootfs $ sudo tar vxf ubuntu-base-18.04.4-base-arm64.tar.gz -C ubuntu-rootfs スクリプトファイルをコピーして ch-mount.sh を作成します。 $ sudo chmod a+x ./ch-mount.sh 上記のダウンロードは基本的なUbuntuベースのファイルシステムであり、一般的に使用される多くのツールが欠落しているため、インストールする必要があります。このためには、qemu-user-static ソフトウェアをコンピュータにインストールして、arm64 の動作環境をシミュレートします。 $ sudo apt install qemu-user-static Ubuntuベースのファイルシステムをマウントしてから、arm64環境で直接操作します。 $ sudo ./ch-mount.sh -m ubuntu-rootfs/ DNS サーバー (8.8.8.8 など) またはその他の使用可能な DNS サーバー IP を追加します。 # エコー ネームサーバー 8.8.8.8 > /etc/resolv.conf 関連するソフトウェアをインストールすることはもちろん、他のソフトウェアを追加することもできます。 # apt install language-pack-en-base sudo ssh net-tools \ ネットワークマネージャ iputils-ping rsyslog \ bash-completion htop resolvconf ダイアログ \ vim nano v4l-utils alsa-utils git gcc \ less resolvconf autoconf autopoint libtool \ バイソンフレックス GTK-doc-tools glib-2.0\ libglib2.0-devlibpango1.0-devlibatk1.0-devkmod pciutils -y  ユーザーを作成してパスワードを設定します(ここでのユーザー名はubuntuです) # useradd -s '/bin/bash' -m -G adm,sudo ubuntu # passwd ubuntu # passwd root # echo 'apalis-imx8' > /etc/hostname この時点で、基本的なUbuntuが設定されています。 # exit $ sudo ./ch-mount.sh -u ubuntu-rootfs/  インストールが完了したら、ubuntuユーザーを使用してデバッグシリアルポートにログインし、パスワードはubuntu. インストール後初めて起動するときは、初期化のために長時間待機してから、リージョン、ユーザー設定などの構成インターフェイスに入ります イーサネットをオンにし、DNSサーバーのIPを設定します。  ubuntu@mx8QM:~$ sudo ifconfig eth0 up ubuntu@mx8QM:~$ sudo dhclient eth0 ubuntu@mx8QM:~$ sudo vi /etc/resolv.conf ウェストンを開始します。 ubuntu@mx8QM:~$ export XDG_RUNTIME_DIR=/run/user/1000 ubuntu@mx8QM:~$ sudo -E weston --tty=1 & ubuntu@mx8QM:~$ weston-flower ROSテスト ROSプログラムはUbuntuシステムに非常に便利にインストールできます。詳細については、以下の手順を参照してください http://wiki.ros.org/melodic/Installation/Ubuntu http://wiki.ros.org/ROS/Tutorials ubuntu@mx8QM:~$ sudo apt install lsb-core ubuntu@mx8QM:~$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' ubuntu@mx8QM:~$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ubuntu@mx8QM:~$ sudo apt update ubuntu@mx8QM:~$ sudo apt install ros-melodic-desktop  3つのSSHターミナルで次のコマンドを実行して、ROSノード間の通信をシミュレートします。 ubuntu@mx8QM:~$ source /opt/ros/melodic/setup.sh ubuntu@mx8QM:~$ roscore ubuntu@mx8QM:~$ ソース /opt/ros/melodic/setup.sh ubuntu@mx8QM:~$ rosrun roscpp_tutorials トーカー ubuntu@mx8QM:~$ ソース /opt/ros/melodic/setup.sh ubuntu@mx8QM:~$ rosrun roscpp_tutorials リスナー ドライバの制限により、iMX8 は Xorg をサポートしていないため、rqt などの ROS のデフォルトのグラフィカルインターフェイスツールを直接使用することはできません。
記事全体を表示
S32K312 ICU S32K312,主频120MHz,EMIOS功能采集3Hz PWM信号 Re: S32K312 ICU 谢谢,我已经找到了原因,是我PWM输出源的问题 Re: S32K312 ICU [谷歌翻译] S32K312,主频120MHz,EMIOS能采集3Hz的PWM信号吗? Hi, 非常感谢您对我们的产品感兴趣并使用我们的社区。 对于 3Hz 的 PWM 频率和 120MHz 的 eMIOS 时钟频率(使用内部计数器总线),您需要 40,000,000 个滴答: 1秒 -> 120MHz(120,000,000 个刻度) 3赫兹=(1/3)秒 ->120,000,000 *(1/3) = 40,000,000 个刻度 但最大刻度为 65,534(16 位)。 另一方面,ICU 模式(SAIC、IPWM 或 IPM)允许使用模数计数器模式作为时间基准,并且您可以使用全局预分频器(1-256)、主总线预分频器(1-12)和 ICU eMIOS 预分频器(1-12)。 因此,关于您的问题,如果您使用模数计数器模式作为时间基准,则可以使用 ICU 模式收集 3Hz PWM 信号。 希望它能对你有帮助。 祝你今天过得愉快!
記事全体を表示
i.MX53 QSB 开发板入门 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> i.MX53 快速入门板入门指南 您可以按照以下简要概述来首次接触 i.MX53 QSB。 简介 开箱即用的 i.MX53 QSB 视频启动 Ubuntu 原始视频: 开箱即用的 i.MX53 QSB 视频启动 Ubuntu 并附带一些演示(GPU 和 VPU) 原始视频: 如何加载预建图像 此时,您应该已经将开箱即用的 SD 卡装入了您的主板。下一步是使用一些预先构建的图像创建您自己的 SD 卡。 您可以从 Freescale 找到针对 Linux 的预构建映像包 查找 Linux 二进制演示文件 请前往 Timesys 维基页面[1]查看如何加载预构建的图像。 您可以使用一些 Freescale 图像或一些 Timesys 图像。两者都可以! 要加载 Linux 操作系统,您至少需要 3 个图像: 引导加载程序映像 内核映像 根文件系统映像或 tarball 引导加载程序 对于 iMX53QSB,飞思卡尔提供的默认引导加载程序是 u-boot。您可以按照此处的相同步骤使用 LTIB 构建自己的图像。 Kernel 您可以使用 LTIB 构建一个新的 uImage(由 u-boot 加载的内核二进制映像),您可以按照此处的说明进行操作 根文件系统 根文件系统是成为系统环境的一组目录和文件。 如何打造自己的形象 在 Freescale i.MX53 QSB 网站上获取 BSP 包。 准备在您的计算机上安装 LTIB,请确保您需要All Boards LTIB 。 将所有图像传输到 SD 卡(它将被放置在 /rootfs/boot 下)。 配置您的 u-boot 环境变量。 启动你的主板。 如果您想通过 NFS 启动,请按照以下步骤操作。 在 Freescale i.MX 53 QSB 网站上获取 BSP 包。 准备你的电脑进行 LTIB 安装,注意你需要@all _boards_ltib 配置您的计算机以便能够提供 NFS 服务: 配置您的 TFTP 服务器。 配置您的 NFS 服务器。 配置您的 u-boot 环境变量。 启动你的主板。 请注意,您在 u-boot 变量上设置的内核命令行可以配置显示。 i.MX53 Linux
記事全体を表示
配置 Kinetis 软件开发套件 (SDK) 以使用红外 (IR) 传感器测量距离 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在本演示中,我们配置了 Kinetis SDK,使用 FRDM-K64F 和 GP2D12 红外传感器来实现测距仪。该传感器的工作原理是发送红外脉冲,并根据其与反射物体之间的现有距离产生不同的输出电压。其模拟输出约为 0.4 至 2.6 V;反射物体距离传感器越近,输出电压值越高;反射物体距离传感器越远,输出电压值越低。测量距离范围为 15 至 100 cm,如果传感器与反射物体之间的距离不在此范围内,则演示结果将不可靠。 下图描述了应用程序的框图 图 1.框图 从传感器接收到的信号通过 ADC 模块实例 0(ADC0_CH1)的 Channel_1,由低功耗定时器定期触发(每 125 µs)。获取每个 ADC 的样本后,将从总共 32 个样本中计算平均值,以确保 ADC 的值可靠,然后再使用它来计算当前距离。 该应用的示意图如下图所示 图2.示意图 实现该应用所需的电气连接说明如下 表 1.电气连接 下图显示了应用程序的流程图 图 3.流程图   应用程序中 ADC 初始化所需的配置如以下代码片段所示 static int32_t init_adc(uint32_t uiInstance) { /* * 初始化 ADC 为 * 10 位分辨率,中断模式,启用硬件触发器。* 正常转换速度,VREFH/L 作为参考,* 禁用连续转换模式。*/ ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig); adcUserConfig.intEnable = true; adcUserConfig.resolutionMode= kAdcResolutionBitOf10or11; adcUserConfig.hwTriggerEnable= true; adcUserConfig.continuousConvEnable= false; adcUserConfig.clkSrcMode = kAdcClkSrcOfAsynClk; ADC16_DRV_Init(uiInstance, &adcUserConfig); /* 将回调函数安装到 ISR 中。*/ ADC_TEST_InstallCallback(uiInstance, CHANNEL_0, MyADCIRQHandler); adcChnConfig.chnNum = IR_SENSOR_ADC_CHANNEL; adcChnConfig.diffEnable = false; adcChnConfig.intEnable = true; adcChnConfig.chnMux = kAdcChnMuxOfA; /* 配置通道0。*/ ADC16_DRV_ConfigConvChn(uiInstance, CHANNEL_0, &adcChnConfig); 返回 0; }   这是 ADC 的初始化,启用中断模式,将“true”值分配给变量adcUserConfig.intEnable ,通过kAdcResolutionBitOf10or11选择 10 位分辨率,使用adcUserConfig.hwTriggerEnable和adcUserConfig.continuousConvEnable启用硬件触发器并禁用连续转换,分别。此外,所选的时钟源是异步的, kAdcClkSrcOfAsynClk 。之后调用函数ADC16_DRV_Init ,该函数接收正在使用的 ADC uiInstance和指向包含用户选择的配置的结构adcUserConfig的指针作为参数。 函数ADC_TEST_InstallCallback安装中断回调,其参数是uiInstance 、将从中接收中断触发器的CHANNEL_0以及中断处理函数的名称My ADC1IRQHandler 。 ADC 读取通道的配置包括选择通道号adcChnConfig.chnNum (在本例中,使用的是CHANNEL_1 ),使用变量 adcChnConfig.diffEnable 禁用差分模式,触发中断在 adcChnConfig.intEnable 处启用,并使用adcChnConfig.chnMux通过kAdcChnMuxOfA选择 a/b 通道的通道多路复用器。 最后,调用函数ADC16_DRV_ConfigConvChn接收uiInstance编号、用于接收中断触发的CHANNEL_0以及指向配置ADC通道的结构adcChnConfig的指针。 ADC触发源初始化如下所示 void init_trigger_source(uint32_t uiAdcInstance){ lptmr_user_config_t lptmrUserConfig = { .timerMode= kLptmrTimerModeTimeCounter,.freeRunningEnable= false, .prescalerEnable= false, /* 绕过预分频器 */ .prescalerClockSource= kClockLptmrSrcMcgIrClk,/*使用MCGIRCCLK*/.isInterruptEnabled= false }; /* 初始化 LPTimer 驱动程序 */ LPTMR_DRV_Init(0, &lptmrUserConfig, &gLPTMRState); /* 设置 LPTimer 周期 */ LPTMR_DRV_SetTimerPeriodUs(0, LPTMR_COMPARE_VALUE); /* 启动 LPTimer */ LPTMR_DRV_Start(0); /* 配置 SIM 以选择 ADC 硬件触发源 */ SIM_HAL_SetAdcAlternativeTriggerCmd(gSimBaseAddr[0], uiAdcInstance, true); SIM_HAL_SetAdcPreTriggerMode(gSimBaseAddr[0], uiAdcInstance, kSimAdcPretrgselA); SIM_HAL_SetAdcTriggerMode(gSimBaseAddr[0], uiAdcInstance, kSimAdcTrgSelLptimer); }   LPTMR 的用户配置位于结构lptmrUserConfig中,这里 LPTMR 时间计数模式由kLptmrTimerModeTimeCounter选择,自由运行模式、预分频器和定时器中断分别通过freeRunningEnable 、 prescalerEnable和isInterruptEnbled禁用。此外,选择 LPTMR 时钟源作为内部参考时钟,并使用kClockLptmrSrcMcgIrClk 。 函数LPTMR_DRV_Init接收实例号、包含用户配置的结构lptmrUserConfig的指针以及包含 LPTMR 驱动程序内部信息的结构gLPTMRState的指针作为参数。 函数LPTMR_DRV_SetTimerPeriodUs为LPTMR设置相应的定时器周期,其参数为ADC实例和以us为单位保存周期值的LPTMR_COMPARE_VALUE 。LPTMR_COMPARE_VALUE 宏 位于 lptmr_trigger.c 中,可以进行设置文件。此外,用户将能够在 FreeMASTER 项目的变量监视部分中的执行时间内更改此周期,修改LPTMR 中断时间(us)的值并将LPTMR 时间标志设置为 1。 LPTMR_DRV_Start启动 LPTMR,其唯一参数是 ADC 实例。                                           最后,有三个函数用于配置 SIM 卡的 ADC 硬件触发源选择;它们接收 SIM 外设基地址数组初始化器、 gSimBaseAddr[0]和 uiAdcInstance 作为参数。函数SIM_HAL_SetAdcAlternativeTriggerCmd用于启用/禁用备用转换触发器;在本例中,它接收一个真值,因此启用了该触发器。此外, SIM_HAL_SetAdcPreTriggerMode用于选择预触发源;它的第三个参数是kSimAdcPretrgselA ,对应于预触发器 A。最后一个函数SIM_HAL_SetAdcTriggerMode用于选择触发源,因此它接收 kSimAdcTrgSelLptimer 。 以下代码片段展示了计算距离的算法 void GetCurrentDistanceValue(uint32_t uiAvgAdc) {     static uint32_t sdwCurrentDistance = 0;      uint32_t dwm = 0;     uint32_t dwb = 0;      if((520 <= uiAvgAdc) && (uiAvgAdc < 840))     {       dwm = 641;       dwb = 683970;     }     else if((260 <= uiAvgAdc) && (uiAvgAdc < 519))     {       dwm = 1337;       dwb = 1011000;     }     else if((130 <= uiAvgAdc) && (uiAvgAdc < 259))     {       dwm = 2941;       dwb = 1423500;     }     sdwCurrentDistance = (dwb-(dwm*uiAvgAdc));     g_dwDistanceIntegers = (sdwCurrentDistance/10000);     g_dwDistanceTenths = ((sdwCurrentDistance - (g_dwDistanceIntegers*10000))/1000); }            计算距离的实施算法基于将红外传感器行为的特性曲线划分为三个不同的部分,以使其近似于线性行为。每条线都是由两个不同的点生成的。当 uiAvgAdc 值介于 520 和 840(15 - 35 厘米)之间时使用第一行。第二个, uiAvgAdc值高于 260 且低于 519(40 - 65 厘米)。最后一个, uiAvgAdc值在 130 到 259 之间(70 - 100 厘米)。根据计算出的uiAvgAdc值,每条线的斜率 (dwm) 和与 y 轴的交点 (dwb) 都会发生变化。 为了使演示与不同的微控制器和 IDE 兼容,必须避免使用浮点变量来计算距离,以便结果可以毫无问题地打印在控制台上。每条线的斜率和与 y 轴的交点的实际值都乘以 10000。获取sdwCurrentDistance值后,将其分为整数和十分之一;为了获取g_dwDistanceIntegers中的整数,将当前距离除以 10000,并将十分之一的相应分数存储在g_dwDistanceTenths中。因此,当前距离值是结合整数和十分位变量打印的,避免使用浮点变量。   下图显示了特性曲线及其划分的三条线 图4.特性曲线图 应用测试结果如下表 1 距离测量值的误差约为±0.5厘米 2 ADC 平均值的误差约为 ± 5 个单位 表 2.测试结果 将红外传感器软件纳入KSDK的步骤 为了将此演示包含在 KSDK 结构中,需要将文件复制到正确的位置。distance_measure_IRsensor 文件夹应复制到 /demos 文件夹中。 如果文件夹被复制到错误的位置,项目和 makefile 中的路径将会被破坏。复制完成后,您的系统中应该有以下位置作为路径: /演示/距离测量传感器/iar /demos/distance_measure_IRsensor/kds /演示/距离测量IR传感器/src 此外,要构建和运行该演示,需要下载该演示支持的集成开发环境(IDE)之一: 飞思卡尔 Kinetis 设计工作室 (KDS) IAR Embedded Workbench   一旦在其中一个受支持的 IDE 中打开项目,请记住在构建项目之前构建 KSDK 库,如果它位于正确的位置,则不会出现错误,启动调试会话并运行演示。距离测量的结果将通过 UART 显示在控制台上(使用 115 200 作为波特率)和 FreeMASTER 上,就像下面的例子中反射物体位于距离红外传感器 35 厘米的位置: 图 5.控制台中显示的测量距离示例 图 6.使用 FreeMASTER 监控的红外传感器获取的 ADC 值示例 图 7. FreeMASTER 距离测量结果示例 FreeMASTER 配置 为了在 FreeMASTER 上可视化应用程序的结果, 需要为 FRDM-K64F 配置相应的连接类型: 1.打开FreeMaster。 2. 转到文件/打开项目。 3. 从 /demos/distance_measure_IRsensor/FreeMaster 打开 距离测量红外传感器 项目。 4. 转到项目/选项。 5. 在“通信”选项卡上,确保已标记“插件模块”选项并选择相应的连接类型。    图8. FRDM-K64F 在 FreeMASTER 上的连接对应配置 还需要为将要测试演示的IDE选择相应的MAP文件,因此: 6. 转到 MAP 文件选项卡。 7. 选择 IAR 或 KDS 项目的 MAP 文件。 *确保默认路径与您电脑上演示的 MAP 文件所在的路径相匹配。如果没有,您可以通过单击“...”按钮(见图 9)并选择 MAP 文件的正确路径来修改路径: /demos/distance_measure_IRsensor/iar/frdmk64f/debug/distance_measure_IRsensor_frdmk64f.out /demos/distance_measure_IRsensor/kds/frdmk64f/Debug/distance_measure_IRsensor_frdmk64f.elf 8.单击“确定”保存更改。 图 9.为演示支持的每个 IDE 选择 MAP 文件 我希望这个演示对您的应用程序有用,尽情享受吧! 概述
記事全体を表示
修复 i.MX6 Android ICS TextView 显示混乱问题的补丁 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Overview 本文档旨在提供补丁程序以修复基于 MX6 Android R13.4-GA 和 R13.4.1 ICS 版本的 TextView 显示混乱问题。请注意,这些补丁仅针对专门的问题进行基本验证。如果您发现这些补丁有任何副作用,请将注释添加到本文档中。 问题描述 软件:R13.4-GA 或 R13.4.1 Android 版本 硬件:i.MX6Dual/Quad SabreSD 板或 i.MX6DualLite SabreSD 板。 测试步骤: 安装 testviewtest.apk 运行此APK并输入文本,输入更多文本后,您将看到文本显示混乱。 您还可以从https://community.freescale.com/thread/303194获取问题描述 补丁 您可以从附件的 textview_fix.zip 中获取补丁。 对于 R13.4-GA,请应用以下补丁: kernel_imx,解压缩 Kernel/r13.4-ga/kernel-patch-r13.4-ga-gpu4.6.9p10.tar.gz 并应用补丁。 设备/fsl-proprietary/gpu-viv:解压缩gpu_lib/gpu-viv-lib-4.6.9p10-font-libGAL-crash-fix.tar.gz并替换lib文件夹。 对于 R13.4.1,请应用以下补丁: kernel_imx,应用补丁 Kernel/r13.4.1/0001-upgrade-gpu-4.6.9p10-kernel-driver_r13.4.1.patc 设备/fsl-proprietary/gpu-viv:解压缩gpu_lib/gpu-viv-lib-4.6.9p10-font-libGAL-crash-fix.tar.gz并替换lib文件夹。 Android i.MX6DL i.MX6 双核 i.MX6 四核 i.MX6S
記事全体を表示
电机控制类:处理器在环 (PIL) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在本视频中,我们讨论了如何使用处理器在环 (PIL) 方法生成 C 代码并在真实硬件上验证算法。 PIL模拟的主要目标是: - 在真实目标/微处理器上生成并执行 C 代码; - 通过提供优化软件的方法来帮助特定的算法和控制设计; - 建立生产代码的测试框架; PIL仿真还可以使用真实目标中的一些外围设备作为输入或输出,从而使仿真环境更加真实,更接近最终的SW设计规范。   我们讨论: - 什么是 PIL,何时使用它以及推荐用于什么; - 如何使用基于模型的设计工具箱将任何 Simulink 通用算法转换为使用 PIL 支持运行; - PIL参考模型; 注:中国观众可以通过此链接在优酷上观看视频 注意:中国观众可以使用此链接观看YOUKU上的视频 (在 “我的视频” 中查看) 视频库
記事全体を表示
如何基于 i.MX6 Android R13.4.1 支持 POR 重启的恢复模式 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Overview 本文档旨在介绍如何基于 MX6 Android R13.4.1 支持 POR 重启事件的恢复模式。 背景 如果您在 MX6 SabreSD 板上启动 Android R13.4.1,重启原因是 Watchdog。但如果重启原因从看门狗更改为 POR,则恢复出厂设置后将无法进入恢复模式。 在R13.4.1中,SRC_GPR10的位8被用作恢复模式的持久位。预计重启后该位将被保留,以便 U-boot 可以使用该位来区分应该进入哪种模式。但是,根据 i.MX6DQRM 第 59.4.1.2.3 节 IPP_RESET_B (POR),所有 SRC 寄存器都将在 POR 序列上重置。因此,当重启原因是 POR 时,即使软件在重启之前设置了恢复模式的持久位,也会被清除。这会导致引导加载程序在重启后无法进入恢复模式。 软件变更 根据 i.MX6DQRM,SNVS_LP 通用寄存器提供一个 32 位读写寄存器,任何应用程序可以使用它来在掉电模式下保留 32 位数据。因此,为了支持 POR 事件的恢复模式,可以使用 SNVS_LP 寄存器来存储恢复模式的持久位。需要应用以下更改(请参阅patches.tar.gz) 申请Uboot补丁bootable/bootloader/uboot-imx/0001-ENGR00235817-mx6-use-SNVS-LPGPR-register-to-store-bo.patch。 差异——git a/cpu/arm_cortexa8/mx6/generic.cb/cpu/arm_cortexa8/mx6/generic.c 索引 257c930..bd47130 100644 --- a/cpu/arm_cortexa8/mx6/generic.c +++b/cpu/arm_cortexa8/mx6/generic.c @@ -1146,14 +1146,14 @@ int check_and_clean_recovery_flag(无效) {   int flag_set = 0;   u32 reg; - reg = readl(SRC_BASE_ADDR + SRC_GPR10); + reg = readl(SNVS_BASE_ADDR + SNVS_LPGPR); flag_set = !!(reg & ANDROID_RECOVERY_BOOT); /* 清除它以免这里无限循环.... */ 如果(标志设置){ 注册&=~ANDROID_RECOVERY_BOOT; - 写入(reg,SRC_BASE_ADDR + SRC_GPR10); +写入(reg,SNVS_BASE_ADDR + SNVS_LPGPR);   } 返回 flag_set; @@ -1168,14 +1168,15 @@ int fastboot_check_and_clean_flag(无效) {   int flag_set = 0;   u32 reg; - reg = readl(SRC_BASE_ADDR + SRC_GPR10); + + reg = readl(SNVS_BASE_ADDR + SNVS_LPGPR);   flag_set = !!(reg & ANDROID_FASTBOOT_BOOT); /* 清除它以免这里无限循环.... */ 如果(标志设置){    reg &= ~ANDROID_FASTBOOT_BOOT; - 写入(reg,SRC_BASE_ADDR + SRC_GPR10); +写入(reg,SNVS_BASE_ADDR + SNVS_LPGPR);   } 返回 flag_set; 差异——git a/include/asm-arm/arch-mx6/mx6.hb/包括/asm-arm/arch-mx6/mx6.h index efb90c2..45381e2 100644 --- a/include/asm-arm/arch-mx6/mx6.h +++b/include/asm-arm/arch-mx6/mx6.h @@ -732,6 +732,8 @@ #定义SRC_GPR9 0x40 #定义 SRC_GPR10 0x44 +#定义 SNVS_LPGPR 0x68 + /* 获取主板 ID */ #定义 board_is_rev(system_rev,rev) (((system_rev & 0x0F00) == rev) ? 1 : 0) #定义chip_is_type(system_rev,rev)\ 申请内核补丁 kernel_imx/0001-ENGR00235817-mx6-use-SNVS-LPGPR-register-to-store-bo.patch 差异——git a/arch/arm/mach-mx6/system.cb/arch/arm/mach-mx6/system.c 索引 6d24f22..61649c5 100644 --- a/arch/arm/mach-mx6/system.c +++b/arch/arm/mach-mx6/系统.c @@ -563,7 +563,7 @@ void mxc_clear_mfgmode(void) #endif #ifdef CONFIG_MXC_REBOOT_ANDROID_CMD -/* 该函数将在 SRC_GPR10[7-8] 位上设置一个位来进入 +/* 该函数将在 SNVS_LPGPR[7-8] 位上设置一个位来输入 * 特殊启动模式。这些位不会通过看门狗复位清除,因此 * 可以通过引导加载程序检查来选择进入不同的模式。*/ @@ -574,18 +574,18 @@ void do_switch_recovery(void) {   u32 reg; - reg = __raw_readl(SRC_BASE_ADDR + SRC_GPR10); + reg = __raw_readl(MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR); 注册|= ANDROID_RECOVERY_BOOT; - __raw_writel(reg,SRC_BASE_ADDR + SRC_GPR10); + __raw_writel(reg, MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR); } void do_switch_fastboot(void) {   u32 reg; - reg = __raw_readl(SRC_BASE_ADDR + SRC_GPR10); + reg = __raw_readl(MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR);   reg |= ANDROID_FASTBOOT_BOOT; - __raw_writel(reg,SRC_BASE_ADDR + SRC_GPR10); + __raw_writel(reg, MX6Q_SNVS_BASE_ADDR + SNVS_LPGPR); } #endif 差异——git a / arch / arm / plat-mxc / include / mach / mx6.hb/arch/arm/plat-mxc/include/mach/mx6.h index 48b04b1..bb22de0 100644 --- a/arch/arm/plat-mxc/include/mach/mx6.h +++b/arch/arm/plat-mxc/include/mach/mx6.h @@ -302,6 +302,8 @@ #定义SRC_GPR9 0x40 #定义SRC_GPR10 0x44 +#定义 SNVS_LPGPR 0x68 + /* GPC偏移量 */ #定义 MXC_GPC_CNTR_OFFSET 0x0 Android i.MX6_全部
記事全体を表示
KE KEA看门狗无法复位问题分析 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在KE KEA实际使用过程中,很多客户遇到了看门狗无法复位的问题。有些客户发现当他们想要启用看门狗时,却无法通过设置寄存器 WDOG_CS1 中的 EN 位置位来真正启用看门狗;有些客户发现在调试模式下,WDOG_S1 寄存器的 EN 位始终是清零的,但从参考手册来看,该位应该在复位后设置,即使他们检查了代码,也确保没有禁用看门狗;还有一些客户发现当他们使用 KEXX_DRIVERS_V1.2.1_DEVD 代码时,自己设置了超时值寄存器,但看门狗无法在超时值内复位。现针对这些问题,本文进行分析并给出避免这些问题的建议。 从以上问题描述中,我们可以得知,导致这些问题的原因其实主要有两个:1、软件配置;2、调试器的使用 1.软件配置 1)启动代码禁用看门狗 在KE KEA示例代码中,芯片复位后会首先进入启动代码,启动代码总是先禁用看门狗,如果看门狗被禁用,则不能仅通过设置寄存器WDOG_CS1中的EN位置位来启用看门狗,因为寄存器WDOG_CS1中的EN位是复位后只能写入一次的位。仅当设置了 UPDATE 位并且执行解锁写入序列后经过 128 个总线时钟才可以修改它。 现在如何在启动代码中找到禁用代码?以KEXX_DRIVERS_V1.2.1_DEVD示例代码为例 IAR:从crt0.s中,会在启动函数中找到看门狗禁用代码WDOG_DisableWDOGEnableUpdate();。 上面的IAR启动图片是针对KE的,但是在KEA启动文件中,您无法在从飞思卡尔网站下载的KEA示例代码中看到启动函数,只有在重置发生后才能在cstartup_M_KEA128.s中找到__iar_program_start,但是__iar_program_start函数在哪里,无法在整个项目中搜索到它。其实__iar_program_start是默认的程序入口函数,它包含以下函数: 你会发现它会进入__low_level_init函数,看门狗禁用代码就在__low_level_init函数中。 MDK:来自 startup_MK0XZ4.s将会在SystemInit函数中找到看门狗禁用代码。 Codewarrior:来自__arm_start.c文件,会在__init_hardware函数中找到看门狗禁用代码。 2)Codewarrior脚本init_kinetis.tcl禁用看门狗 对于 Codewarrior,只需在 __arm_start.c 中注释禁用看门狗代码文件不足以检查复位后的看门狗启用情况,因为在codewarrior连接脚本init_kinetis.tcl中,还有看门狗禁用代码。 如果要在复位后找到寄存器 WDOG_S1 中 EN 位的状态,则必须禁用所有这些看门狗禁用代码。 3)超时寄存器配置不正确 从头文件MKE02Z2.h中,我们可以发现超时寄存器定义如下: 联合 { /* 偏移量:0x4 */ __IO uint16_t TOVAL; /**< WDOG_TOVAL 寄存器,偏移量:0x4 */ 结构 { /* 偏移量:0x4 */ __IO uint8_t TOVALH; /**< 看门狗超时值寄存器:高,偏移量:0x4 */ __IO uint8_t TOVALL; /**< 看门狗超时值寄存器:低,偏移量:0x5 */     } TOVAL8B; 这种结构意味着客户可以通过单独的 unit8 TOVALH、TOVALL 来定义看门狗超时值,或者仅使用 unint16 TOVAL 来定义它。但实际上在IAR项目使用中,举个例子,使用1khz作为看门狗的时钟源,然后要将超时值设置为1s,这意味着超时值应该是1000=0x03e8,所以其中一个客户这样配置它: 您可以发现,我们需要TOVALL = 0XE8,TOVALH = 0X03,但从测试结果来看,寄存器是TOVALL = 0X03,TOVALH = 0Xe8,这将导致超时值远大于1000,这就是为什么客户无法在1秒后重置mcu,因为寄存器配置不正确。这是由 IAR int16 存储字节序模式引起的,默认的 IAR 字节序模式是小端模式。 所以在实际使用中,建议使用单独的超时值定义。 2. debugger usage 在使用 IDE 进行调试模式时,一些客户发现即使他们注释掉所有看门狗禁用代码,他们仍然无法通过看门狗重置 MCU。检查寄存器WDOG_S1后,位EN为0,表示看门狗被禁用。但从参考手册中我们得知,复位后,EN位应该为1。是什么原因造成的?经过测试,我们发现这实际上是由调试器,即您正在使用的调试器硬件引起的。例如,在同一个项目中,已经注释了所有看门狗禁用代码,SEGGER JLINK仍然会禁用看门狗,但是PE opensda或PE multilink不会这样做,EN位默认启用,以下是测试图片,以codewarrior为例: 1) JLINK 2)PE Opensda 或 PE Multilink 因此,如果您想在调试模式下测试看门狗,并希望在重置后设置 EN,您可以选择 PE 调试器工具而不是 JLINK,但此 JLINK 功能只会影响调试模式,在将代码下载到芯片闪存后,重置后,WDOG_S1 中的 EN 位仍将被设置。 希望本文档能够帮助您解决看门狗无法重置的问题。 Freedom开发平台 Kinetis E系列MCU Kinetis EA系列MCU
記事全体を表示