ajfan 发表于 2024-4-9 20:28:36

FT232H 异步FIFO传送数据给PC间隔是4?

本帖最后由 ajfan 于 2024-4-9 20:35 编辑

请教各位大神,C8051F340连FT232H工作在异步FIFO口模式,F340---》FT232H---》PC,上位机用labview,目前数据可以通过F340往PC上传,但是PC端读取的数据都是间隔4的数据,硬件使用的是淘宝买的FT232H的开发板,硬件故障的概率比较小,有可能还是逻辑,时序或上位机的问题,有大神可以指点一下迷津么?

(我的理解是FT232H的FIFO如果没有满,对应TXE为低,送数据给FIFO data口,MCU控制WR口由高变低传送一个Byte的数据,循环WR由高变低传送对应的Bytes,直到FIFO满TXE为高停止)
(上位机先找到对应的USB端口,然后设定SetLatencyTimer和SetUSBParameters,然后purge清除FIFO口数据,然后循环查询FT_GetStatus如果接收FIFO 不为空则对应将数据用FT_Read读取出来,这里FIFO 字节数好像也不对,不应该是65536,FIFO好像也就256或512不可能读到65536,难道是下载的FT232H labview API有问题???)

另外TXE的t7感觉时间有点短,最小49ns,但TXE是FT232H给出来的,控制不了,总感觉实测TXE和WR波形怪怪的。

F340工作在48MHZ
F340的P3口连接到FT232H的FIFO data口。

//---------------------------------------------------------------------------------
#include <C8051F340.H>
#include <string.h>
#include <intrins.h>
#include<stdlib.h>

sbit FT232_RXF=P0^0;
sbit FT232_TXE=P0^1;
sbit FT232_RD=P0^3;
sbit FT232_WR=P0^4;

void Port_IO_Init()
{
    P0MDOUT   = 0x18;
    P3MDOUT   = 0xFF;                //P3数据给FT232H
    XBR1      = 0x40;
}

void Oscillator_Init()
{
    int i = 0;
    CLKMUL    = 0x80;
    for (i = 0; i < 20; i++);    // Wait 5us for initialization
    CLKMUL    |= 0xC0;
    while ((CLKMUL & 0x20) == 0);
    CLKSEL    = 0x03;
}

void delay_1us(void)
{
    _nop_();
    _nop_();
    _nop_();
    _nop_();
}

void delay_1ms(void)               
{
           unsigned int i;
    for(i=2184;i>0;i--);
}

void delay_ms(unsigned int i)               
{
for(i;i>0;i--)
{
   delay_1ms();
}
}



//------------------------------------------------------------------------------------------
//=================================================================================
//                                 主函数定义
//=================================================================================
void main()
{
    PCA0MD &= ~0x40;             //禁止看门狗
    Port_IO_Init();
    Oscillator_Init();

    FT232_RD=1;
    FT232_WR=1;

    while(1)
   {        
           unsigned int h=0;

           for (h = 0; h < 256; h++)
             {
                if(FT232_TXE==0)
                   {
                       P3=h;
                     P3=h;                   //delay t8>5ns
                     FT232_WR=0;
                     FT232_WR=0;   //delay t10>30ns
                     FT232_WR=0;   //delay t10>30ns
                     FT232_WR=1;
                   }
          }
   }
}

天下乌鸦一般黑 发表于 2024-4-10 08:36:22

还没有二楼是吧。我试试看。
你右键“我的电脑”,选“管理”,打开的界面在“设备管理器”里找到你的usb转串口对应的端口号。右键选中后,选择“属性”,在属性里点“端口设置”页面,点击“高级”,看到了么,把延时计时器选1,至于接收和发送字节数,自己够用就行,改小点。

ajfan 发表于 2024-4-10 08:52:06

谢谢二楼,目前FT232H配置的是USB转异步并行口模式,改串口设置也有用么?还是说模块我配置为并行口实际工作在串口?目前Bit Mode 读到是A2,我来查一下。
FT232H难道串口和并行口,用的FIFO是同一个?

ajfan 发表于 2024-4-10 20:48:13

群里有好几位大牛好像研究过FT232H或FT2232的,我来顶一下。
周边没有人搞这些电路什么的,最苦恼的就是遇到问题一个商量的人都没有。

ajfan 发表于 2024-4-10 21:16:31

我能说什么,换了个VI API竟然好了,谁能知道是下载的API有问题啊?

wanggoals 发表于 2024-4-10 21:25:22

ajfan 发表于 2024-4-10 21:16
我能说什么,换了个VI API竟然好了,谁能知道是下载的API有问题啊?
(引用自5楼)

会不会是32位和64位系统的兼容问题,这货的不同系统是用不同的驱动。

lyping1987 发表于 2024-4-10 22:26:09

labview始终有点看不习惯。。

ajfan 发表于 2024-4-10 23:34:40

labview效率不一定是最高,但调试是真方便,任意地方可以放探针,库也比较多

dahailangchao1 发表于 7 天前

ajfan 发表于 2024-4-10 21:16
我能说什么,换了个VI API竟然好了,谁能知道是下载的API有问题啊?
(引用自5楼)

这个VI哪里可下载
页: [1]
查看完整版本: FT232H 异步FIFO传送数据给PC间隔是4?