Android 上的蓝牙控制信号(DTR、DSR、RTS、CTS)

发布于 2024-10-04 09:28:37 字数 130 浏览 7 评论 0原文

我想通过 Android 通过蓝牙 SPP 远程重新编程我的 Arduino。第一步是重置 ATMEGA 微控制器。这是在 Arduino 上通过切换 DTR 线来完成的。是否有任何 API 可以从 Android 环境控制蓝牙 SPP 控制线?

I would like to remotely reprogram my Arduino via Android over Bluetooth SPP. The first step is to reset the ATMEGA microcontroller. This is accomplished on the Arduino by toggling the DTR line. Is there any API to control the Bluetooth SPP control lines from the Android environment?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

压抑⊿情绪 2024-10-11 09:28:37

另外,SPP 一般支持发送或接收控制信号(DTR、DSR、RTS、CTS),我不知道任何适用于 Android 的 API 或库,但因为您只想重置控制器...

如果您可以更改固件,也可以创建自己的重置命令,该命令可以在 UART 上(通过 SPP)接收。

如果您收到该命令,您可以调用类似的命令

asm("jmp 0x3800");

,您必须修改jmp地址以指向您的引导加载程序。
您可能还想更改中断向量以指向引导加载程序。

或者启用你的看门狗并调用

while(1);

这也会自动将中断向量更改为引导加载程序的中断向量并重置所有SFR。 - 但它有点慢,并且必须在熔丝位中选择引导加载程序的中断向量。

Also it is supported by SPP in general to send or receive the control signals (DTR, DSR, RTS, CTS) I do not know any API or library for android right know, but as you just want to reset your controller...

If it is o.k. for you to change your firmware you can also create your own reset-command that can be received on your UART (over SPP).

If you receive that command you could call something like

asm("jmp 0x3800");

where you have to modify the jmp-address to point to your bootloader.
You also might want to change your interrupt vector to point to your bootloader.

Or enable your watchdog and call

while(1);

This will also automatically change the interrupt vector to the bootloader's interrupt vector and reset all SFRs. - But it is a little bit slower and the bootloader's interrupt vector must be choosen in the Fuse Bits.

一瞬间的火花 2024-10-11 09:28:37

我意识到这不是您想要的,但您始终可以刷新一个具有较长超时时间的新引导加载程序,并在开始编程之前手动按下重置按钮。

新的 Arduino 引导加载程序 (optiboot) 适合 512B(相对于旧的 2K),因此您有额外的空间可用于您的项目;具有智能启动检测,因此仅在按下复位按钮时才进入引导加载程序;您可以通过编辑源代码中的看门狗超时值来延长超时(在 optiboot.c 中的第 267 行附近)。

// Set up watchdog to trigger after 500ms (changed to 2s!)
watchdogConfig(WATCHDOG_2S);

I realise that this is not what you wanted, but you could always flash a new bootloader with a longer timeout and manually press the reset button before starting programming.

The new Arduino bootloader (optiboot) fits in 512B (versus the 2K of the old one) so you have extra space available to your projects; has smart boot detection, so it only enters the bootloader when the reset button is pressed; and you can extend the timeout by editing the watchdog timeout value in the source (around line 267 in optiboot.c).

// Set up watchdog to trigger after 500ms (changed to 2s!)
watchdogConfig(WATCHDOG_2S);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文