问题标签 [nrf52]
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.
linker - nrf52 S132 引导加载程序的链接描述文件
我目前正在构建适用于双通道 DFU 和 SD132 的引导加载程序。它在 nrf52832 上,目前在 PCA10040 上。虽然链接器脚本有效,并创建了一个十六进制文件,但我留下了一个app_error_code 1
after nrf_sdh_enable_request()
, from sd_softdevice_enable()
。
是LS的错吗?我完全错过了标记吗?或者是完全不同的东西。随意询问更多细节,我已经包括了 LS,因为我不确定还要添加什么。
谢谢
以下是我到目前为止所拥有的,由 SDK 中的各种示例拼凑而成。
bluetooth-lowenergy - clion IDE 中的 nrfjprog 权限问题
我在 Mac ox 上使用 Nordic Semiconductor 的 nrf52。设置已完成并使用此方法工作得很好
我在使用 IDE 进行闪存期间遇到问题。当然,我正在使用 nrfjprog 进行闪烁。nrfjprog 正在与
终端,但不使用 clion IDE。
这是输出
这是 nrfjprog 文件夹的权限
这个 IDE 是否需要某种权限才能使用 nrfjprog 文件夹,因为终端没有问题来刷新。
android - Android 和 NRF52832 之间的间歇性 BLE 吞吐量问题
我正在寻求帮助来确定我遇到的间歇性 BLE 吞吐量问题的原因。
设置:
我有一部运行 android 7.1.1 的手机(nexus 5x),带有一个通过 BLE 连接到 3 个传感器的自定义应用程序。传感器基于 Nordic NRF52832 并运行自定义固件。我没有编写北欧固件,但有人告诉我它使用 nrf5_SDK_v12.2 S132 sdk / 软设备。Nordic 通过 Nordic UART Service (NUS) 将传感器数据流式传输到手机。
问题:
通常我会运行我的应用程序,连接到传感器,然后将数据从传感器传输到手机上。当一切按预期工作时,我看到每个传感器的平均数据吞吐量约为 2250 Bps(在电话上测量)。但偶尔我会得到 1 或 2 个传感器(可能总是 2 个,老实说记不清了),吞吐量会大大降低。当吞吐量降低时,我通常会看到吞吐量降低的传感器的 750Bps - 1500Bps,但未受影响传感器的吞吐量保持不变。我从未观察到系统以全带宽运行到所有 3 个传感器,然后突然降低 2 个传感器的吞吐量,反之亦然。似乎一旦建立连接,它要么是全速连接,要么是低速连接。
我尝试过/排除的事情:
- 起初我认为这是一个 RF 问题,所以我开始记录手机端每个传感器的 RSSI。查看日志后,它似乎不是 RF 问题。我观察到系统的全吞吐量运行,RSSI 低至 -90dB,而 RSSI 高达 -40dB 时吞吐量降低。
- 我的第二个问题是传感器可能存在某种问题,导致它们以降低的速度产生数据。为了检查这一点,我首先记录了从 NUS 数据特征通知(在手机上)收到的所有字节数。当传感器带宽减少时,我看到特性变化总是导致手机接收到 20 个字节(MTU -3)。这让我相信传感器上的 BLE 子系统没有跟上传感器产生的数据。我通过将调试器连接到 Nordic 芯片并在通过 ble NUS 发送测量值之前观察用于缓冲测量值的缓冲区进一步验证了这一结论,我观察到样本被丢弃是因为缓冲区已满。
- 此外,我不认为是我的应用程序导致了减速。我已经做到了,我不会在 onCharacteristicChanged() 回调中徘徊。我的应用程序只是将新字节存放在队列中以由另一个线程处理。
- 在 OnConnectionStateChanged() 中建立 gatt 连接后,我通过在电话上调用 gatt.RequestConnectionPriority(GattConnectionPriority.High) 为每个传感器请求了一个高优先级连接。
- 我已将 Nordic 上的最小/最大连接间隔设置为 12.5 毫秒
我的结论/问题
根据我的观察,似乎在建立连接时发生了一些事情,导致手机或传感器减少了连接的带宽。在 MTU / 连接间隔 (CI) 之外,我不确定哪些参数可能导致连接吞吐量下降。
- 关于为什么我间歇性地遇到这些吞吐量问题的任何想法?
- 我有一种直觉,android BLE 堆栈正在做我不希望它做的事情,但它在连接属性方面有点像一个黑盒子,任何想法......它可能会改变什么?我如何检测到它故意减慢连接速度?
完全免责声明,我的手机应用程序是用 C# 为 Xamarin 编写的,但我认为这无关紧要。
谢谢!
synchronization - SPI 从机数据移位 4 位
我正在使用连接到 DW1000 模块的 nRF52832 芯片。问题是从 DW1000 请求数据时,缺少第一个字节。该芯片应该发送 0xDECA0130,但我收到的是 0xCA0130FF。当我使接收缓冲区变大时,会出现丢失的 0xDE(传输从最低字节开始)。我的问题是,这是如何以及为什么会发生的。
配置
SPI 配置是根据 DW1000 的数据表进行的,使用 nRF SPI 驱动程序。这包括
- SPI 默认频率设置为 1MHz
- SPI 片选引脚配置为低电平有效
- 使用 SPI 模式 0
- MSB 优先传输
在开始通信之前,DW1000 通过将其复位引脚拉低来复位,并在释放之前保持低电平足够长的时间。复位后,主机等待一段时间让模块启动。之后,第一件事是将所述值作为 32 位寄存器值读取。
nRF 设置
nRF 设置包括
- 启用 SPI 和 SPI0
- SPI0 easyDMA 禁用
- 读取值包括
nrf_drv_spi_transfer
所述配置和 4 字节的缓冲区长度
采取的步骤
我已经尝试了以下事情,但没有解决任何问题:
- 更改 SPI 频率
- 更改 SPI 模式*
- 重置后等待时间增加
- 传输之间的等待时间增加
- 更改 MISO 上拉配置*
- 手动片选(包括上拉配置*)
标有 (*) 的步骤我知道它们不应该解决问题。
不幸的是,它是一个嵌入式设备,所以我无法访问 CLK 和 MISO 引脚来连接示波器。
我感谢您对此事的任何意见。
cloud - 如何在 nrfcloud 上显示更多位数?
我已经设置了一个使用 nrfconnect 和 nrf52 dk 将数据上传到 nrfcloud 的环境。我只能上传数据到 ff 然后它重置为零。我上传的值是一个整数值,所以我想显示数字云上从 0 到至少 32000。这是迄今为止的云图像。我已经使用此页面中的代码通过通知将数据上传到云。我必须如何增加从 00 到 0000 的位数最大值为 65585 的服务。我必须更改代码吗?请帮助
这是通知处理程序代码。
ble_cus_custom_value_update() 代码是
/* 此代码属于 ble_cus.c 中的 ble_cus_custom_value_update() */
// 初始化值结构。memset(&gatts_value, 0, sizeof(gatts_value));
android - 如何在 BLE Central (Mobile) 和 Peripheral 之间同步通信?
我正在开发一个 BLE 应用程序。我已经完成了在移动应用程序(CENTRAL - BluetoothGattClient)和外围设备(GATT SERVER)之间建立通信,尽管不是很整齐。
PERIPHERAL 有一项服务,该服务又具有 CENTRAL 已启用通知的单一特征。双方的读/写都是通过这个特性发生的
这是来自 CENTRAL(移动)端的完整通信流程
问题 1
有时,在接收来自 PERIPHERAL 的多个数据包时,我会在完成写入 ACK(步骤 9)之前收到读取通知 - 'onCharcteristicChanged()',即在 onCharctristicWrite() 之前调用 onCharcteristicChanged()。
在这种情况下,虽然我发出 bleGatt.readCharacteristic(charac) 但 onCharactristicRead() 永远不会被调用。中央卡住了。等待时无法读取。
问题 2
有时,在发送 ACK 时,在发出 bleGatt.writeCharactristic(charac) 后,不会调用 onChactristicWrite(),因此 PERIPHERAL 没有收到 ACK 并且通信停止。
问题 3
整体沟通非常缓慢。写入一大块(<=20 字节)数据需要 > 400 毫秒。
有没有更好的策略来正确同步读/写?我试图通过使用 BluetoothGattCallbacks 来做到这一点,但正如解释的那样,它无法正常工作。
可以做些什么来提高通信速度?
READ 和 WRITE 都发生在同一个线程中。
我已经在 Moto E (Marshmallow)、Moto G5 (Nougat) 和 Samsung S6 (Lollipop) 上对此进行了测试。跨设备的行为是一致的。
我的外围设备是nRF52840。
谢谢
c - 为什么将函数插入示例代码后出现错误?
为令人难以置信的模糊标题道歉;我将在这里尝试更具体。
我正在 SEGGER Embedded Studio IDE 中的 NRF52832 微控制器上开发一个程序,该程序通过 SPI 从外部 ADC 接收数据并输出占空比取决于 ADC 数据的 PWM 信号。
我得到了在不同项目中工作的 SPI 驱动程序和 PWM 驱动程序的示例代码,现在我正在尝试将两者结合起来。但是,当我从 PWM 驱动程序向 SPI 驱动程序插入一个函数并在 SPI 驱动程序中插入相应的包含文件时,我在一个(看似)不相关的头文件中出现错误。这是一个具体的例子:
(1)我添加宏
到 SPI 驱动程序来初始化一个 PWM 实例,就像 PWM 驱动程序一样。当然,如果没有包含宏定义的头文件,我会得到一个错误。
(2) 所以,我包含头文件:
编译器接受新的头文件和添加的宏,但由于 nrfx_timer.h 头文件中间出现以下错误,构建失败:
错误指向定义 .instance_id 的行
知道为什么会发生这种情况吗?
c - 从示例代码卡在源文件中的函数中
我正在 Netbeans IDE 中的 C 中的 NRF52832 微控制器上开发一个程序,该程序通过 SPI 从外部 ADC 接收数据并输出占空比取决于来自 ADC 的数据的 PWM 信号。
我得到了在不同项目中工作的 SPI 驱动程序和 PWM 驱动程序的示例代码,现在我正在尝试将两者结合起来。但是,当我从 PWM 驱动程序向 SPI 驱动程序插入一个函数并在 SPI 驱动程序中插入相应的包含文件时,我陷入了作为示例代码一部分包含的源文件中的 if 循环。我已经到了一个我什至不知道如何开始故障排除的地步,所以任何建议或见解都会受到赞赏。
我目前正在使用工作正常的 SPI 驱动程序,直到我在 main.c 中添加以下代码:
当我调试时,一切都很好,直到我得到这个功能
当我单步执行此函数时,它会进行一系列幕后初始化,然后卡在以下函数中:
这是我的 main.c 代码的其余部分(与 pwm 相关的所有内容都是我添加的,其余的是 SPI 驱动程序的示例代码):
非常感谢任何和所有建议!如果我遗漏了任何关键信息,请要求澄清,我会尽我所能。
更新
嘿伙计们,非常感谢您的回复。我已经创建了一个循环的 Imgur 专辑,因为我使用(希望)图像中屏幕左侧的所有相关变量及其值进行调试:https ://imgur.com/a/HYah1yC
正如您在专辑中看到的那样,指针*p_rd_idx
在内部不断增加,nrf_log_frontend.c
并且由于某种原因永远不会到达函数的末尾。
@Yunnosch:我找到了以下定义ASSERT
:
但我认为它没有用,因为 is 的值,expr
当OUT_OF_SCOPE
我尝试右键单击并转到 的声明时expr
,什么也没有发生。
bluetooth-lowenergy - 我想使用带有旋转编码器的 Adafruit nrf52 羽毛。我想看看发送媒体和其他控制键的工作示例
我想使用 Adafruit nrf52 羽毛来构建一个蓝牙键盘模拟器。我想看一个发送媒体和其他控制键的工作示例。
c - for 循环中的 AT 命令
我正在尝试从Nordic NRF52执行 AT 命令。我正在使用带有内置函数的Nordic UART 模块app_uart_put(uint8_t byte)
,该函数调用将 AT 命令放在 UART 上。接收 AT 命令的节点是一个EE-NBIoT 模块,它在 postfix 上触发\r\n
。当我运行以下代码时,我得到了确定。
但是我想做一个更可重用的代码,所以我写了下面的writeCommand函数。
当我如下所示运行这个函数时,我得到了错误。
为什么这不起作用?当我查看传出命令时,它们是相等的。