OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5276|回复: 3

[求助] 請問CH376的寫入控制?

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2013-9-20
在线时间
0 小时
发表于 2013-9-20 23:39:33 | 显示全部楼层 |阅读模式
请教前辈,小弟在使用CH376这颗U盘控制IC的时候目前遇到一个奇怪的问题就是假设文件内容是空的就可以写入数据,假设文件有数据的话就没办法写入数据,文件扩展名是TXT,以下昰我的程序代码,可否请知道问题的前辈指点,感谢!

主程式

    while(1)
    {
        ORTB = 0X00;
        Delay5us(20);

//Test communication interface and work status
        UART1_RX_Value_Buffer = 0;
        while(UART1_RX_Value_Buffer != 0x00)
        {
            Delay5us(8);
            CHECK_EXIST();
        }
            ORTBbits.RB0 = 1;

//Setting the USB mode
        UART1_RX_Value_Buffer = 0;
        while(UART1_RX_Value_Buffer!= 0x51)
        {
            Delay5us(8);
            SET_USB_MODE();
        }
            ORTBbits.RB1 = 1;
//Initialize the disk and test disk ready
        UART1_RX_Value_Buffer = 0;
        while(UART1_RX_Value_Buffer !=0x14)
        {
             Delay5us(8);
             DISK_MOUNT();
        }
             PORTBbits.RB2 = 1;
//Set to operate on the file name
             Delay5us(8);
             SET_FILE_NAME();
             PORTBbits.RB3 = 1;

//Open the file or directory, enumerate files and directories
         UART1_RX_Value_Buffer = 0;
         while(UART1_RX_Value_Buffer !=0x14)
         {
            Delay5us(8);
            FILE_OPEN();
         }
            ORTBbits.RB4 = 1;
//Create documents
//        while(FILE_CREATE()!=0x14)
//              Delay5ms(1);
//              ORTBbits.RB4 = 1;
//              UART1_RX_Value_Buffer = 0;
//===============================================================
            Delay5us(8);
            BYTE_LOCATE();

//In bytes of the write data block to the current location
           UART1_RX_Value_Buffer = 0;
           //while(UART1_RX_Value_Buffer!=0x1E)
           //{
              Delay5us(8);
              BYTE_WRITE();
           //}
              ORTBbits.RB5 = 1;
//Specified buffer to the internal write request data blocks
           UART1_RX_Value_Buffer = 0;
           //while(UART1_RX_Value_Buffer!=0x08)
           //{
              Delay5us(8);
              WR_REQ_DATA();
           //}
              ORTBbits.RB6 = 1;
//-----------------------------------------------------------
              Delay5us(8);
              UART1_Send_Value(0x41);
              UART1_Send_Value(0x41);
              UART1_Send_Value(0x42);
              UART1_Send_Value(0x42);
              UART1_Send_Value(0x46);
              UART1_Send_Value(0x0D); // \r
              UART1_Send_Value(0x0A); // \n
              UART1_Send_Value(0x45);
              UART1_Send_Value(0x46);
              UART1_Send_Value(0x47);
              UART1_Send_Value(0x48);
              UART1_Send_Value(0x49);
              UART1_Send_Value(0x50);
              UART1_Send_Value(0x51);
              UART1_Send_Value(0x52);
//Continue byte write
            UART1_RX_Value_Buffer = 0;
            //while(UART1_RX_Value_Buffer!=0x14)
            //{
              Delay5us(8);
              BYTE_WR_GO();
            //}
              ORTBbits.RB7 = 1;
//Closes the currently open file or directory
             UART1_RX_Value_Buffer = 0;
             while(UART1_RX_Value_Buffer!=0xB4)
             {
              Delay5us(8);
              FILE_CLOSE();
             }
              ORTBbits.RB8 = 1;

              Delay5us(100);
}

程式模組
unsigned char CHECK_EXIST()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x06);
    UART1_Send_Value(0xFF);
    return  UART1_RX_Value_Buffer;
}
////Setting the USB mode
unsigned char SET_USB_MODE()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x15);
    UART1_Send_Value(0x06);
    return  UART1_RX_Value_Buffer;
}
//Initialize the disk and test disk ready
unsigned char DISK_MOUNT()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x31);
    return  UART1_RX_Value_Buffer;
}
//Set to operate on the file name
unsigned char SET_FILE_NAME()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x2F);
    char data[] = "TEST.TXT";
    UART1_Send_String(data);

    //TEST.TXT
    //UART1_Send_Value(0x54);
    //UART1_Send_Value(0x45);
    //UART1_Send_Value(0x53);
    //UART1_Send_Value(0x54);
    //UART1_Send_Value(0x2E);
    //UART1_Send_Value(0x54);
    //UART1_Send_Value(0x58);
    //UART1_Send_Value(0x54);
    return  UART1_RX_Value_Buffer;
}
//Create documents
unsigned char FILE_CREATE()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x34);
    return  UART1_RX_Value_Buffer;
}

unsigned char BYTE_WRITE()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x3C);
    UART1_Send_Value(0x0F);
    UART1_Send_Value(0x0F>>8);
    return  UART1_RX_Value_Buffer;
}

unsigned char BYTE_READ()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x3A);
    return  UART1_RX_Value_Buffer;
}
unsigned char WR_REQ_DATA()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x2D);
    return  UART1_RX_Value_Buffer;
}

unsigned char BYTE_WR_GO()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x3D);
    return  UART1_RX_Value_Buffer;
}

unsigned char FILE_CLOSE()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x36);
    UART1_Send_Value(0x01);
    return  UART1_RX_Value_Buffer;
}

unsigned char FILE_OPEN()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x32);
    return  UART1_RX_Value_Buffer;
}

unsigned char BYTE_LOCATE()
{
    UART1_Send_Value(0x57);
    UART1_Send_Value(0xAB);
    UART1_Send_Value(0x39);

    UART1_Send_Value(0xFF);
    UART1_Send_Value(0xFF);
    UART1_Send_Value(0xFF);
    UART1_Send_Value(0xFF);
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-21 21:33:24 | 显示全部楼层
回复 支持 反对

使用道具 举报

43

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1074
金钱
1074
注册时间
2012-1-10
在线时间
238 小时
发表于 2013-9-22 09:44:40 | 显示全部楼层
CH376如果文件有数据,且继续在内容后面写入数据,就需要将文件指针指向文件末尾,即调用CH376的库文件中的s = CH376SecLocate( 0xFFFFFFFF );  然后,写入数据,关闭文件即可。
回复 支持 反对

使用道具 举报

13

主题

314

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2012-7-20
在线时间
102 小时
发表于 2014-2-28 14:12:12 | 显示全部楼层
感谢2L分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 04:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表