问题标签 [nxp-microcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1200 浏览

embedded - 解释 Cortex M4 硬故障错误调试信息

对不起 - 这很长!我确定我会得到一些 TL;DR。:/

我对 Cortex M3/4 的世界一点也不陌生。过去我遇到过很多硬故障错误,无一例外都是由于 FreeRTOS 上的堆栈溢出造成的。但是,在这种情况下,我真的很难在一个系统上找到一个硬故障,该系统有我稍微修改过的其他人的旧代码。

我有一个带 LCD 和触摸屏的系统。我们有新硬件,除了从 LPC1788 变为等效的插入式 LPC4088 并且触摸屏是 I2C 而不是 SPI 之外,它几乎与旧硬件相同。

我正在使用 Keil uvision(对我来说是新的)和一个 M4 内核的 NXP4088 和使用 C/C++ 混合的 Keil RL-ARM RTOS(对我来说也是新的),C++ 也不是我有太多经验的东西和。除此之外,还有 Segger emWin(我从未使用过)封闭源代码,它似乎总是在崩溃。它会渲染几个屏幕,读取触摸屏按钮等,然后摔倒。有时它会立即倒下。

我遵循了这个:

http://www.keil.com/appnotes/files/apnt209.pdf

我附上了调试器/IDE 在下面崩溃时的图片(点击放大)。

在此处输入图像描述

当它崩溃时,操作系统中突出显示的绿色任务无一例外是 ApplicationTask(我没有修改)。

如果我正确读取信息,Keil uvision 调试器会告诉我正在使用的堆栈是地址为 0x20003238 的 MSP 堆栈。下面有一个内存转储:

在此处输入图像描述

如果我理解正确,这意味着 R0、2、3 和 12 为 0,程序计数器为 0,LR 和 PSR 也是。但是,这与第一张图片中的 Call Stack + Locals 窗口中的内容背道而驰。如果我右键单击 ApplicationTask:4 下的 0x00005A50 并选择调用者代码,它告诉我它是

我认为这是在 emWin 二进制 blob 中。

但是,如果我查看 0x20001B60 (这是PSP堆栈值),如下所示:

在此处输入图像描述

这似乎与 Call Stack + Local Window 告诉我的相符得多。它似乎也告诉我它在 emWin 中崩溃了,并且广泛的谷歌搜索显示 Segger 总是完全不考虑他们的封闭源代码可能有问题的任何可能性。公平地说,在我修改代码以使用 I2C 触摸屏界面而不是 SPI 之前,它不太可能正常工作。但是,它在哪里崩溃(或似乎是)与我修改的代码无关。

此外,下面的这个窗口:

在此处输入图像描述

将 BFAR 地址指定为 0xF00B4DDA,将内存管理器故障地址指定为 0xF00B4DDA。我不知道我是否应该将其解释为问题所在。

我在网络上找到了其他一些帖子,其中一个与 Stack Overflow 上的帖子惊人地相似(但都没有与之相关的解决方案),人们也有同样的问题。

所以,我的问题是:

  1. 我是否正确阅读了这些数据并理解了我链接到的 Keil 文档?我真的觉得我一定错过了这个 MSP/PSP 问题。

  2. 我是否正确使用带有uvision的调用者代码功能?我右键单击 ApplicationTask:4 下面的 Call Stack + Locals 地址的那一点,它似乎总是把我带到一些我无法检查的 Segger 代码,当然这不是问题所在。

  3. 我真的应该将问题作为总线故障地址来读取,并尝试读取或写入保留空间的 0xF00B4DDA 吗?

  4. 我尝试实现一段代码,例如:

https://blog.frankvh.com/2011/12/07/cortex-m3-m4-hard-fault-handler/

但这只会阻止整个系统正常运行,并在一些初始化代码中以 BKPT 指令结束。最重要的是,我不相信这种事情会比 uvision 告诉我更多,除了它显示我稍微快一点并且零努力。我在后一个假设中是对的吗?

0 投票
1 回答
213 浏览

linux-device-driver - 电源pc e500 / p1020。以原子方式读取 64 位(2x32 位寄存器)

我刚刚开始使用 P1020 PowerPC IC 并遇到了我的第一个问题。我正在查看 P1020 参考手册和 e500 ppc 文档,但找不到我的问题的答案。

如何读取 64 位值 - 创建为时基模块的两个 32 位低 TBL 和 32 位高 TBU 寄存器 - 并防止竞争条件?是否保证该值正确(寄存器被锁存?)。有没有可以以原子方式读取两个寄存器的汇编指令?我在哪里可以在文档中找到此类信息?谢谢

0 投票
1 回答
542 浏览

filter - Flexcan 不应用所有过滤器

我用MK24F12。我调整了 Flexcan 模块以使用车队管理系统接口从设备收集消息。我打开了 RxFIFO 并将 ID 接受模式设置为格式 A。然后我用 ID 填充过滤表(它从第 7 个邮箱开始),并根据 RXIMR 寄存器用掩码填充。我用 0x40000000 填充其余过滤器,用 0x5FFFFFFF 填充其余掩码寄存器。当我开始收听设备时,我得到了一些帧,但问题是我没有收到设备发送的所有消息,尽管它们匹配过滤器。我知道,因为如果我将任何掩码寄存器设置为零,我会在总线上收到所有消息。我注意到命中过滤器(RXFIR 寄存器)是(0,1,4,5,...),所以换句话说,我得到的消息与存储在 MailBox 的寄存器 CSn 和 IDn​​ 中的过滤器匹配。

下面是日志,在这里我添加了 7 个过滤器,我只收到了 4 种类型的消息。然后我删除了所有过滤器,如您所见,我跳过了很多应该被捕获的消息。

这是FlexCAN 寄存器值的图片

0 投票
1 回答
112 浏览

arm - NXP lpc43s50处理器编程

我想使用 NXP LPC 43s50 arm 处理器来控制接口电路,但我不知道如何将我的代码发送到处理器中。请为处理器编程推荐套件和程序。

0 投票
3 回答
1874 浏览

linker - 如何在 Cortex M0+ 上使用链接描述文件复制中断向量表?

首先,我希望我不是在问以前已经问过的东西。我已经尽可能多地搜索了,但我没有找到针对我的具体问题的答案或有用的东西。

我正在开发运行 Cortex M0+ 内核的 FRDM-KL82Z 板。我正在使用 MCUXpresso IDE v10.0.2 和 Segger J-Link 程序员,尽管我认为这与这个问题无关。

该项目将需要一个自定义引导加载程序和由不同开发人员编写的应用程序,每个块都有自己的闪存空间:引导加载程序为 8K,应用程序为 120K(这可能会在未来发生变化,但目前没什么大不了的)。

一旦引导加载程序完成,它将管理到应用程序空间的跳转,应用程序将更改向量表偏移寄存器 (VTOR),以便中断向量表从引导 IVT 更改为应用程序 IVT。这已经成功地测试过了。

我的目标是设置链接器脚本文件,以便应用程序开发人员可以在引导加载程序完成之前在板上构建和调试他们的项目,因为它们将同时被开发。这样做的原因是他们可以使用应用程序空间,因为它将在最终版本中。

我认为重置向量和配置位必须位于它们的默认位置,因为硬件每次需要读取它们时都会转到相同的位置。

我的第一个想法是禁用自动链接器脚本生成并修改MyProject_Debug.ld文件。

脚本自动生成的内容:

我试图在本指南中找到有关 de GNU 链接器的信息,但我的想法到目前为止还没有奏效。我试过的:

  1. 在 Config Words 之后将位置计数器设置为不同的值,并复制在文本部分之前剪切的 ISR_vector 代码:

    /li>

当我这样做并打开 .hex 文件时,配置字 (0x400) 和应用程序空间 (0x2000) 的开头之间的空间实际上是空的(充满 0xFF),但 0x2000 之后的代码与 IVT 表完全不同.

  1. 如果我在 IVT 代码行之前将位置计数器移动到 0x2000 ,它会有效地将 IVT 地址移动到 0x2000 位置。为此,我将 Config Words 部分移到 IVT 部分之前,因为定位计数器不能向后移动。

  2. 我已经尝试在内存映射中创建一个 Bootloader 部分,具有正确的起始和长度位置,并将默认情况下放置在 PROGRAM_FLASH 部分中的每一行复制到一个新的去 BOOTLOADER(与 ">BOOTLOADER 相同的代码“ 在最后)。在这种情况下,de IVT 仅出现在引导空间中。

链接描述文件是否有可能仅将 de IVT 放置在指示它的第一个位置,然后忽略所有其他调用?我究竟做错了什么?我应该尝试另一种方法来实现这一目标吗?

非常感谢,我知道它很长!

0 投票
1 回答
606 浏览

mifare - APDU 响应 910B 对 DESFire EV2 卡意味着什么?

我正在通过 DESFire 命令将 DESFire EV1 和 DESFire EV2 卡编程为包装的 APDU。当一张卡片出现时,我使用 GetVersion 命令来获取 UID(然后我用它来查找卡片历史记录和多样化密钥)。我发送此命令以获取卡版本信息:

通常我会收到一些字节的响应,并91 AF表明有更多信息需要我们根据文档重复等。这适用于 DESFire EV1 和 DESFire EV2 卡,直到我们在 OMNIKEY 5x21 读卡器中使用它们(读卡器在两种型号的 HID 卡打印机中,HDP5000 和 DTC4500e)。当我们这样做时,我们得到响应但91 0B 没有数据——但仅从 EV2 卡我们看不到 EV1 的问题。我没有在任何地方看到此回复,我不清楚这可能意味着什么。

重申一下——我们只在配备 DESFire EV2 卡的全能读卡器中看到这一点。DESFire EV1 卡不这样做,我们在其他读卡器上根本没有看到这一点(到目前为止)。

我们在轮换牌方面取得了一些有限的成功。我们的一位远程工程师在卡的特定方向上取得了成功,这表明存在一些 EM/范围/天线问题,但到目前为止,QA 和生产根本无法重现这一点。

我也将这个问题发布到 NXP 论坛,但没有任何回应。这篇文章有更多细节。


2020 年更新:我很高兴91 0B再次遇到来自 Desfire 卡的回复,搜索错误并找到我多年前的旧帖子。情况完全不同,但我现在可以补充这么多:91 0B手段的回应:

在不支持该命令的状态下接收命令,或者接收到完全未知的命令。

0 投票
1 回答
200 浏览

debugging - 使用 Keil IDE 使用 NXP LPC43xx 进行双核调试

我正在使用具有 M4 和 M0 内核的 NXP LPC4357,更具体地说,我使用的是 Keil MCB4300 开发板。我有一个在其上运行的演示应用程序,我能够构建它并在两个内核上运行它。我遇到的问题是无法在 M0 内核上设置断点。我可以在 M4 内核上做的很好,但是我知道在 M0 内核上执行的代码永远不会触发断点。我在这里读过:https ://host.lpcware.com/zh-hans/node/1105959在 M0 核心的调试设置中“连接后重置”应该被禁用。我试过了,但它对我不起作用。

这是我的项目设置:

M4芯:

M4 内存设置

M4 调试设置

M0芯:M0 内存设置

M0 调试设置

0 投票
1 回答
588 浏览

yocto - qt5 yocto 支持 i.mx7 并支持 pxp

我正在研究i.mx7dyocto。现在我想用 为 i.mx7 编译 Qt5 映像pxp support,因为 i.mx7d 没有gpu。所以我想启用 pxp 支持。
谁能指导我如何在 yocto 中启用 pxp 并在船上进行测试。提前致谢。

我看过一些视频,它们在 youtube 中显示了 i.mx7 中的 qt 支持。

注意:如果buildroot有任何支持,请告诉我

0 投票
1 回答
216 浏览

google-cast - Android Things Developer Preview 6.1 是否支持 Google Cast

NXP i.MX7D是否通过 Android Things 支持 Google Cast?Android Things 版本:开发者预览版 6.1,其中包含 11.6.0 播放服务。

我们需要在带有 Android Things 的电视等外部显示器上显示 UI,但 Google Cast 功能似乎不适用于 Chrome Cast。

为了测试我们操纵源代码的代码,使其可以在 Android 设备上运行;运行良好。但是当我们在 Things 上试用它时,它并没有发现任何要投射的设备。

我们还使用 Google 示例尝试了类似的程序- CastRemoteDisplay-android 上面的示例适用于 Android 设备,但同样不适用于 Android Things 6.1 开发者预览版;在进行必要的更改以在 Things 上运行之后

我们还尝试了 10.x 和 11.x 的不同 Play Services 版本 我们还尝试将 API 级别从 23 更改为 27 但所有结果都相同

找不到投射设备的事情

注意:我没有包含任何代码或堆栈跟踪,因为我觉得这不是必需的。但是,如果任何人要求将发布所需的日志

0 投票
1 回答
146 浏览

c - 下面的操作是什么意思?

我不明白嵌入式 C 中的以下操作是什么意思?

从参考手册中,我发现

  • 向量编号 — 处理中断时存储在堆栈中的值。
  • IRQ 编号 — 非核心中断源计数,即向量编号减 16。

但是为什么是32的模除呢?