U盘模块存储问题
我想把单片机的外括RAM(HK1245)里的数据全部读出,买的是串口设备,该如何操作。
字节模式太慢,应该用扇区模式吧。
我用A17=0;A16=0选中HK1245。定义一个指针变量xp,是否就可以读?
for(xp=0x0000;xp<=0x0228;xp++)
{
A17=0;A16=0;
len = sprintf( mCmdParam.ByteWrite.mByteBuffer,"%x\x20",*xp);
mCmdParam.ByteWrite.mByteCount = (unsigned char)len; i = ExecCommand( CMD_ByteWrite, (unsigned char)(len+1) ); mStopIfError( i );
}
这样写出来是否可以? 读出来每个数字后面都带4F,这是怎么回事?

如果用扇区该怎么读呢?

望请教,打电话也可以
这人很懒,什么都没留下
不太清楚您的RAM是如何扩展的,建议您电话和我们联系一下.025-52638373
此号封存
谢谢,我用扇区已经读出来了,但是全是乱码,该如何修改?
sbit A17=P3^5;
sbit A16=P3^4;
uchar xdata *xp;/*存贮数据指针*/
A17=0;A16=0;(选中外部RAM)
xp2=0x0000;
memcpy( mCmdParam.Create.mPathName, "\\双击我吧.TXT", MAX_PATH_LEN );
i = ExecCommand( CMD_FileCreate, MAX_PATH_LEN );
mCmdParam.Write.mSectorCount = 0x1;
buffer = xp2;
i = ExecCommand( CMD_FileWrite, 1 );
mCmdParam.Close.mUpdateLen = 1;
i = ExecCommand( CMD_FileClose, 1 );
这人很懒,什么都没留下
您好,乱码是因为TXT文件格式的原因.TXT是以ASCII的形式显示的,您可以用其他的工具查看就可以了.例如WINHEX软件.
此号封存
已发到邮箱,是否看完?
需要我现在打电话过去咨询么?
这人很懒,什么都没留下
您好,已经给您回邮件了,您的程序有点小问题,具体请您查收邮件.
此号封存
我没有收到哈,能否再发一遍!!
万分感谢!!!
这人很懒,什么都没留下
已经给您重发,请您查收!
此号封存
已经收到。谢谢~~·根据你说的我用memcpy(DATA_BUF,xp,32768);
uchar xdata *xp;/*存贮数据指针*/
xp=0x0000;
memcpy(DATA_BUF,xp,32768);
memcpy( mCmdParam.Create.mPathName, "\\双击我吧.TXT", MAX_PATH_LEN );
i = ExecCommand( CMD_FileCreate, MAX_PATH_LEN );
mStopIfError( i );
mCmdParam.Write.mSectorCount = 64;
buffer = DATA_BUF;
i = ExecCommand( CMD_FileWrite, 1 );
mCmdParam.Close.mUpdateLen = 1;
i = ExecCommand( CMD_FileClose, 1 );

用仿真器看到DATA_BUF里的数据都正确,但写到U盘里的数据不正确,请问我的代码还有不对的地方么?
在程序开始前我的片外RAM里在0x100后面数据已经存好,定义的DATA_BUF不会吧我原来RAM的数据清零吧?
这人很懒,什么都没留下
您好:
首先,定义了外部RAM的文件数据缓冲区unsigned char xdata DATA_BUF[ 512 *64] _at_ 0x0000;而你又定义
uchar xdata *xp;/*存贮数据指针*/
xp=0x0000;
所以这里的指针xp指向的地址不就是DATA_BUF数组的首地址了吗?执行命令memcpy(DATA_BUF,xp,32768);
这样,DATA_BUF[]中的数据还是随机值啊



^-^……
您好~~
可是我的片外RAM里原来就存好了数据,我该如何操作?

定义外部外部RAM的文件数据缓冲区unsigned char xdata DATA_BUF[ 512 *64] _at_ 0x0000会不会把我原来在片外RAM里存好的数据给丢失?
这人很懒,什么都没留下
你的意思是说只要定义了unsigned char xdata DATA_BUF[ 512 *64] _at_ 0x0000,数组DATA_BUF数组里的数据就是我原来存好的数据?
这人很懒,什么都没留下
有几个地方我想先问一下
(1).您说您片外的RAM数据已经存好了.但是我没有看到您昨天发的程序中有操作外部RAM的地方,所以我不太明白您所说的片外的RAM数据已经存好.您是怎么存数据进去的?RAM是掉电数据就丢失的.但是在您的程序中没有看到任何操作RAM的地方,所以不解;
(2).其实您的目的是最终实现扇区的操作,DATA_BUF就是外部RAM的起始地址,所以您在程序中只要再定义一个指针变量,使其指像DATA_BUF,那么以后只要操作这个指针就可以了,也就是我们程序中的buffer,所以您看在发送扇区写的命令前面就已经给出了大家的关系
buffer = DATA_BUF;
mCmdParam.Write.mSectorCount = 64;
i = ExecCommand( CMD_FileWrite, 1 );
在ExecCommand子程序中,模块会联系发送0x1E的状态码,然后程序开始处理,请求数据的写入.这个时候只要操作buffer就可以了,也就将外部数据缓冲区中的数据送给模块了.过程就是这样的.最后写完了返回0x00,成功,退出ExecCommand子程序.
(3).其实您现在做的就是只要处理好外部数据是怎么写进去的就可以了,很简单
此号封存
您好!
我的片外RAM是HK1245,掉电自动保存。不需要任何附加电路。
定义了unsigned char xdata DATA_BUF[ 512 *64] _at_ 0x0000,会不会把上次掉电保存的内容给删除掉?
这人很懒,什么都没留下
我就是想把上次写在HK1245内的数据用扇区形式读出来,跟操作外部RAM没有关系。
这下你能理解了么?
需要我打电话么?
这人很懒,什么都没留下
那你就可以直接用指针将数据读出啊,不需要再定义DATA_BUF[]数组为外部RAM的文件数据缓冲区了。
即buffer = 0x0100;就可以了。
首先你事先在片外RAM区是从地址0x0100处存放的数据,但是总共写了多少字节长度的数据?
若你想要写入的数据不是整扇区数(总长度/512),且你只要在文件中显示你实际写入的数据,这样的话你在CMD_FileWrite命令执行后,就不能再使用
mCmdParam.Close.mUpdateLen = 1;
i = ExecCommand( CMD_FileClose, 1 );来结束写文件更新文件长度,关闭文件。
而是需要使用CMD_FileModify来更新文件长度,定义其中的NewSize为你实际写入文件数据总字节长度。
^-^……
只有登录才能回复,可以选择微信账号登录