FT93x D2XX学习笔记 - 4. C# Loop测试程序

72 篇文章 36 订阅

1. 安装D2XX驱动

引用dll中的API函数的方式,参考例子:

[DllImport("ftd2xx.dll")]
        public static extern eDeviceStatus FT_CreateDeviceInfoList(ref UInt32 numdevs);

2. 遍历FTDI USB设备得到描述符信息

a) 获取FTDI USB设备数量

            UInt32 numOfDevices = 0;
            CFTD2xx.eDeviceStatus ftStatus = 0;
            ftStatus = CFTD2xx.FT_CreateDeviceInfoList(ref numOfDevices);

b) 遍历所有的FTDI USB设备,得到每个设备的信息,将描述符信息加入到一个ComboBox中

           cbDeviceList.Items.Clear();

            for (UInt32 iDev = 0; iDev < numOfDevices; ++iDev)
            {
                ftStatus = CFTD2xx.FT_GetDeviceInfoDetail(iDev, ref flags,
                    ref chiptype,
                    ref id, ref locid,
                    serialnumber,
                    description,
                    ref ftHandle);

                if (ftStatus == CFTD2xx.eDeviceStatus.FT_OK)
                {
                    string tmp;
                    tmp = System.Text.Encoding.Default.GetString(description);
                    tmp = tmp.Substring(0, tmp.IndexOf("\0"));
                    if (string.IsNullOrEmpty(tmp))
                        continue;
                    cbDeviceList.Items.Add(tmp);
                }
            }

3. 打开设备

在comboBox中选中需要打开设备的描述符

                IntPtr init = Marshal.StringToHGlobalAnsi(cbDeviceList.Text);
                ftStatus = CFTD2xx.FT_OpenEx(init,
                    CFTD2xx.FT_OPEN_BY_DESCRIPTION,
                    ref ftHandle);
                Marshal.FreeHGlobal(init);

4. 设置一些参数(可选)

CFTD2xx.FT_SetUSBParameters(ftHandle, 4096, 4096);
CFTD2xx.FT_SetTimeouts(ftHandle, 5000, 5000); // Set read/write timeouts to 5 sec 
CFTD2xx.FT_SetLatencyTimer(ftHandle, 0); // Latency timer at default 1ms

5. 写数据

UInt32 lpBytesWrtitten = 0;
CFTD2xx.FT_Write(ftHandle, buf, (UInt32)buf.Length, ref lpBytesWrtitten);

6. 读数据

        private void loopRecvData()
        {
            UInt32 count = 1024;
            UInt32 byteRead = 0;
            
            CFTD2xx.eDeviceStatus ftStatus = 0;
            ftStatus = CFTD2xx.FT_GetQueueStatus(ftHandle, ref byteRead);
            
            if (byteRead > 0)
            {
                byte[] rdBuf = new byte[byteRead];
                ftStatus = CFTD2xx.FT_Read(ftHandle, rdBuf, (UInt32)rdBuf.Length, ref byteRead);
                lock (loopLocker)
                {
                    for (int i = 0; i < byteRead; i++)
                    {
                        loopQueue.Enqueue(rdBuf[i]);
                    }
                }
            }
        }

USB的读写数据的速度,PC写MCU的速度可以达到7MB/S(因为MCU端是采用loop的方式,因此理论上速度应该更快),理论上PC从MCU读数据应该是差不多的速度。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值