FTDI FT2232H在嵌入式教学中的应用

2023-11-02

FT2232H是FTDI chip在2012年发布的一款高速USB转串行通信的协议转换芯片。作为第五代USB协议转串行总线通信协议的芯片,完全符合USB2.0规范(480Mb/s)并且可以依靠编程的方式配置成为串行或者并行的其他总线接口规范。这对于在进行嵌入式教学是的传感器总线仿真是非常方便的,甚至可以作为嵌入式教学中的调试工具使用。具体的芯片介绍可以参考官方资料(DS_FT2232H),这里笔者只举一个编程实现I2C总线通信的例子,来说明FT2232H的使用。


一、MPSSE简介
在用户程序使用Multi Protocol Synchronous Serial Engine (MPSSE)作为实现三个较常见的串行总线(SPI、I2C和JTAG)的中间件。MPSSE实际上是一个函数库,封装了实现不同协议的流程化操作,用户程序可以通过调用这些函数,来实现和D2XX Driver的数据交换,而D2XX在逻辑上直接驱动FT2232H芯片。实际上程序也可以直接调用D2XX中的函数,来直接实现所需的协议规范。
FT232HL的栈结构
图 MPSSE所处的位置
如上图所示,MPSSE提供了三种类型的API来分辨实现I2C、SPI和JTAG,在使用的使用下载相应的函数库就可以了。官网提供了Linux和Windows的版本
http://www.ftdichip.com/Support/SoftwareExamples/MPSSE.htm
这里写图片描述
图 系统结构
在上图中,Host可以使PC或者是嵌入式系统给,通过FT2232H桥接到I2C总线。作为示例,图中只有一个I2C设备,在实际应用中,在I2C总线上的设备可能不止一个,这就需要在使用的时候配置FT2232H的I2C地址。
libMPSSE-I2C的函数库文件结构如下,在使用是只需将inlcude和lib文件夹下的windows\i386下的内容拷贝到工程文件夹中,如下图所示:
这里写图片描述
图 libMPSSE-I2C的目录结构
这里写图片描述
图 添加后的文件组成
另外,还需在Visual Studio的工程中添加对Lib的依赖,如下图:
这里写图片描述
libMPSSE-I2C可以分为两个部分,其一为五个控制函数;其二为两个数据传输函数。所有的API都返回FT_STATUS宏(FT_STATUS在D2XX Driver中的定义)。

二、被控制的I2C器件的时序和函数参数
被控制(访问)的I2C设备,在本文中选用的是DIP封装的老款24C128(I2C接口的128K EEPROM),新款的型号是24C128C,引脚(A0-A3在设备寻址是稍有不同,老款只使用A0-A1两个引脚),这里只说明24C128的设备寻址。
这里写图片描述
图 24C128的引脚和引脚说明
这里写图片描述
图 设备寻址是8位地址的组成
在使用时,高5位是不变的,在使用时只需配置A1-A0和LSB(读写标志位)即可。当只对一片24C128操作时,A1=A0=0。在进行写操作时,务必使WP接地或者悬空。在使用FT2322H访问I2C设备时,只要求地址为0B0101000(七位,最后一位不用写)。 具体的寻址请参考AT24C128的使用手册࿰

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FTDI FT2232H在嵌入式教学中的应用 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi

