问题标签 [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.
c - 通过 NRF52840 读取 CSV 文件
我正在尝试读取可以在 Nordic NRF52840 中写入的 CSV 文件。文件类型为 CSV。该文件本身只是一个 ID 值,旁边有一些传感器/数据值。
我也希望能够读取该文件。最好根据 ID 值读取一行。但是我在读取数据时遇到了问题。在我的终端中,我可以看到该文件存在,并且从我的读取函数中找到了文件大小。但是,当我尝试读取文件时。它读取了 0 个字节。
下面是我阅读 CSV 的代码,任何提示都会非常感谢。
这是我的终端的输出。如您所见,它识别了一个名为 data.csv 的文件及其大小,但不读取任何数据。
据我了解,代码 f_read 将 bytesRead 设置为 0。我正在使用 FA_OPEN_APPEND 打开文件。下面是传递给 read 函数的 sdk 参数:
build - 添加自定义源文件后,在 Segger Embedded Studio 上构建失败,没有说明原因
我正在从 nRF SDK 修改一个简单的示例项目(blinky)。我在项目目录内的新文件夹中添加了一个头文件和一个 .c 文件,然后将该路径添加./lib
到 common preprocessor user include directories
。然后我将标题包含在main.c
. 我可以自己编译新库,但是当我构建整个项目时,我得到Build failed
了错误,没有明确的理由跟进。
这是一张图片:
这里有人知道如何打败这个吗?
c - 蓝牙 gatt 连接全局变量不变
当我的系统 gatt 连接未建立时,我遇到了一个 if 语句未通过的问题。
语境
我有一个使用 C 语言编程的 NRF52840-dk 板的 BLE 系统。我还有一个移动应用程序,它通过 Gatt 连接与该板通信。我有一个具有单一特征的单一服务。我从我的移动应用程序中写入此特性,并从中进行一些处理。目前我可以发送时间戳并开始存储数据。但是,我需要通过此连接将数据发送回我的移动设备。
所以我有一个命令从手机发送来询问一些数据。然后,这应该通过更改特征值将数据发送回手机。
在我可以更改值之前,我需要查看命令是否已发出。但是,由于设备的优先级和限制,我需要在主函数中而不是在我已经完成时间戳的 BLE 中断中进行此处理。这是因为我最终将要传输的数据会很大。
然而,我的问题是,我收到将一些数据发送回手机并更新全局 int 值(从 0 更改为 1)的命令。然后在我的主循环中测试这个值,如果它是 1,则写入终端并将值改回。然后,我将使用代码的这一点来运行一个函数来发送数据。
但是这个说法没有通过。
这是我的主循环代码
我不知道问题是我定义变量的方式还是由于中断优先级或类似的原因。但是,当我的 Gatt 连接建立时, (GATT_CONNECTED == true) 的循环似乎没有处理。
我的变量是在另一个处理我的 GATT 连接的文件中定义的。GATT 连接变量在 main 中处理。我的 main_test 变量在另一个 c 文件中定义为 int main_test = 0;。在标头中声明为 extern int main_test;。
我知道 GATT_CONNECTED 变量可以工作,因为我的代码只有在我的 gatt 未连接时才运行。为简单起见,我省略了它。
有任何想法吗,
谢谢
Ps 希望你们一切安好,平安
编辑
为简单起见添加了代码
主程序
c - 蓝牙低功耗 gatt 数据发送过多信息
我的代码有一个问题,即我将 51 个字节传递给 ble 特征,然后调用一个函数通过已建立的 GATT 连接将其发送到我的手机,但是,它发送的数据远多于 51 个字节。
我有一个名为 ble_cus_send_csv 的函数,它接受几个参数。这些是我的自定义结构、我的数据、数据长度和处理程序。
我向其中发送了 51 个字符,我认为这是 51 个字节。我取 sizeof() 这个,它给出了 51。
然后我运行我的 ble_cus_send_csv 函数,它运行并输出我的 51 个字节的数据,之后的字节数要多得多。
我在下面附上了我的发送功能和我的输出。它应该只输出一个固定的 51 个字节。
我在 segger studio 内使用 Nordic NRF52840-dk 板。代码是用 C 编写的。
我的 ble_cus_send_csv 函数:
调试器中的 P_length
ios - 使用蓝牙 HID 切换虚拟键盘
我正在 NRF52810 上开发 HID 设备。在IOS上测试HID的工作后发现,连接HID设备时虚拟键盘消失,无法返回给iphone。
在阅读了 HID 的文档后,我没有找到正确的命令。
我找到了一个 BLE 键盘,它有这个键来启用虚拟键盘。测试键盘后,我发现了以下情况:1)在windows上,这个按钮启动上下文菜单,键码0x65 2)在android上,这个按钮启动上下文菜单3)在ios上,隐藏和打开虚拟键盘
我试图通过我的设备发送此代码 (0x65)。正如预期的那样,在 windows 和 android 上打开了一个上下文菜单。但是,在 ios 上无法识别。键盘没有出现,程序将键视为未定义。
有谁知道问题是什么?我需要向IOS发送什么代码才能打开虚拟键盘?HID 描述符有问题吗?
microcontroller - 更改 SPI 从机选择线时序
是否可以更改微控制器上 SPI 从机选择线的时序?从机选择线的时序如何确定?我正在使用 nrf52DK 微控制器板的 SPI 接口。对于 125kHz SPI 时钟,从机选择线的低电平为 165 us,但高电平很长(在转换到下一个低电平之前出现很长时间),我想改变它。我想减少从选择线上的高电平长度。我在示波器上检查了这个。
c - NUCLEO F401RE 通过 UART 向 nRF DK 板发送错误数据
我正在尝试通过 UART 将数据从 NUCLEO 板发送到 nRF 52840 DK。问题是我发送的内容被错误地接收。例如,当我发送值 3 时,我收到 32。我不确定问题出在哪里。
这是 NUCLEO 代码 '''
'''
以及 nRF DK 的代码。来自外设/UART示例代码
'''
'''
两者的波特率均为 115200
任何帮助或建议将不胜感激。
ios - iPhone 上从 nRF52 ARM 接收 BLE 数据包的速度很慢
我基于处理 BLE 5 的 nRF52 SOC 构建了一个自定义 ARM 设备。我使用 Core Bluetooth 框架在 SWIFT/X-Code/IB 中编写了一个自定义应用程序,并且无法以超过 12 kbs 的速度从 ARM 设备流式传输数据。使用数据包嗅探器,我可以看到 ARM 设备实时发送了所有数据包,但 iPhone 读取它们的速度不会超过每秒几次。在极少数情况下,iPhone 会快速读取所有内容。蓝牙连接协商到 12-24 毫秒的延迟。我使用的是 Nordic nRF52 SDK 版本 16。当时 iPhone 没有连接到任何其他 BLE 设备。
其他人遇到过这个问题吗?如果有帮助,我可以发布在 ARM 设备上使用的代码和 XCode 代码。
synchronization - 同步蓝牙设备同时播放振动模式
事实: 蓝牙 5.2 引入了同步通道 (ISOC) 功能。在 BLE 的上下文中,这意味着支持 (1) 对时间敏感的数据传输和 (2) 这些数据流在多个接收器之间的同步渲染。
我购买了两个 ItsyBitsy Adafruit,每个都带有一个 nRF52840 微处理器。nRF52840 支持蓝牙 5 但不支持 5.2。另外它不支持 Piconet 和 Scatternet 支持。
目标: 我的目标是将每个 nRF52840 连接到一个触头,然后两个触头同时播放一种振动模式。
用户体验:可以通过 iPhone 应用程序或通过每个 ItsyBitsy 板上的按钮来激活模式。有四种情况可以发挥模式: 1) iPhone 存在并且对两个从 ItsyBitsy 板起主导作用。2) iPhone 不存在,因此一台设备充当主机角色,另一台设备充当从机角色。3) 存在 iPhone 以及 ItsyBitsy 板之一。4) 在存在 ItsyBitsy 板的情况下不存在 iPhone。
场景 3 和 4 很容易实现。困难在于确保场景 1 和 2 的同步。在场景 1 中,可以通过电话或通过其中一个板上的按钮来激活设备。在场景 2 中,只能通过按下其中一个板上的按钮来完成激活。
潜在的解决方案在主设备和从设备之间发送一个周期性的时间状态包。奴隶将永远符合主人的时间。当按下手机应用程序或板上的按钮时,它会发送命令以在未来某个时间播放模式。如果所有设备都同步,那么它们将同时播放。那是前提。
这个解决方案的可行性如何?权衡我应该关注追求这个选项?有没有其他选择?
platformio - 从 PlatformIO 编程 NRF52840 加密狗
我正在关注https://docs.platformio.org/en/latest/boards/nordicnrf52/nrf52840_dk.html但我实际上没有 DK,我有一个 NRF52840“加密狗”。有人知道它是否可以直接与 PlatformIO 一起工作?它有一个内置的引导加载程序,但我认为它不能模拟正确的程序员。我已经安装了 nrfutil 但需要一个包 (.zip) 并且 platformio 正在生成 .elf/.hex ...不知道如何连接这些工具。