当前位置: 首页 > news >正文

FT2232调试记录(2)

FT2232调试记录

  • (1)获取当前连接的FTDI设备通道个数:
  • (2)获取当前连接的设备通道的信息:
  • (3)配置SPI的通道:
  • (4)如何设置GPIO:
  • (5)DEMO测试:

FT2232调试记录(1):
FT2232调试记录(2):
FT2232调试记录(3):

#参考文档:
(1)包含了FT2xxx和IIC SPI的操作手册。
相关文档:https://ftdichip.com/document/programming-guides/
(2)包含了MPSSE和MCU主机总线仿真模式的命令处理器。
AN108:Command Processor for MPSSE and MCU Host Bus Emulation Modes.
(3)相关博客:FT2232H编程流程分析

(1)获取当前连接的FTDI设备通道个数:

    status = SPI_GetNumChannels((DWORD *)&channels);APP_CHECK_STATUS(status);qDebug("Number of available SPI channels = %d\n",channels);

(2)获取当前连接的设备通道的信息:

FT2232 有两个通道,使用SPI_GetChannelInfo 获取通道信息。

    FT_DEVICE_LIST_INFO_NODE devList[2];status = SPI_GetChannelInfo(0,&devList[0]);APP_CHECK_STATUS(status);printf("Information on channel number %d:\n",0);/* print the dev info */qDebug(" Flags=0x%x\n",devList[0].Flags);qDebug(" Type=0x%x\n",devList[0].Type);qDebug(" ID=0x%x\n",devList[0].ID);qDebug(" LocId=0x%x\n",devList[0].LocId);qDebug(" SerialNumber=%s\n",devList[0].SerialNumber);qDebug(" Description=%s\n",devList[0].Description);qDebug(" ftHandle=0x%x\n",devList[0].ftHandle);/*is 0 unless open*/status = SPI_GetChannelInfo(1,&devList[1]);APP_CHECK_STATUS(status);printf("Information on channel number %d:\n",1);/* print the dev info */qDebug(" Flags=0x%x\n",devList[1].Flags);qDebug(" Type=0x%x\n",devList[1].Type);qDebug(" ID=0x%x\n",devList[1].ID);qDebug(" LocId=0x%x\n",devList[1].LocId);qDebug(" SerialNumber=%s\n",devList[1].SerialNumber);qDebug(" Description=%s\n",devList[1].Description);qDebug(" ftHandle=0x%x\n",devList[1].ftHandle);/*is 0 unless open*/
Information on channel number 0:
Flags=0x2
Type=0x6
ID=0x4036010
LocId=0x231
SerialNumber=A
Description=Dual RS232-HS A
ftHandle=0x0
status ok!
Information on channel number 1:
Flags=0x2
Type=0x6
ID=0x4036010
LocId=0x232
SerialNumber=B
Description=Dual RS232-HS B
ftHandle=0x0

(3)配置SPI的通道:

如下举例为SPI操作通道 A (0):

uint32_t channels;
channelConf.ClockRate = 5000;
channelConf.LatencyTimer= 255;
channelConf.configOptions = SPI_CONFIG_OPTION_MODE0 | SPI_CONFIG_OPTION_CS_DBUS3;
channelConf.Pin = 0x00000000;/*FinalVal-FinalDir-InitVal-InitDir (for dir 0=in, 1=out)*/status = SPI_GetNumChannels((DWORD *)&channels);
APP_CHECK_STATUS(status);qDebug("Number of available SPI channels = %d\n",channels);/* Open the first available channel */
status = SPI_OpenChannel(0,&ftHandle[0]);
APP_CHECK_STATUS(status);
qDebug("\nhandle=0x%x status=0x%x\n",ftHandle[0],status);
status = SPI_InitChannel(ftHandle[0],&channelConf);
APP_CHECK_STATUS(status);********status = SPI_CloseChannel(ftHandle[0]);   

(4)如何设置GPIO:

方式一:
libmpsse 库中提供的接口,FT_WriteGPIO,只能支持ACBUS(BCBUS) 即高字节操作。

