FT2232调试记录(1)

FT2232调试记录

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

#参考文档:
(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测试:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/680421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全坚固平板EM-I12U,全新升级后的优质体验

平板终端机在户外勘探、制造业、畜牧业、银行金融行业当中都不是陌生的&#xff0c;能采集各种数据来转换成信息流向企业和行业的各个分支当中&#xff0c;在整个行业发展、社会推动上面都起着关键性作用&#xff0c;而平板终端机的升级也就意味着未来的这些行业发展会进入一个…

【Python】CRAPS赌博游戏

说明&#xff1a;CRAPS又称花旗骰&#xff0c;是美国拉斯维加斯非常受欢迎的一种的桌上赌博游戏。该游戏使用两粒骰子&#xff0c;玩家通过摇两粒骰子获得点数进行游戏。简单的规则是&#xff1a;玩家第一次摇骰子如果摇出了7点或11点&#xff0c;玩家胜&#xff1b;玩家第一次…

闲来无事,写几个好看的产品宣传界面,希望您喜欢

闲来无事&#xff0c;再写几个产品宣传页 宣传页面一&#xff1a; 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&…

JavaScript进阶教程 - Vue(Composition API、Vuex)

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。Vue 的核心库只关注视图层,易于学习且易于集成。随着 Vue 3 的发布,引入了 Composition API,这是一种新的组件编写方式,旨在解决 Vue 2 中使用 Options API 时遇到的一些限制。此外,Vuex 是 Vue 应用的状态管理模…

分享88个jQuery特效,总有一款适合您

分享88个jQuery特效&#xff0c;总有一款适合您 88个jQuery特效下载链接&#xff1a;https://pan.baidu.com/s/1NKQfcdNcojvA8xAb0BCaRA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理…

探索Redis特殊数据结构:Geospatial(地理位置)在实际中的应用

一、概述 Redis官方提供了多种数据类型&#xff0c;除了常见的String、Hash、List、Set、zSet之外&#xff0c;还包括Stream、Geospatial、Bitmaps、Bitfields、Probabilistic&#xff08;HyperLogLog、Bloom filter、Cuckoo filter、t-digest、Top-K、Count-min sketch、Confi…

ES实战-分析数据1

分析是文档被发送并加入倒排索引之前,es在其主体上进行的操作,具体如下 1.字符过滤-使用字符过滤器转变字符 2.文本切分为分词-将文本切分为单个或多个分词 3,分词过滤-使用分词过滤器转变每个分词 4.分词索引-将这些分词存储到索引中 为文档使用分析器 1.当创建索引的时候,为特…

二、docker compose安装

docker compose安装 docker compose的所有版本&#xff1a;https://github.com/docker/compose/releases # 安装步骤 # 1.下载docker compose&#xff1a;v2.5.0是docker-compose版本 curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-lin…

BIO、NIO、Netty演化总结

关于BIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;和NIO&#xff08;关于Java NIO的的思考-CSDN博客&#xff09;在之前的博客里面已经有详细的讲解&#xff0c;这里再总结一下最近学习netty源码的的心得体会 在之前的NIO博客中我们知道接受客户端连接和IO事件的…

每日OJ题_位运算④_力扣268. 丢失的数字

目录 力扣268. 丢失的数字 解析代码 力扣268. 丢失的数字 268. 丢失的数字 难度 简单 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1] 输出&#xff1a;2 …

数字图像处理技术

源码在末尾 ————————————————————————— 材料 有需要源码找我

【C语言】(21)非局部跳转库setjmp

setjmp 库提供了在 C 程序中进行非局部跳转的机制&#xff0c;它主要由两个函数组成&#xff1a;setjmp 和 longjmp。这两个函数通常用于异常处理和程序控制流的改变&#xff0c;尤其在错误恢复过程中非常有用。这种机制允许程序从深层嵌套的函数调用中跳转回到一个预先指定的恢…

ZigBee学习——BDB

✨本博客参考了善学坊的教程&#xff0c;并总结了在实现过程中遇到的问题。 善学坊官网 文章目录 一、BDB简介二、BDB Commissioning Modes2.1 Network Steering2.2 Network Formation2.3 Finding and Binding&#xff08;F & B&#xff09;2.4 Touchlink 三、BDB Commissi…

[C/C++] -- CMake使用

CMake&#xff08;Cross-platform Make&#xff09;是一个开源的跨平台构建工具&#xff0c;用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程&#xff0c;使得开发人员能够更方便地管理代码、依赖项和构建设置。 CMake 使用一个名为 CMakeLists.tx…

Ubuntu Desktop - Disks

Ubuntu Desktop - Disks 1. Search your computer -> DisksReferences 1. Search your computer -> Disks ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

探索Nginx:强大的开源Web服务器与反向代理

一、引言 随着互联网的飞速发展&#xff0c;Web服务器在现代技术架构中扮演着至关重要的角色。Nginx&#xff08;发音为“engine x”&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。Nginx因其卓越的性能、稳定性和灵活性&…

【JavaScript】操作 HTML 和 CSS

文章目录 1. 操作HTML文档获取和修改元素内容通过ID获取元素通过标签名获取元素通过类名获取元素 添加和删除元素创建新元素并添加到文档中删除元素 2. 操作CSS样式修改元素样式切换样式类获取计算样式 3. 事件处理添加事件监听器 4. 总结 在 Web 开发中&#xff0c;JavaScript…

AtCoder Beginner Contest 230 G. GCD Permutation(容斥/莫比乌斯反演 补写法)

题目 给定长为n(n<2e5)的1-n的排列p&#xff0c; 求(i,j)(1<i<j<n)对的数量&#xff0c;满足gcd(i,j)≠1且gcd(pi,pj)≠1 思路来源 官方题解 题解 参考莫比乌斯函数mu&#xff0c;定义一个新函数&#xff0c; 新函数需要满足n1的时候对因子求和为0&#xff0…

Stable Diffusion 模型下载:DreamShaper XL(梦想塑造者 XL)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 DreamShaper 是一个分格多样的大模型&#xff0c;可以生成写实、原画、2.5D 等…