CH559UFI.H中的子程序库中的程序在哪里看到?

/* 子程序库中提供的子程序 */

/* 下述子程序中, 文件操作子程序CH559File*和磁盘查询子程序CH559DiskQuery都可能会用到磁盘数据缓冲区pDISK_BASE_BUF,

   并且有可能在pDISK_BASE_BUF中保存了磁盘信息, 所以必须保证pDISK_BASE_BUF不被用于其它用途,

   如果RAM较少, 要将pDISK_BASE_BUF临时用于其它用途, 那么在临时用完后必须调用CH559DirtyBuffer清除磁盘缓冲区 */

extern  UINT8   CH559GetVer( void );        /* 获取当前子程序库的版本号 */

extern  void    CH559DirtyBuffer( void );   /* 清除磁盘缓冲区 */

extern  UINT8   CH559BulkOnlyCmd( PUINT8X DataBuf );    /* 执行基于BulkOnly协议的命令 */

extern  UINT8   CH559DiskReady( void );     /* 查询磁盘是否准备好 */

extern  UINT8   CH559AnalyzeError( UINT8 iMode );   /* USB操作失败分析CH559IntStatus返回错误状态 */

extern  UINT8   CH559FileOpen( void );      /* 打开文件或者枚举文件 */

extern  UINT8   CH559FileClose( void );     /* 关闭当前文件 */

这些函数在哪里(哪个文件)可以看到?

U盘文件系统库以子程序库的形式提供使用,文件系统库的使用可以参考U_DISK下各个EXAM


再请教:UFX库

CH559ByteWrite()返回 Error: 41 是怎么回事?



头文件CH559UF?.H中:

#define ERR_OPEN_DIR 0x41        /* 指定路径的目录被打开 */

1、检查U盘的文件系统是否是FAT32

2、将U盘格式化之后直接运行EXAM9程序,该程序会新建文件,然后对新建的文件进行操作,避免因文件是电脑系统下创建的文件,且具有长文件名的。

3、注意file open时需要操作的是文件的短文件名,短文件名需符合8+3格式。



问题解决,不符合8+3规则,谢谢!


U盘数据:

*S*

00000000000

11111111111

22222222222

33333333333

44444444444

55555555555

66666666666

77777777777

88888888888

99999999999

AAAAAAAAA

BBBBBBBBBB

CCCCCCCCC

DDDDDDDD

EEEEEEEEEEE

FFFFFFFFFFF

*E*

用例程U_DISK\EXAM1 + UFX库读取,每次64个字节,第一次和第二次正确,第三次数据错误,为何?

第一次:

Read Bytes Amount: 64

*S*

00000000000

11111111111

22222222222

33333333333

4444444

第二次:

4444

55555555555

66666666666

77777777777

88888888888

999999

第三次:

USBC9

ADDDDDDDD

EEEEEEEEEEE


UINT8 USBGetData(PUINT8 buf)

{

    UINT8 s, i, k, len;  //每次读n个字节

    UINT8 TotalCount = fieldlen;

    memset(buf, 0, sizeof(buf));

k = 0;

    printf("Read Bytes Amount: %02d\n", (UINT16)TotalCount);

    while(TotalCount)                       //如果文件比较大,一次读不完,可以再调用CH559ByteRead继续读取,文件指针自动向后移动

    {

        if(TotalCount > (MAX_PATH_LEN - 1))

        {

            len = MAX_PATH_LEN - 1;           //剩余数据较多,限制单次读写的长度不能超过 sizeof( mCmdParam.Other.mBuffer )

        }

        else

        {

            len = TotalCount;                 //最后剩余的字节数

        }

        mCmdParam.ByteRead.mByteCount = len;  //请求读出几十字节数据

        mCmdParam.ByteRead.mByteBuffer = &buf[k];

        s = CH559ByteRead();     //以字节为单位读取数据块,单次读写的长度不能超过MAX_BYTE_IO,第二次调用时接着刚才的向后读

        TotalCount -= mCmdParam.ByteRead.mByteCount;      //计数,减去当前实际已经读出的字符数

        for(i = 0; i != mCmdParam.ByteRead.mByteCount; i++)

        {

            printf("%C", mCmdParam.ByteRead.mByteBuffer[i]);  //显示读出的字符

        }

        if(mCmdParam.ByteRead.mByteCount < len)   //实际读出的字符数少于要求读出的字符数,说明已经到文件的结尾

        {

            printf("\n文件已经结束\n");

            break;

        }

k += len;

    }

    printf("\nVerify: ");

    printf(buf);

    return TotalCount;

}

为何?




image.png    

icon_rar.gifEVT.zip

对EXAM1简单修改,进行了测试,输出正确,代码工程和U盘文件均在附件中,可以试试看


只有登录才能回复,可以选择微信账号登录