4

我正在处理一个草图以启用从 Android 设备上传到 Arduino 板,并且在使用rxtx(纯 Java)测试 PC/Arduino 时,它适用于Duemilanove(基于FTDI)和Arduino Uno(基于ATmega )。

但在使用USB-Android 库时它不起作用,因为尚未实现 setDTR/setRTS 方法。

FTDI Android 驱动程序允许发送 setDTR/setRTS 信号,但之后无法发送/读取数据。

所以问题出在Android USB API中,我不知道出了什么问题..

切换 DTR/RTS 后,基于 FTDI 的 Arduino 板会发生什么情况?

我相信设备已重置并等待引导加载程序命令(STK500)约 50-250 毫秒。我对吗?

4

2 回答 2

9

你是对的。其原因是称为引导加载程序的东西。

在最简单的状态下,构建 Arduinos 的微控制器(以下简称 uC)可以通过系统内编程 (ISP) 方法进行编程,这是SPI 协议的一种特殊实现。我们唯一需要知道的是,这不是串行或 USB。

为了通过串行/USB 使 AVR 芯片(和 Arduino 板)可编程,我们将一个名为Bootloader的程序(通过 ISP)加载到芯片上。引导加载程序通过串行链路读取您的程序数据并将其写入闪存。如果没有要加载的程序,则引导加载程序将控制权交给加载的程序。因此,引导加载程序只能在打开或重置后激活:之后它会运行您加载的程序并且永远不会再次激活。

大多数引导加载程序设置为仅在复位后查找编程数据,原因是等待串行数据涉及超时:您必须等待一段时间(例如 1/3/5/10 秒)才能查看是否有程序正在上传,如果正在发送,则加载该程序。如果引导加载程序在每次打开 Arduino 时都查找编程数据,那么您的 Arduino 只会延迟激活,这被认为是不可取的。因此引导加载程序仅在重置后激活。

强迫用户在他们想要编程他们的 Arduino 之前每次都必须按下复位引脚可能很烦人,而且,在复位后立即开始发送串行数据(或者他们可能会错过超时窗口),所以Arduino 的聪明人想出了一个窍门:使用 DTS 信号触发复位,然后发送数据。因此,您的 Arduino(如果它不是古老的)设置为在接收 DTS 信号时重置。

于 2013-03-19T16:59:42.477 回答
0

答案是板子复位。原理图是按照它重置电路板的方式制作的(RTD/DTR 以某种方式连接到微控制器重置引脚)。

于 2013-05-17T05:06:01.660 回答