FT_STATUS FT_WriteGPIO(FT_HANDLE handle, uint8 dir, uint8 value)
dir: 0 out 1 in
value:0 low 1 high
FT_STATUS FT_ReadGPIO(FT_HANDLE handle, uint8 *value)

控制引脚:AC3 AC4 BC3 BC4

FT2232H有两个MPSSE通道,每个通道带有两个8位端口:
即ADBUS和ACBUS,BDBUS和BCBUS.
其中:
【低字节】 ADBUS(BDBUS)用于同步串行通信(I2C/SPI/JTAG)
【高字节】 ACBUS(BCBUS)可以免费用作GPIO

初始化时候打开channel:

   /* Open the first available channel */status = SPI_OpenChannel(0,&ftHandle[0]);APP_CHECK_STATUS(status);qDebug("\nhandle=0x%x status=0x%x\n",ftHandle[0],status);status = SPI_InitChannel(ftHandle[0],&channelConf);APP_CHECK_STATUS(status);//    status = SPI_CloseChannel(ftHandle[0]);/* Open the first available channel */status = SPI_OpenChannel(1,&ftHandle[1]);APP_CHECK_STATUS(status);qDebug("\nhandle=0x%x status=0x%x\n",ftHandle[1],status);status = SPI_InitChannel(ftHandle[1],&channelConf);APP_CHECK_STATUS(status);//    status = SPI_CloseChannel(ftHandle[1]);
void bsp_ft2232::bsp_ledA(enum typePinA chl, bool highlow)
{
uint8_t val=0;
FT_ReadGPIO(ftHandle[0],&val);
FT_WriteGPIO(ftHandle[0],gpio_setting[0], ( highlow ? (val|(0x1<<(chl)) ) : (val&(~(0x1<<(chl))) ) ) );
}void bsp_ft2232::bsp_ledB(enum typePinB chl, bool highlow)
{uint8_t val=0;FT_ReadGPIO(ftHandle[1],&val);FT_WriteGPIO(ftHandle[1],gpio_setting[1], ( highlow ? (val|(0x1<<(chl)) ) : (val&(~(0x1<<(chl))) ) ) );
}

方式二:
使用ftd2xx 库中提供的接口。 调用FT_Write 库。
在这里插入图片描述

3.6.1 Set Data bits LowByte
0x80, 0xValue, 0xDirection
This will setup the direction of the first 8 lines and force a value on the bits that are set as output. A 1 in
the Direction byte will make that bit an output.
3.6.2 Set Data bits High Byte
0x82, 0xValue, 0xDirection
This will setup the direction of the high 8 lines and force a value on the bits that are set as output. A 1 in
the Direction byte will make that bit an output.
3.6.3 Read Data bits LowByte
0x81,
This will read the current state of the first 8 pins and send back 1 byte.
3.6.4 Read Data bits HighByte
0x83,
This will read the current state of the high 8 pins and send back 1 byte.

void bsp_ft2232::bsp_ledtest(bool highlow)
{if(highlow){dwNumBytesToSend = 0;			            byOutputBuffer[dwNumBytesToSend++] = 0x82;	byOutputBuffer[dwNumBytesToSend++] = 0xFF;	byOutputBuffer[dwNumBytesToSend++] = 0xFF;	status = FT_Write(ftHandle[0], byOutputBuffer, dwNumBytesToSend, &dwNumBytesSent);qDebug("on %d\r\n",dwNumBytesSent);dwNumBytesSent=0;dwNumBytesToSend = 0;}else{dwNumBytesToSend = 0;			byOutputBuffer[dwNumBytesToSend++] = 0x82;	byOutputBuffer[dwNumBytesToSend++] = 0x00;	byOutputBuffer[dwNumBytesToSend++] = 0xFF;	status = FT_Write(ftHandle[0], byOutputBuffer, dwNumBytesToSend, &dwNumBytesSent);qDebug("off %d\r\n",dwNumBytesSent);dwNumBytesSent=0;dwNumBytesToSend = 0;}
}

