以扇区方式写U盘如何操作
U盘读写模块,以扇区为单位往文件写数据,给的调试软件,写的内容固定,怎么写自己的内容?
我参考CH375HMS.C,修改我的程序,还是不行。一个字节也没写进去。
我的应用环境是:89C58单片机,外加64K存储器,在存储器内,建了一个32K的数组,现在要把数组的内容移至U盘。另外,我中断接收,发送没有用中断。
改用扇区写,比原来每次写64个字节还慢,完了还没有写进去。
能否给一个子程序参考一下,看如何按扇区写数据到U盘。
void mSendByte( unsigned char c )
{
TI = 0;
SBUF = c;
while ( TI == 0 );
}

/* 从CH375模块接收一个字节数据 */
unsigned char mRecvByte( )
{
unsigned char c;
while ( RI == 0 );
c = SBUF;
RI = 0;
return( c );
}

void ExecCommand( unsigned char cmd, unsigned char len ,unsigned char *buffer)
{
unsigned char i, j, status;
RI = 0;
mSendByte( 0x57 );
mSendByte( 0xab );
mSendByte( cmd );
mSendByte( len );
if ( len ) {
for ( i = 0; i != len; i ++ ) mSendByte( 0x01 );
}
while ( 1 ) {
status = mRecvByte( );
if ( status == 0x00 ) {
i = mRecvByte( );
if ( i ) {
j = 0;
do {
j ++;
} while ( -- i );
}
break;
}
else if ( status == 0X1E ) {
i = 64;
do {
mSendByte( *buffer );
buffer ++;
} while ( -- i );
}
}
}

/*以扇区为单位向新建的文件内写数据的程序,不知是何原因*/
void main()
{
unsigned char xdata storage[32767];
unsigned char i;
ES = 0;
Uart_Send_Bytes(SendFileName,18); //新建文件
for(i=0;i<10;i++) // 写10个扇区
{
ExecCommand(0x6C,0x01,storage);
}
Uart_Send_Bytes(SendFileClose,5); //关闭文件
}

结果,文件内容与存储区内容不符。显示大小只有一个字节。
这人很懒,什么都没留下
我将上面的ExecCommand( unsigned char cmd, unsigned char len ,unsigned char *buffer)改为ExecCommand( unsigned char cmd, unsigned char len ,unsigned char xdata *buffer),写一个扇区,查看U盘,还是只有一个字节。请高手解释一下。
这人很懒,什么都没留下
在写入数据后要更新文件长度,这一步很重要。
^-^……
问题已解决。就是更新了数据长度。但是是用重写一次命令0扇区的方法,更新了文件长度。用文件属性修改的方法,修改时间可以,加入数据长度,函数好像有问题。
这人很懒,什么都没留下
建议最好看看我们的例子程序!其实很多古怪的问题全是程序问题!
此号封存
只有登录才能回复,可以选择微信账号登录