极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 36257|回复: 8

[从零开始学] — Arduino mega ADK与Arduino mega 2560之硬件设计差异

[复制链接]
发表于 2012-6-5 10:56:10 | 显示全部楼层 |阅读模式
本帖最后由 Randy 于 2012-6-5 11:02 编辑

最近一直在胡思乱想的,不明白Arduino mega ADK到底是个神马东西,与Arduino 又有啥区别,我google下,发现现在国内ADK的资料还不是很全,国外的稍微好一点,不过没关系,我相信,只要大家有兴趣一起弄,这些都不是什么问题,我也是一个初学者,目前不懂的很多,所以希望大家有想法的一起来交流学习一下,期待大牛们的加入!

这一节我们来了解一下他们硬件上的区别:

google发布的ADK板(下称A板)是参考Arduino MEGA2560板(下称M板)进行设计的,让我们来看看有哪些不一样的地方。

从图上看我们可以看得出他们的大概的区别,但是想深入了解他们在电路中的实际不同,请看下面的说说!
1、电源设计:

      两个板子的电源部分设计都是将外部电源输入转换成板子需要的5v及3.3v工作电压。

  M板用了一块LDO电压转换芯片(MC33269D-5.0)将输入电压转换成+5v工作电压,该芯片最大输入电压为20V。图1-1中画了了两个MC33269芯片,而实际板子上只用了一个芯片,为什么要这么设计呢?这其实只是为兼容不同的芯片封装,在PCB图上可以看到这两个芯片的布线是堆叠在一起的。