(5)DEMO测试:

在这里插入图片描述
在这里插入图片描述

相关文章:

FT2232调试记录(2)

FT2232调试记录 &#xff08;1&#xff09;获取当前连接的FTDI设备通道个数:&#xff08;2&#xff09;获取当前连接的设备通道的信息:&#xff08;3&#xff09;配置SPI的通道:&#xff08;4&#xff09;如何设置GPIO:&#xff08;5&#xff09;DEMO测试&#xff1a; FT2232调…...

网络学习:数据链路层VLAN原理和配置

一、简介&#xff1a; VLAN又称为虚拟局域网&#xff0c;它是用来将使用路由器的网络分割成多个虚拟局域网&#xff0c;起到隔离广播域的作用&#xff0c;一个VLAN通常对应一个IP网段&#xff0c;不同VLAN通常规划到不同IP网段。划分VLAN可以提高网络的通讯质量和安全性。 二、…...

Docker的常见命令以及命令别名

常见命令 命令说明docker pull拉取镜像docker push推送镜像到DockerRegistrydocker images查看本地镜像docker rmi删除本地镜像docker run创建并允许容器docker stop停止指定容器docker start启动指定容器docker restart重新启动容器docker rm删除指定容器docker ps查看容器do…...

2024.02.14作业

1. 请编程实现二维数组的杨辉三角 #include <stdio.h> #include <stdlib.h> #include <string.h>int main() {int n;scanf("%d", &n);int a[n][n];memset(a, 0, sizeof(a));a[0][0] 1;for (int i 1; i < n; i){for (int j 0; j < i …...

SpringMVC原理(设计原理+启动原理+工作原理)

文章目录 前言正文一、设计原理1.1 servlet生命周期简述1.2 设计原理小结 二、启动原理2.1 AbstractHandlerMethodMapping 初始化 --RequestMapping注解解析2.2 DispatcherServlet 的初始化2.3 DispatcherServlet#initHandlerMappings(...) 初始化示例说明 三、工作原理 前言 …...

Java+SpringBoot构建智能捐赠管理平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…...

ubuntu远程桌面配置以及常见问题

ubuntu桌面系统配置 ubuntu远程桌面配置如下 第一步&#xff0c;安装xrdp sudo apt-get isntall xrdp安装完检查一下服务是否可以正常启动&#xff0c; sudo systemctl status xrdp如果看到active应该就正常启动了 第二步&#xff0c;开启Ubuntu桌面共享 好接下来我们测试一…...

数据结构:并查集讲解

并查集 1.并查集原理2.并查集实现3.并查集应用4.并查集的路径压缩 1.并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中…...

Stable Diffusion主流UI详细介绍

Stable Diffusion目前主流的操作界面有WebUI、ComfyUI以及Fooocus 这里webui和fooocus在人机交互上的逻辑是一样的&#xff0c;fooocus界面更加简洁。 comfyui是在人机交互上是采用流程节点的交互逻辑&#xff0c;和上面略有区别。 界面分别如下&#xff1a; WebUI界面如下 we…...

webpack5 常用插件使用

webpack5常用插件使用 1. CleanWebpackPlugin2. HtmlWebpackPlugin3. DefinePlugin4.CopyWebpackPlugin 1. CleanWebpackPlugin 问题&#xff1a;每次打包完都需要手动删除掉dist文件目录&#xff0c;使用CleanWebpackPlugin就可自动清除dist目录。作用&#xff1a;自动清除di…...

利用Python和pandas库进行股票技术分析:移动平均线和MACD指标

利用Python和pandas库进行股票技术分析&#xff1a;移动平均线和MACD指标 介绍准备工作数据准备计算移动平均线计算MACD指标结果展示完整代码演示 介绍 在股票市场中&#xff0c;技术分析是一种常用的方法&#xff0c;它通过对股票价格和交易量等历史数据的分析&#xff0c;来…...

whisperspeech 英文TTS的实现

