FT232H 芯片支持 SPI 主设备接口,可以从PC侧直接访问 SPI 从设备,手里刚好有 SPI Flash 小板,动手试试。

连接:

VCC <-----> 3V

CS   <-----> TMS

DO  <-----> TDO

GND <-----> GND

CLK <-----> TCK

DI  <-----> TDI

测试代码:

import ftd2xx as ftd
from binascii import hexlify

def ftdi_write(dev, data):
    s = bytes(data)
    print(hexlify(s))
    dev.write(s)

# SPI 传输
def spi_txrx(dev, tx):
    size = len(tx)
    # 拉低 CS
    ftdi_write(dev, (0x80, 0x00, 0x0B))
    ftdi_write(dev, (0x31, size%256, size//256) + tx)
    rx = dev.read(size)
    # 拉高 CS
    ftdi_write(dev, (0x80, 0x08, 0x0B))
    return rx

d = ftd.open(0)

 # 设置 MPSSE 模式
d.setBitMode(0, 2)      

# 设置 SPI 频率
SPI_FREQ = 1000000
div = int((12000000 / (SPI_FREQ * 2)) - 1)
d.write(bytes((0x86, div%256, div//256)))

# 配置IO初始状态
# CS Output High, CLK output low, MOSI output low, MISO input
d.write(bytes((0x80, 0x08, 0x0B))) 

# 读取 JEDEC ID
id = spi_txrx(d, (0x9F, 0x00, 0x00, 0x00))

print("ID is " + str(hexlify(id[1:])))

运行测试代码需要安装 Python 库 ftd2xx

pip install ftd2xx

在Mac电脑上运行结果:

三字节ID:  EF 40 17,与 Flash 手册中的描述一致,说明 SPI 通信正常。

如果是已经焊到板子上的 Flash,可以使用SOP8/16这样的夹子去连接,像下面这样

上边都是使用 FT232H 开发板来实验的,FT232H 有 3V 电源脚可以给 SPI Flash 供电,如果使用商业 Xilinx 下载器,需要给下载器的 VREF 提供参考电压,把 Flash 的 VCC 引脚接到 VREF 上即可。实测了一个 ZYNQ 开发板,板载 16Pin QSPI Flash,JTAG Boot 模式上电,使用 SMT2 下载器可以成功读取 Flash ID。

接线很不方便,看来转接板还得加两个座,8 PIN 和 16 PIN 的,用来直接连接 SOP8/16 夹子,另外需要写个 GUI 小工具来读写编程 SPI Flash,方便日常调试操作。

当然,SPI 接口不仅仅可以用来读写编程 SPI Flash,同样可以与所有 SPI 接口设备进行通信,比如 SPI 显示屏、传感器等,受 FT232H 芯片特性限制,SPI Mode 仅支持 Mode 0 和 Mode 2,也就是 CPHA 必须是 0,第一个时钟边沿进行数据采样。

感兴趣的欢迎微 【老吴胡编】,持续更新中

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