4nt*_*ine 4 usb upload android arduino ftdi
我正在编写一个草图,以便能够从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 ms.我对吗?
你是对的.原因就是Bootloader.
在其最准系统状态下,构建Arduinos的微控制器(以下称为uCs)可以通过系统内编程(ISP)方法进行编程,这是SPI协议的特定实现.我们唯一需要知道的是,这不是串行或USB.
为了使AVR芯片(和Arduino板)通过串行/ USB编程,我们将一个名为Bootloader(通过ISP)的程序加载到芯片上.引导加载程序通过串行链接读取程序数据并将其写入闪存.如果没有要加载的程序,则引导加载程序为加载的程序提供控件.因此,引导加载程序只能在打开或重置后处于活动状态:之后它会运行您加载的程序并且永远不会再次处于活动状态.
大多数引导程序设置为仅在重置后查找编程数据,原因是等待串行数据涉及超时:您必须等待一段时间(比如1/3/5/10秒)来查看是否有程序正在上传,然后加载程序,如果它正在发送.如果每次打开Arduino时引导加载程序都会查找编程数据,那么Arduino只会在延迟时激活,这被认为是不合需要的.因此,引导加载程序仅在重置后激活.
在用户想要编程Arduino之前强制用户每次都必须按下复位引脚可能会很烦人,而且,在复位后立即开始发送串行数据(或者他们可能会错过超时窗口),所以Arduino的聪明人提出了一个技巧:使用DTS信号触发复位,然后发送数据.所以你的Arduino(如果它不古老)被设置为在接收DTS信号时重置.