探索Adafruit FT232H Breakout:多功能串口协议扩展板的使用指南
在电子设计领域,我们常常希望计算机能够直接与各种设备和传感器进行通信,而Adafruit FT232H Breakout扩展板为我们实现这一目标提供了一个强大且灵活的解决方案。下面将详细介绍该扩展板的特点、组装、配置及使用方法。
文件下载:2264.pdf
一、概述
Adafruit FT232H Breakout扩展板是一款功能强大的工具,它就像是计算机的一个“串口协议瑞士军刀”。自2020年2月12日起,该扩展板进行了升级,采用了现代的USB C连接器,新增了I2C开关以便于I2C接口连接,还有3V电源输出引脚(最大500mA)以及Stemma QT连接器,可实现即插即用连接各种Stemma QT或Qwiic设备、传感器和显示器,并且在尺寸、安装孔和引脚排列上完全向后兼容。
FT232H芯片来自FTDI,与常见的USB转串口转换器芯片类似,但它增加了“多协议同步串行引擎”(MPSSE),能够支持SPI、I2C、串行UART、JTAG等多种常见协议。此外,它还有几个数字GPIO引脚,可用于读取和写入,实现诸如闪烁LED、读取开关或按钮等功能。
二、组装与接线
1. 组装
组装FT232H Breakout扩展板需要将附带的引脚头焊接到扩展板上。如果你是焊接新手,建议先阅读优秀焊接指南并进行一些废料练习。具体步骤如下:
- 修剪公引脚头,使其长度与扩展板上的引脚孔相匹配,通常是两排各10个引脚。
- 将引脚头的长引脚插入面包板,使FT232H扩展板的引脚孔能够完美穿过面包板顶部伸出的引脚头。
- 使用烙铁和焊锡,小心地将所有引脚焊接到FT232H扩展板上。
- 焊接完成后,将微型USB电缆插入FT232H扩展板的端口,再将电缆连接到计算机或笔记本电脑。如果扩展板上5V引脚旁边的绿色LED亮起,说明组装成功。
2. 接线
FT232H扩展板的引脚功能如下:
- 5V:这是直接连接到USB总线的5伏电源,不要从该引脚吸取超过400 - 500mA的电流,以免损坏计算机的USB端口。
- GND:这是FT232H扩展板的接地引脚。
- D0 - D7:这些是FT232H芯片上的ADBUS引脚,用于串行UART和其他串行协议,也可作为GPIO引脚用于数字输入和输出。
- C0 - C9:这些是FT232H芯片上的ACBUS引脚,主要用作GPIO引脚进行数字输入和输出。需要注意的是,C8和C9引脚不能通过软件控制,只能通过更改芯片的EEPROM来分配功能。
三、串行UART使用
1. 基本功能
FT232H开箱即用,可作为FTDI的USB转串行UART转换器,适用于与Arduino等串行设备通信。它能安全处理3.3伏和5伏信号,可连接Arduino的5伏串行端口以及树莓派或BeagleBone Black的3.3伏串行端口。
2. 引脚功能
- D0:TX或发送引脚,是FT232H芯片的串行数据输出,应连接到串行设备的RX或接收引脚。
- D1:RX或接收引脚,是FT232H芯片的串行数据输入,应连接到串行设备的TX或发送引脚。
- D2:RTS或准备发送引脚,用于串行连接的流控制。
- D3:CTS或清除发送引脚,与RTS类似,用于流控制。
- D4:DTR或数据终端准备好引脚,用于RS - 232串行连接的流控制。
- D5:DSR或数据集准备好引脚,与DTR类似,用于RS - 232串行连接的流控制。
- D6:DCD或数据载波检测引脚,有时用于RS - 232串行通信。
3. USB串行驱动程序安装
大多数操作系统都包含FTDI的串行UART驱动程序,通常无需额外安装。具体情况如下:
- Mac OSX Mavericks或更高版本:自动包含FTDI串行驱动程序。
- Linux内核版本约2.6及以上:也包含FTDI串行驱动程序,如Ubuntu 12.04或14.04等现代Linux发行版无需安装驱动。
- Windows:通常可以在线自动搜索驱动程序,如果失败,可以手动从FTDI网站下载并安装。
4. 串行使用测试
安装必要的串行端口驱动程序后,可以进行简单的回环测试来确认能够通过UART读写数据。将D0(TX)引脚连接到D1(RX)引脚,使用串行控制台输入数据,若输入的数据能被立即回显,则测试成功。不同操作系统的操作方法如下:
- Windows:可以使用PuTTY作为串行控制台,配置连接类型为串行,设置串行线为设备管理器中找到的COM端口,速度设置为9600波特。
- Mac OSX:使用终端命令
ls /dev/tty.*列出所有串行端口,连接FT232H扩展板后再次运行该命令,找到新出现的设备,使用screen命令打开串行连接。 - Linux:使用
ls /dev/tty*命令列出串行设备,连接FT232H扩展板后找到新设备的路径,使用screen命令打开串行端口。
四、Python设置与使用
1. MPSSE模式概述
MPSSE(多协议同步串行引擎)是FT232H芯片的核心,它允许芯片支持I2C、SPI等多种协议。在MPSSE模式下,D0 - D3引脚具有特殊的串行协议功能:
- D0:时钟信号输出,可配置为运行速度在约450Hz至30MHz之间的时钟。
- D1:串行数据输出,用于输出串行信号,如SPI连接中的MOSI线。
- D2:串行数据输入,用于读取串行信号,如SPI连接中的MISO线。
- D3:串行选择信号,用于告诉连接的设备FT232H准备与之通信。
此外,MPSSE模式还允许将D4 - D7和C0 - C7共12个引脚作为通用数字输入或输出控制。
2. 软件选项
使用MPSSE模式需要使用一些特殊的软件和编程库,以下是一些可选的软件:
- FTDI的官方D2XX驱动程序和库:由FTDI生产,提供对FTDI芯片功能的底层访问,有适用于Windows、Mac OSX和Linux的二进制版本。
- FTDI的LibMPSSE - I2C和LibMPSSE - SPI库:基于D2XX驱动程序构建,为与FT232H的MPSSE组件进行I2C和SPI通信提供更简单的接口。
- libFTDI库:开源库,类似于D2XX库,提供对FTDI芯片功能的底层接口,还有Python接口,使用起来相对简单。
- libmpsse库:基于libFTDI库构建,为使用MPSSE组件的I2C和SPI协议提供更简单的接口,目前仅支持Mac OSX和Linux。
- Adafruit Python GPIO库:为简化FT232H的使用,该库提供了一个简单的接口,可通过Python编程语言访问FT232H的GPIO、SPI和I2C功能,支持Windows、Mac OSX和Linux平台。
3. 不同平台的MPSSE设置
由于MPSSE相关内容已被弃用,这里仅作历史参考。在使用MPSSE模式时,串行UART模式将被禁用。不同平台的设置步骤如下:
- Windows:需要使用Zadig工具将FT232H的FTDI驱动程序替换为基于libusb的驱动程序,下载并安装libftdi二进制文件,最后安装Adafruit Python GPIO库。
- Mac OSX:需要安装Xcode和Xcode命令行工具,安装Homebrew包管理器,使用
brew命令安装libftdi及其依赖项,下载并安装Adafruit Python GPIO库。 - Linux:在Debian/Ubuntu/Raspbian系统上,使用
apt - get命令安装libftdi及其依赖项,下载并安装Adafruit Python GPIO库。
4. MPSSE使用示例
(1)GPIO使用
使用FT232H的GPIO引脚非常简单,以下是一个闪烁LED和读取数字输入的示例:
- 连接硬件:将FT232H的C0引脚连接到LED的阳极,LED的阴极通过一个330 - 1000欧姆的电阻连接到FT232H的GND引脚;将FT232H的D7引脚连接到GND,通过将跳线在GND和5V之间切换来读取D7输入的高低值。
- 编写Python代码:创建一个名为
gpio_test.py的文件,代码如下:import time import Adafruit_GPIO as GPIO import Adafruit_GPIO.FT232H as FT232H
FT232H.use_FT232H() ft232h = FT232H.FT232H() ft232h.setup(7, GPIO.IN) ft232h.setup(8, GPIO.OUT)
print 'Press Ctrl - C to quit.' while True: ft232h.output(8, GPIO.HIGH) time.sleep(1) ft232h.output(8, GPIO.LOW) level = ft232h.input(7) if level == GPIO.LOW: print 'Pin D7 is LOW!' else: print 'Pin D7 is HIGH!' time.sleep(1)
- 运行代码:在Windows上运行`python gpio_test.py`,在Mac OSX或Linux上运行`sudo python gpio_test.py`,可以看到LED每秒闪烁一次,并打印D7输入的状态。
#### (2)SPI使用
FT232H的MPSSE非常适合使用SPI协议进行通信,以下是一个使用SPI协议发送和接收数据的示例:
```python
import Adafruit_GPIO.FT232H as FT232H
FT232H.use_FT232H()
ft232h = FT232H.FT232H()
spi = FT232H.SPI(ft232h, cs = 8, max_speed_hz = 3000000, mode = 0, bitorder = FT232H.MSBFIRST)
spi.write([0x01, 0x02, 0x03])
response = spi.read(3)
print 'Received {0}'.format(response)
response = spi.transfer([0x01, 0x02, 0x03])
print 'Received {0}'.format(response)
(3)驱动NeoPixels
使用SPI协议驱动WS2811/WS2812 NeoPixel可寻址RGB LED是一个有趣的应用。通过使用6MHz的高速SPI信号对NeoPixel控制信号进行“过采样”,可以从FT232H的D1(MOSI)线生成近似的控制信号。需要注意的是,这种方法一次最多只能点亮约340个像素。以下是一个驱动NeoPixels的示例代码:
import time
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.FT232H as FT232H
class NeoPixel_FT232H(object):
def __init__(self, n):
self.ft232h = FT232H.FT232H()
self.spi = FT232H.SPI(self.ft232h, max_speed_hz = 6000000)
self.buffer = bytearray(n * 24)
self.lookup = self.build_byte_lookup()
def build_byte_lookup(self):
lookup = {}
for i in range(256):
value = bytearray()
for j in range(7, -1, -1):
if ((i >> j) & 1) == 0:
value.append(0b11100000)
else:
value.append(0b11111000)
lookup[i] = value
return lookup
def set_pixel_color(self, n, r, g, b):
index = n * 24
self.buffer[index:index + 8] = self.lookup[int(g)]
self.buffer[index + 8:index + 16] = self.lookup[int(r)]
self.buffer[index + 16:index + 24] = self.lookup[int(b)]
def show(self):
self.spi.write(self.buffer)
if __name__ == '__main__':
pixel_count = 16
pixels = NeoPixel_FT232H(pixel_count)
for i in range(pixel_count):
pixels.set_pixel_color(i, 255, 0, 0)
pixels.show()
time.sleep(0.25)
for i in range(pixel_count):
pixels.set_pixel_color(i, 0, 255, 0)
pixels.show()
time.sleep(0.25)
for i in range(pixel_count):
pixels.set_pixel_color(i, 0, 0, 255)
pixels.show()
time.sleep(0.25)
colors = [(255, 0, 0), (255, 255, 0), (0, 255, 0), (0, 255, 255), (0, 0, 255), (255, 0, 255)]
offset = 0
print 'Press Ctrl - C to quit.'
while True:
for i in range(pixel_count):
color = colors[(i + offset) % len(colors)]
pixels.set_pixel_color(i, color[0], color[1], color[2])
pixels.show()
offset += 1
time.sleep(0.25)
(4)I2C使用
I2C协议是与传感器和设备通信的另一种流行协议,FT232H的MPSSE组件可以实现I2C协议。使用I2C时,需要将D1和D2引脚用跳线连接在一起,形成I2C的SDA数据线,D0引脚作为I2C的SCL时钟线,并添加4.7千欧姆的上拉电阻。以下是一个使用I2C的示例代码:
import Adafruit_GPIO.FT232H as FT232H
FT232H.use_FT232H()
ft232h = FT232H.FT232H()
i2c = FT232H.I2CDevice(ft232h, 0x70)
response = i2c.readU16(0x01)
i2c.write8(0x02, 0xAB)
五、更多信息与资源
1. 参考资料
- 官方FT232H数据手册:这是了解FT232H所有信息的参考资料,建议至少浏览一遍,以便全面了解芯片的功能。
- MPSSE命令参考:详细介绍了控制FT232H芯片MPSSE组件的底层命令。
- FTDI实用工具:如FT PROG工具,可用于写入FT232H扩展板的EEPROM并控制C8和C9引脚的功能,但该工具仅支持Windows。
- FTDI应用笔记:在该页面搜索FT232H或MPSSE,可找到许多使用FT232H与不同串行协议进行接口的有用应用笔记。
- libftdi:开源库,是FTDI二进制驱动程序的不错替代方案,可用于与FT232H进行底层交互。
- libmpsse:用于访问FT232H的MPSSE功能,是本指南中Python GPIO库的替代方案。
- OpenOCD硬件:对于ARM芯片开发,OpenOCD调试工具对于使用JTAG协议进行芯片调试非常有价值,具有MPSSE的FTDI芯片(如FT232H)甚至可以支持JTAG并与OpenOCD配合使用。
2. 擦除EEPROM以使用FT_PROG
如果要使用FTDI的FT_PROG编程工具,可能需要擦除FT232H的EEPROM。具体步骤如下:
- 连接FT232H板到计算机,使用Zadig工具启用基于libusb的驱动程序。
- 下载libftdi Windows二进制文件,解压后在命令行终端中运行
eeprom -e -p 0x6014 -v 0x0403命令擦除EEPROM。 - 卸载libusb驱动程序,重新插拔FT232
-
串口协议
+关注
关注
0文章
18浏览量
8463
发布评论请先 登录
探索Adafruit FT232H Breakout:多功能串口协议扩展板的使用指南
评论