線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2337
推到 Plurk!
推到 Facebook!

隨身碟SCSI指令回覆問題??

答題得分者是:GGL
a3155621
一般會員


發表:3
回覆:7
積分:7
註冊:2007-01-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-31 18:29:41 IP:218.173.xxx.xxx 訂閱
各位大大你們好!!
小弟想用CPU:CY7C68013A及三星記憶體:K9F5608U0D做一個隨身碟,而目前的進度是已經可以在我的電腦中看到一硬碟的符號了,但卻遇到當電腦發出Write(10)寫入指令後,卻等不到電腦要寫入記憶體的資料輸出,請各位大大這是什麼問題呢?

以下是我部分程式及Bus Hound 5.0抓到的相關資料:

1.解碼SCSI指令的中斷程式:

[code cpp]
void ISR_Ep2Out() interrupt 12 // 端點2-OUT中斷處理函數
{
EZUSB_IRQ_CLEAR(); // 清除USB中斷(INT2)
EPIRQ = 0x10; // 清除端點2中斷

for(i=0;i<12;i ) // 取得CBW中的SCSI指令
CBW.CBWCB[i] = EP2FIFOBUF[i 15];


if((EP2FIFOBUF[0] ==0x55) & (EP2FIFOBUF[1] ==0x53) & (EP2FIFOBUF[2] ==0x42) & (EP2FIFOBUF[3] ==0x43))
{

switch(CBW.CBWCB[0]) // SCSI指令型態判斷
{
case Inquiry :ReturnData(InquiryData,36); break;
case Read_Capacity :ReturnData(ReadCapacityData,8); break;
case Read_Format_Capacities :ReturnData(ReadFormatcapacitiesData,20); break;
case Test_Unit_Ready :SendCSW(0,0); break;
case Medium_Removal :SendCSW(0,0); break;
case Verify :SendCSW(0,0); break;
case Read10 :Read(); break;
case Mode_Sense6 :ModeSense(); break;


case Write10 :Write();
break;
}

EP2BCL = 0x80; // 重新配賦端點
}

[/code]

2. 記憶體寫入副程式Write()中部分程式:
[code cpp]
for(i=0;i<8;i ) //寫入一個磁區
{

EP2BCH = 0; // 重新配賦端點
EP2BCL = 64;

while(EP2468STAT & bmEP2EMPTY); // 判斷端點緩衝區是否已有要寫入記憶體的資料(判斷端點緩衝區是否為空)

for(j=0;j<64;j )
{
WE=0;
Data=EP6FIFOBUF[j]; // 將端點緩衝區的資料傳送給記憶體緩衝區
WE=1;
}
}

[/code]

3. 以下是我在電腦發出寫入命令時,從Bus Hound 5.0抓到的部分資料:

35 CDB 2a 00 00 00 00 00 00 00 01 00 WRITE 759.1.0
34.2 DO 55 53 42 43 50 88 db 88 00 02 00 00 00 00 0a 2a USBCP..........* 760.1.0
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ............... 760.1.16
35 CDB 00 00 00 00 00 00 TEST UNIT READY 761.1.0
35 SSTS 49 timeout 759.2.0
35 SRB 40 00 00 49 00 00 00 00 00 20 0a 12 80 02 20 00 EXEC SCSI 759.3.0
00 02 00 00 0a 00 00 00 e8 35 2d 02 28 23 0a 89 759.3.16
35 SSTS 16 request flushed 761.2.0
35 SRB 40 00 00 16 00 00 00 00 ff 20 06 12 08 01 30 10 EXEC SCSI 761.3.0
00 00 00 00 14 00 00 00 00 00 00 00 08 09 76 89 761.3.16
35 SRB 40 00 15 01 00 00 00 00 00 00 00 00 00 00 00 00 FLUSH QUEUE 762.1.0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 762.1.16
34 RSET

35 CDB 25 00 00 00 00 00 00 00 00 00 READ CAPACITY 764.1.0
35 CDB 00 00 00 00 00 00 TEST UNIT READY 765.1.0
35 CDB 2a 00 00 00 00 00 00 00 01 00 WRITE 766.1.0
34 NSTS 9c 00 00 c0 device data err 763.2.0
34 RSET 767.1.0(2)
34 NSTS 9c 00 00 c0 device data err 767.2.0
35 SSTS 08 no device 764.2.0
35 SRB 40 00 00 08 00 00 00 00 00 20 0a 12 48 01 20 00 EXEC SCSI 764.3.0
00 00 00 00 0a 00 00 00 44 f9 cf ba 98 b9 4d 89 764.3.16
35 SSTS 08 no device 765.2.0
編輯記錄
a3155621 重新編輯於 2009-08-31 18:34:20, 註解 無‧
a3155621 重新編輯於 2009-08-31 18:37:10, 註解 無‧
a3155621 重新編輯於 2009-08-31 18:40:25, 註解 無‧
a3155621 重新編輯於 2009-08-31 18:42:11, 註解 無‧
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-08 17:59:46 IP:220.128.xxx.xxx 訂閱
bit→ ↓byte76543210
0Operation code = 2Ah
1LUNDPOFUAEBPReservedRelAdr
2–5LBA
6Reserved
7–8Transfer length
9Control

From http://en.wikipedia.org/wiki/SCSI_Write_Commands#Write_.2810.29

我看你的code似乎看不到你指令在哪下的,會不會你cdb的值沒用好

例如transfer length、LBA
a3155621
一般會員


發表:3
回覆:7
積分:7
註冊:2007-01-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-08 21:37:37 IP:218.173.xxx.xxx 訂閱
謝謝大大的回答,請問大大沒設好的意思是??
以下是我完整的專案(KEIL C),請大大能幫我看看是哪出了問題~~非常感謝!!
http://www.xun6.com/file/74fb26927/USB.rar.html
GGL
資深會員


發表:104
回覆:600
積分:335
註冊:2006-11-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-26 10:17:06 IP:61.57.xxx.xxx 訂閱
我看你的Bus Hound並沒看到0x2A的指令
你應該沒下成功

還有就是...CBWSignature你好像也沒設定,
[code cpp]
void ISR_Ep2Out() interrupt 12 // 端點2-OUT中斷處理函數
{
EZUSB_IRQ_CLEAR(); // 清除USB中斷(INT2)
EPIRQ = 0x10; // 清除端點2中斷

if((EP2FIFOBUF[0] ==0x55) & (EP2FIFOBUF[1] ==0x53) & (EP2FIFOBUF[2] ==0x42) & (EP2FIFOBUF[3] ==0x43))
SCSIDecode();

EP2BCL = 0x80; // 重新配賦端點
}

[/code]
雖然你有if判斷是否為USBC,但是我怎麼找不到你的EP2FIFOBUF是什麼時候給值的(或許是我不清楚EP2FIFOBUF這個東西是啥)

你可以參考
www.zxbc.cn/html/20090507/71112.html

內容裡面有對CBW跟CSW做了解釋
你可以在測試看看,是只有Write10(0x2A)不行,還是連0x00或0x12都不行


系統時間:2024-05-07 7:39:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!