以下代码成功运行在 colab 中&#xff0c;需要修改运行时类型为 T4 GPU。 !pip install -Uqq WhisperSpeech def is_colab():try: import google.colab; return Trueexcept: return Falseimport torch # if not torch.cuda.is_available(): # if is_colab(): raise BaseEx…...

P1000 超级玛丽游戏(洛谷)

题目背景 本题是洛谷的试机题目&#xff0c;可以帮助了解洛谷的使用。 建议完成本题目后继续尝试 P1001、P1008。 另外强烈推荐新用户必读贴 题目描述 超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。 ********************####....#.#..###…...

数据卷的常见命令,如何创建Nginx容器,修改nginx容器内的html目录下的index.html文件

数据卷 什么是数据卷 数据卷&#xff08;volume&#xff09;是一个虚拟目录&#xff0c;是容器内目录与宿主机**目录**之间映射的桥梁。 以Nginx为例&#xff0c;我们知道Nginx中有两个关键的目录&#xff1a; html&#xff1a;放置一些静态资源 conf&#xff1a;放置配置文…...

CFS三层靶机

参考博客&#xff1a; CFS三层内网靶场渗透记录【详细指南】 - FreeBuf网络安全行业门户 CFS三层靶机搭建及其内网渗透【附靶场环境】 | TeamsSix CFS三层网络环境靶场实战 - PANDA墨森 - 博客园 (cnblogs.com) CFS三层靶机实战--内网横向渗透 - 知乎 (zhihu.com) CFS靶机…...

C语言——oj刷题——获取月份天数

题目&#xff1a; 描述 KiKi想获得某年某月有多少天&#xff0c;请帮他编程实现。输入年份和月份&#xff0c;计算这一年这个月有多少天。 输入描述&#xff1a; 多组输入&#xff0c;一行有两个整数&#xff0c;分别表示年份和月份&#xff0c;用空格分隔。 输出描述&…...

Java面试题2024(Java面试八股文)

文章目录 基础Springspring Mybatis数据库Mysql redis并发编程网络通信消息队列MQ分布式分布式事务 设计模式 更新中 基础 Java基础 Java对象的创建 集合 HashMap详解 HashMap实现原理 ConcurrentHashMap原理详解 反射 JAVA反射详解 异常 Java 的异常体系 泛型 Java泛型详解 …...

Uniapp(uni-app)学习与快速上手教程

Uniapp&#xff08;uni-app&#xff09;学习与快速上手教程 1. 简介 Uniapp是一个跨平台的前端框架&#xff0c;允许您使用Vue.js语法开发小程序、H5、安卓和iOS应用。下面是快速上手的步骤。 2. 创建项目 2.1 可视化界面创建 1、打开 HBuilderX&#xff0c;这是一款专为uni…...

如何开始深度学习,从实践开始

将“如何开始深度学习”这个问题喂给ChatGPT和文心一言&#xff0c;会给出很有专业水准的答案&#xff0c;比如&#xff1a; 要开始深度学习&#xff0c;你可以遵循以下步骤&#xff1a; 学习Python编程语言的基础知识&#xff0c;因为它在深度学习框架中经常被使用。 熟悉线性…...

PostgreSQL的学习心得和知识总结(一百二十九)|深入理解PostgreSQL数据库GUC参数 update_process_title 的使用和原理

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库链接,点击前往 4、日本著名PostgreSQL数据库专家 铃木启修 网站…...

项目介绍 MATLAB实现基于RRT-Bezier快速搜索随机树算法(RRT)结合贝塞尔曲线拟合(Bezier)进行无人机三维路径规划的详细项目实例(含模型描述及部分示例代码) 还请多多点一下关注 加

MATLAB实现基于RRT-Bezier快速搜索随机树算法&#xff08;RRT&#xff09;结合贝塞尔曲线拟合&#xff08;Bezier&#xff09;进行无人机三维路径规划的详细项目实例 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面&#xff08;含完整的程序&a…...

Hunyuan-MT Pro详细步骤:本地启动http://localhost:6666翻译终端