A板用了一块开关式稳压器芯片(LT3480EDD#PBF);将输入电压转换成+5v工作电压,该开关式稳压器芯片的输入电压范围为3.6V-36V,输出电压范围为:0.79V-20V;开关频率范围为200kHz-2.4MHz。

M板和A板都使用LP2985-33DBVR芯片将5v电压转换成所需的3.3v电压,并且两个电路都使用了一个P沟道功率MOS管FDN340P来作为DC电源输入与USB电源输入的切换开关。见图1-3及1-4所示,当VIN没有外接DC电源时,整个板子的5V电压由USBVCC提供,MOS管中电流是从漏极向源级流动;而当VIN有电输入,且电压达到门限值(经过计算,大约是:M板的VIN>6.6v;A板的VIN>7v)时,MOS管的栅极上的电压为+5v,MOS管源级到漏极的电流被截断,阻止了板内电流向USB接口流动。

A板使用了一片占用与USB转RS232的芯片(FT232RL-REEL)来实现电路板与PC通信的功能,该芯片由FTDIChip生产,同时该公司也在网站上提供了相应的驱动程序供用户下载。按照网站上提供的安装指南来一步一步安装好驱动程序后,在windows中的设备管理器中就会出现一个新的串口,该串口并不是一个真实的串口,而是由驱动程序虚拟的一个串口,但是在我们开发PC端的程序的时候,这个虚拟串口能够以与实体串口完全相同的方式来控制。

以上的资料都是来自于网络,欢迎大家一起学习、交流。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-6-5 11:48:42 | 显示全部楼层
表示起点好高啊。。迷茫。。。。看来我智商不够。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-5 13:35:12 | 显示全部楼层
迷你强 发表于 2012-6-5 11:48
表示起点好高啊。。迷茫。。。。看来我智商不够。。。

{:3_52:} 我现在也正在找资料,我也是在学习。很多不懂!
回复 支持 反对

使用道具 举报

发表于 2012-6-6 15:27:39 | 显示全部楼层
在USB通讯时,必需是一个是USB HOST,而另一个必需是USB Accessory,正如你用U盘连接PC时,只有PC能读到U盘的数据,而U盘无法读PC的数据,然而你用两台PC的USB接口连上时,因为两个USB HOST是无法建立连接的,所以无法读取数据,在android系统下,ADK的全称叫做Accessory Devlop...Kit,也就是挂件模式,相当于U盘。而mega ADK它是运行在USB HOST模式下,相当于PC机的USB接口,你用android机器连上mega adk时,mega adk就可以跟android device建立通讯。
mega adk 多了IC——MAX3421EETJ+,用于usb host,相当于PC电脑的USB接口使用。(硬件会多一个USB物理接口)
mega 2560和ardnuio uno没有Max3421EETJ,所以没有USB HOST功能(硬件也少了一个接口)
蛋似,他们都具有同一个USB转串口的芯片FT232RL-REEL,这个芯片通常是用来做烧写用的(但你也可以用来与PC通讯,具体你可以参考一下AVR的datasheet和那些熔丝位操作),希望这些能够帮到你,最后还是那句:“不要崇拜哥,哥为人民服务,,,,,,,哥留下的只是斜阳黄昏下那谜一般的背影,,背,,,影,,,”
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-6-6 16:47:40 | 显示全部楼层
邓维安 发表于 2012-6-6 15:27
在USB通讯时,必需是一个是USB HOST,而另一个必需是USB Accessory,正如你用U盘连接PC时,只有PC能读到U盘的 ...

首先谢谢你,mega2560+USB HOST shield 就是我们所说的google ADK了是吧,你拿U盘来说,有点形象,但是我还是不怎么明白,我问您一个问题,我们用ADK和安卓手机通信,作用是什么?ADK一般的用途是什么呢?
回复 支持 反对

使用道具 举报

发表于 2012-6-6 19:05:29 | 显示全部楼层
Randy 发表于 2012-6-6 16:47
首先谢谢你,mega2560+USB HOST shield 就是我们所说的google ADK了是吧,你拿U盘来说,有点形象,但是我 ...

抱歉亂入一下
我覺得可以用主從的方式來表達, 類似IIC
A板就是主(Host), 手機就是從(Accessory)。
老闆可以叫員工做事, 但員工不能使喚老闆XD

連結手機好處...目前想到
1.接線大幅簡化(按鈕, 陀螺儀, 加速度計, GPS...之類的輸入設備手機皆有)
2.增加運算能力(手機先處理過了)
回复 支持 反对

使用道具 举报

发表于 2012-6-6 22:48:53 | 显示全部楼层
什么是USB?这是帮你转载的一篇关于USB的,另外,定冠词记得加上“哥”,不要崇拜哥,哥为人民服务,,,,,,,,哥留下的只是斜阳黄昏下那谜一般的背影,,背,,,影,,,”
当你用google adk连上android device后,你可以用以下功能:

USB是英文Universal Serial Bus的缩写,意为通用串行总线。USB最初是为了替代许多不同的低速总线(包括并行、串行和键盘连接)而设计的,它以单一类型的总线连接各种不同的类型的设备。USB的发展已经超越了这些低速的连接方式,它现在可以支持几乎所有可以连接到PC上的设备。最新的USB规范修订了理论上高达480Mbps的高速连接。Linux内核支持两种主要类型的USB驱动程序:宿主系统上的驱动程序和设备上的驱动程序,从宿主的观点来看(一个普通的宿主也就是一个PC机),宿主系统的USB设备驱动程序控制插入其中的USB设备,而USB设备的驱动程序控制该设备如何作为一个USB设备和主机通信。



USB的具体构成

在动手写USB驱动程序这前,让我们先看看写的USB驱动程序在内核中的结构,如下图:





USB驱动程序存在于不同的内核子系统和USB硬件控制器之间,USB核心为USB驱动程序提供了一个用于访问和控制USB硬件的接口,而不必考虑系统当前存在的各种不同类型的USB硬件控制器。USB是一个非常复杂的设备,linux内核为我们提供了一个称为USB的核心的子系统来处理大部分的复杂性,USB设备包括配置(configuration)、接口(interface)和端点(endpoint),USB设备绑定到接口上,而不是整个USB设备。如下图所示:





USB通信最基本的形式是通过端点(USB端点分中断、批量、等时、控制四种,每种用途不同),USB端点只能往一个方向传送数据,从主机到设备或者从设备到主机,端点可以看作是单向的管道(pipe)。所以我们可以这样认为:设备通常具有一个或者更多的配置,配置经常具有一个或者更多的接口,接口通常具有一个或者更多的设置,接口没有或具有一个以上的端点。驱动程序把驱动程序对象注册到USB子系统中,稍后再使用制造商和设备标识来判断是否已经安装了硬件。USB核心使用一个列表(是一个包含制造商ID和设备号ID的一个结构体)来判断对于一个设备该使用哪一个驱动程序,热插拨脚本使用它来确定当一个特定的设备插入到系统时该自动装载哪一个驱动程序。



上面我们简要说明了驱动程序的基本理论,在写一个设备驱动程序之前,我们还要了解以下两个概念:模块和设备文件。



模块:是在内核空间运行的程序,实际上是一种目标对象文件,没有链接,不能独立运行,但是可以装载到系统中作为内核的一部分运行,从而可以动态扩充内核的功能。模块最主要的用处就是用来实现设备驱动程序。Linux下对于一个硬件的驱动,可以有两种方式:直接加载到内核代码中,启动内核时就会驱动此硬件设备。另一种就是以模块方式,编译生成一个.ko文件(在2.4以下内核中是用.o作模块文件,我们以2.6的内核为准,以下同)。当应用程序需要时再加载到内核空间运行。所以我们所说的一个硬件的驱动程序,通常指的就是一个驱动模块。



设备文件:对于一个设备,它可以在/dev下面存在一个对应的逻辑设备节点,这个节点以文件的形式存在,但它不是普通意义上的文件,它是设备文件,更确切的说,它是设备节点。这个节点是通过mknod命令建立的,其中指定了主设备号和次设备号。主设备号表明了某一类设备,一般对应着确定的驱动程序;次设备号一般是区分不同属性,例如不同的使用方法,不同的位置,不同的操作。这个设备号是从/proc/devices文件中获得的,所以一般是先有驱动程序在内核中,才有设备节点在目录中。这个设备号(特指主设备号)的主要作用,就是声明设备所使用的驱动程序。驱动程序和设备号是一一对应的,当你打开一个设备文件时,操作系统就已经知道这个设备所对应的驱动程序。对于一个硬件,Linux是这样来进行驱动的:首先,我们必须提供一个.ko的驱动模块文件。我们要使用这个驱动程序,首先要加载它,我们可以用insmod xxx.ko,这样驱动就会根据自己的类型(字符设备类型或块设备类型,例如鼠标就是字符设备而硬盘就是块设备)向系统注册,注册成功系统会反馈一个主设备号,这个主设备号就是系统对它的唯一标识。驱动就是根据此主设备号来创建一个一般放置在/dev目录下的设备文件。在我们要访问此硬件时,就可以对设备文件通过open、read、write、close等命令进行。而驱动就会接收到相应的read、write操作而根据自己的模块中的相应函数进行操作了。

回复 支持 反对

使用道具 举报

发表于 2013-1-5 11:26:40 | 显示全部楼层
都是高手啊,受教了。。。
回复 支持 反对

使用道具 举报

发表于 2013-7-15 01:08:39 | 显示全部楼层
好东西 我就选2560+USB shield方式。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 10:25 , Processed in 0.039710 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表