各位前輩好
小弟目前在研究usb資料存取的部分,目前是用P89C61這颗晶片來控制SL811進行usb的資料存取
現在遇到一個困難,一直無法解決,我手邊的程式已經讀取到了隨身碟裡面的一筆txt檔案的資料,而我從學長那邊得知usb1.1的BPB,FDB,FAT等的格式是一樣的,所以我對著相同的host addr進行寫入的動作,雖修改了該檔案的內容,可是內容全變成了FF,學姊的解釋是,並沒有將檔案存取進去,所以裡面的資料變成空值
以下是我用來讀取到隨身碟內txt檔的程式,現在不清楚是什麼樣的問題,因為這支程式也只能讀取到第一支存進隨身碟的txt資料,其他都讀取不到
void readsector(unsigned long sectoraddr,unsigned int ramaddr) //read sector=512 byte ,bulk=64 byte
{ // do 8 times ,bulk save to sl811hs ram 0x40~0x7f,0x80~0xbf,0xc0~0xff
unsigned int i;
re_read10:
addUFIcommand(0,2,0x80);
addUFICBWCB(0x28,sectoraddr/(0x1000000),sectoraddr%(0x1000000)/(0x10000),sectoraddr%(0x1000000)%(0x10000)/(0x100),sectoraddr%(0x1000000)%(0x10000)%(0x100),1);
UFIout(0x10,0x1f); //start cbw command Bulk-only transport page 13
UFIin(0x40,0x40); //1 bulk data save to sl811hs ram 0x40~0x7f
UFIin(0x80,0x40); //2 bulk data save to sl811hs ram 0x80~0xbf
UFIin(0xc0,0x40); //3 bulk data save to sl811hs ram 0xc0~0xff
for(i=0x40;i<=0xff;i ) //save to ram
{
rd_host(i);
wrramdata((ramaddr i)-0x40,host_data);
}
UFIin(0x40,0x40); //4 bulk data save to sl811hs ram 0x40~0x7f
UFIin(0x80,0x40); //5 bulk data save to sl811hs ram 0x80~0xbf
UFIin(0xc0,0x40); //6 bulk data save to sl811hs ram 0xc0~0xff
for(i=0x40;i<=0xff;i ) //svae ro ram
{
rd_host(i);
wrramdata((ramaddr 0x80) i,host_data);
}
UFIin(0x40,0x40); //7 bulk data save to sl811hs ram 0x40~0x7f
UFIin(0x80,0x40); //8 bulk data save to sl811hs ram 0x40~0x7f
for(i=0x40;i<0xc0;i ) //svae ro ram
{
rd_host(i);
wrramdata((ramaddr 0x140) i,host_data);
}
UFIin(0x30,0x0d); //bulk in CSW ,//Bulk-only transport page 14
rd_host(0x30 0x0c);
if(host_data==0x01)
{
getSENSE();
goto re_read10;
}
}
sectoraddr是傳0開始累加的變數進來
另一部分我需要再另外新增一筆txt檔案至隨身碟內,卻不知如何新增
do
{
readsector(i,addr);
rdramdata(addr);
i ;
}
while(ramdata!=0xeb); //0xeb is recoder of each disk start byte
這部分的程式可以讓我讀取到隨身碟內的BPB表,但是我用
rdramdata(addr 0x0f);
j=ramdata*256;
rdramdata(addr 0x0e);
fatsize=j=j ramdata;
FAT1addr=j i-1;
算出了FAT表位置,讀出來的資料卻不是我想要的資料,同樣的我也找不到FAT2和FDB表,不知道是哪邊出了問題麻煩各位前被幫我指點一下,小弟感激不盡