随机推荐

  • 磁盘容量的计算公式

    公式 有效储存区域 外直径 内直径 2 磁道数 圆柱面数量 有效储存区域 磁道密度 总磁道数 记录面数 磁道密度 有效储存区域 每磁道的信息量 内层位密度 内层周长 面信息量 磁道数 每磁道信息量 非格式化盘组总容量 面信息量 面数 格式化
  • python 人民币兑美元汇率_人民币汇率转换(python人民币和美元转换)

    经查询2019 06 01银行美元兑换人民币元外汇中间价 1美元 6 8990人民币元 以上数据仅供参考 交易时以银行柜台成交价为准 100人民币元 1713 59日元 数据仅供参考 交易时以银行柜台成交价为准 更新时间 2013 12 1
  • Docker : Docker安装Kibana报错 Unable to revive connection: http://localhost:9200 No living connections

    1 美图 2 背景 docker安装es Docker Docker安装Kibana 创建网络 base lcc lcc es docker network create subnet 172 30 0 0 16 docker01
  • 在Raspberry Pi上使用Jupyter Notebook读取传感器和操作执行器

    了解如何在Raspberry Pi上安装Jupyter Notebook 并直接在其上读取传感器并操作执行器作用 我们都知道Jupyter Notebook是一个很棒的工具 或者说是一个更好的开源Web应用程序 它使您可以创建和共享包含实时
  • 面试题目总结(CNN)

    CNN权值共享是什么 局部感知 即网络部分连通 每个神经元只与上一层的部分神经元相连 只感知局部 而不是整幅图像 滑窗实现 可行性 局部像素关系紧密 较远像素相关性弱 因此只需要局部感知 在更高层将局部的信息综合起来就得到了全局的信息 权值
  • didUpdateWidget详解

    概述 只要在父widget中调用setState 子widget的didUpdateWidget就一定会被调用 不管父widget传递给子widget构造方法的参数有没有改变 只要didUpdateWidget被调用 接来下build方法就
  • 低功耗蓝牙MESH基础知识

    一 MESH VS 点对点 大多数蓝牙低功耗设备使用一对一简单点对点网络拓扑结构来进行相互间的通信 在蓝牙核心规格中 这称为 微微网 想象一下 智能手机已经建立了与心率监测仪的点对点连接 并可借此传输数据 同样的智能手机也可以建立与其他设备
  • gettimeofday 获取毫秒时间溢出问题

    之前为了测试C中代码执行消耗的时间 所以写了这么一个函数 long long getmstime timeval tv gettimeofday tv NULL return tv tv sec 1000 tv tv usec 1000 之
  • 使用Hutool向第三方的接口发起请求

    使用Hutool工具请求第三方接口遇到的一篮子问题 1 请求第三方接口的几种方式 1 1 使用HttpUtil请求 返回String类型的JSON串 一般用在请求普通的页面情况下 返回的结果是JSON格式 但是如果出现了404 504错误
  • newInstance过时

    在今天使用反射的newInstance 时候发现 jdk9版本将class newInstance 过时 Class stack1 Class forName Stack Stack stack2 Stack stack1 getConst
  • leetcode 300. Longest Increasing Subsequence

    leetcode 300 Longest Increasing Subsequence 题目 Given an unsorted array of integers find the length of longest increasing
  • PHP中小型民宿酒店管理系统源码

    PHP中小型民宿酒店管理系统源码 近年来 民宿酒店行业以其独特的住宿体验和个性化服务受到越来越多旅行者的青睐 为了提高运营效率 改善客户体验 许多中小型民宿酒店开始引入管理系统 本文将介绍一款基于PHP开发的中小型民宿酒店管理系统源码 帮助
  • Axure动态布局,中部加入滚动条

    1 将部件设置为动态面板 然后再部件属性和样式中使用按需显示纵向滚动条 2 可以很好的处理因为内部页面过大挤占低端内容的问题
  • 解决Excel打开CSV文件中文乱码问题

    CSV打开乱码的处理方法 方法一 Excel的数据导入功能 方法二 CSV打开乱码的处理方法 CSV是用UTF 8编码的 而EXCEL是ANSI编码 由于编码方式不一致导致出现乱码 明白了原因之后 我们只需要把CSV文件的编码方式修改成与E
  • 第5章 数组 第3题

    题目 编写一个程序 输入一个字符串 输出其中每个字符在字母表中的序号 对于不是英文字母的字符 输出0 例如 输入为 acbf8g 输出为1 3 2 6 0 7 代码 include
  • 基础练习—矩阵乘法

    题目描述 给定一个N阶矩阵A 输出A的M次幂 M是非负整数 例如 A 1 2 3 4 A的2次幂 7 10 15 22 输入 第一行是一个正整数N M 1 lt N lt 30 0 lt M lt 5 表示矩阵A的阶数和要求的幂数 接下来N
  • excel或txt格式坐标到面图层(python)

    背景 现有如下图所示的多个界址点坐标 excel格式或txt格式 需求 根据大量界址点坐标转换为界址点坐标对应的面shp图层 解决思路 一 为方便处理首先将txt文件或excel文件转换为csv文件 逗号分割符 二 为方便理解和使用 我们将
  • python numpy的学习

    0 引入numpy import numpy as np 1 将list变成np a 1 2 3 4 5 6 b np array a 将list变成array a shape 2 3 2行3列 a shape 0 2 获取行数 a sha
  • 攻防世界之WEB新手练习区(更新至11)

    攻防世界之WEB新手练习区 目录 001 view source 002 get post 003robots 004backup 005cookie 006disable button 007simple js 008xff refere
  • FTDI FT2232H在嵌入式教学中的应用

    FT2232H是FTDI chip在2012年发布的一款高速USB转串行通信的协议转换芯片 作为第五代USB协议转串行总线通信协议的芯片 完全符合USB2 0规范 480Mb s 并且可以依靠编程的方式配置成为串行或者并行的其他总线接口规范