Hunyuan-MT Pro详细步骤&#xff1a;本地启动http://localhost:6666翻译终端 1. 快速了解Hunyuan-MT Pro Hunyuan-MT Pro是一个基于腾讯混元开源模型构建的现代化翻译工具&#xff0c;它把强大的AI翻译能力包装成了一个简单易用的网页应用。你不需要懂复杂的技术&#xff0c;…...

【忍者算法】394 字符串解码:遇到嵌套时,栈最像“现场保存器”

【忍者算法】394 字符串解码:遇到嵌套时,栈最像“现场保存器” 接上题:这次栈里要存“上一层的现场” 前两题里,我们已经见过两种栈的用法: 《有效括号》:栈存“还没配对的左括号”。 《最小栈》:栈存数据,同时顺手维护“当前最小值”。 这一题会再往前走一步。 因为…...

新手零踩坑!微信搜一搜排名优化8大干货,14天轻松冲进前10

很多新手运营者都有一个共同的困惑&#xff1a;明明做了公众号、小程序&#xff0c;也发了不少内容&#xff0c;可在微信搜一搜里搜相关关键词&#xff0c;却始终找不到自己的账号和内容&#xff0c;排名一直徘徊在百名之外&#xff0c;精准流量根本引不进来&#xff0c;更别提…...

Modbus转EtherCAT网关开发秘笈:用AX58100实现120个命令自动映射(Web配置全图解)

Modbus转EtherCAT网关开发实战&#xff1a;AX58100零代码配置与工业部署全指南 工业自动化领域正经历着从传统串行通信向实时以太网协议的转型浪潮。作为这场变革的核心枢纽&#xff0c;协议转换网关的性能直接决定了整个系统的响应速度和稳定性。本文将深入探讨如何利用AX5810…...

利用快马AI快速生成n8n自动化工作流原型,十分钟搭建业务逻辑骨架

今天想和大家分享一个快速搭建n8n自动化工作流原型的经验。作为一个经常需要处理各种自动化流程的开发者&#xff0c;我发现用InsCode(快马)平台可以大大缩短从构思到实现的时间。 为什么选择n8n工作流原型 n8n作为开源自动化工具&#xff0c;最大的优势就是可视化工作流设计…...

从DTC诊断码到ECU恢复:深入解析车载CAN总线的BUSOFF快慢恢复机制

从DTC诊断码到ECU恢复&#xff1a;车载CAN总线BUSOFF快慢恢复机制实战指南 当CAN总线上的某个ECU因连续发送失败而触发BUSOFF状态时&#xff0c;整个车载网络的稳定性便面临严峻考验。作为汽车电子诊断工程师&#xff0c;我们常常需要在深夜的生产线上&#xff0c;面对闪烁的故…...

3步解锁无线投屏自由:MiracleCast让多设备互联从此无束缚

3步解锁无线投屏自由&#xff1a;MiracleCast让多设备互联从此无束缚 【免费下载链接】miraclecast Connect external monitors to your system via Wifi-Display specification also known as Miracast 项目地址: https://gitcode.com/gh_mirrors/mi/miraclecast &…...

Dify工作流实战:用Agent节点串联多个MCP服务,让智能体同时操作数据库和外部工具

Dify工作流深度实战&#xff1a;用Agent节点构建多服务协同的智能体系统 在AI应用开发领域&#xff0c;Dify平台的工作流功能正在重新定义智能体的能力边界。不同于简单的单点工具调用&#xff0c;工作流允许开发者将多个MCP服务像乐高积木一样组合起来&#xff0c;创造出能够…...

如何在1小时内掌握TinySAM:从零开始构建高效图像分割模型

如何在1小时内掌握TinySAM&#xff1a;从零开始构建高效图像分割模型 【免费下载链接】TinySAM 项目地址: https://gitcode.com/gh_mirrors/ti/TinySAM 想象一下&#xff0c;你需要在移动设备上实时分割图像中的任意物体&#xff0c;但传统模型动辄几百兆&#xff0c;运…...