电子说
在电子设计领域,我们常常希望计算机能够直接与各种设备和传感器进行通信,而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、读取开关或按钮等功能。
组装FT232H Breakout扩展板需要将附带的引脚头焊接到扩展板上。如果你是焊接新手,建议先阅读优秀焊接指南并进行一些废料练习。具体步骤如下:
FT232H扩展板的引脚功能如下:
FT232H开箱即用,可作为FTDI的USB转串行UART转换器,适用于与Arduino等串行设备通信。它能安全处理3.3伏和5伏信号,可连接Arduino的5伏串行端口以及树莓派或BeagleBone Black的3.3伏串行端口。
大多数操作系统都包含FTDI的串行UART驱动程序,通常无需额外安装。具体情况如下:
安装必要的串行端口驱动程序后,可以进行简单的回环测试来确认能够通过UART读写数据。将D0(TX)引脚连接到D1(RX)引脚,使用串行控制台输入数据,若输入的数据能被立即回显,则测试成功。不同操作系统的操作方法如下:
ls /dev/tty.*列出所有串行端口,连接FT232H扩展板后再次运行该命令,找到新出现的设备,使用screen命令打开串行连接。ls /dev/tty*命令列出串行设备,连接FT232H扩展板后找到新设备的路径,使用screen命令打开串行端口。MPSSE(多协议同步串行引擎)是FT232H芯片的核心,它允许芯片支持I2C、SPI等多种协议。在MPSSE模式下,D0 - D3引脚具有特殊的串行协议功能:
此外,MPSSE模式还允许将D4 - D7和C0 - C7共12个引脚作为通用数字输入或输出控制。
使用MPSSE模式需要使用一些特殊的软件和编程库,以下是一些可选的软件:
由于MPSSE相关内容已被弃用,这里仅作历史参考。在使用MPSSE模式时,串行UART模式将被禁用。不同平台的设置步骤如下:
brew命令安装libftdi及其依赖项,下载并安装Adafruit Python GPIO库。apt - get命令安装libftdi及其依赖项,下载并安装Adafruit Python GPIO库。使用FT232H的GPIO引脚非常简单,以下是一个闪烁LED和读取数字输入的示例:
gpio_test.py的文件,代码如下:
import time
import Adafruit_GPIO as GPIO
import Adafruit_GPIO.FT232H as FT232HFT232H.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)
使用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)
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)
如果要使用FTDI的FT_PROG编程工具,可能需要擦除FT232H的EEPROM。具体步骤如下:
eeprom -e -p 0x6014 -v 0x0403命令擦除EEPROM。全部0条评论
快来发表一下你的评论吧 !