CH374diskready()操作返回代碼是0x05高手指點一下

不知道是什么問題。有沒有什么地方可以查到代碼代表的錯誤原因? 程序是用的CH374LIB.ZIP中的。硬件連接按照CH374DS1.PDF中并口連接。

首先測試一下你的讀寫子程序是否正確,可以通過往374的數(shù)據(jù)緩沖區(qū)中寫特殊數(shù)據(jù)(0x55,0xaa);然后在讀取出來看讀的數(shù)據(jù)和你寫入的數(shù)據(jù)是否一致.  還有當你U盤插上之后,測一下d+,d-的電壓是多少?正常d+ 3.3v,d- 0v左右 同樣可以換個U盤試試.


寫入(0x55,0xaa)讀出(0x55,0xaa)應(yīng)該沒有問題 d+3.0v,d-0v和你說的也差不多 U盤換了4個了....連移動硬盤都試過了 =、=|||| 愁死我了....剛才查了下錯誤代碼0x05代表的是USB總線掛起事件?,F(xiàn)在正看USB協(xié)議呢...硬件查了5,6遍了。軟件基本也都是例程里面給的未作修改,出了時鐘部分的

天天跟這玩意兒耗著都10多天了...一點兒進展也沒有。太菜了我..

/* 2004.06.05 **************************************** ** Copyright (C) W.ch 1999-2004 ** ** Web: http://www.winchiphead.com ** **************************************** ** USB Host File Interface for CH374 ** ** TC2.0@PC, IAR_C/EC++_2.10A@MSP430 ** **************************************** */ /* CH374 主機文件系統(tǒng)接口 */ /* 支持: FAT12/FAT16/FAT32 */

/* MSP430單片機C語言的U盤文件讀寫示例程序, 適用于具有不少于600字節(jié)RAM的單片機 */ /* 該程序?qū)盤中的/C51/CH374HFT.C文件中的前600個字符顯示出來, 如果找不到原文件CH374HFT.C, 那么該程序?qū)@示C51子目錄下所有以CH374開頭的文件名, 如果找不到C51子目錄, 那么該程序?qū)@示根目錄下的所有文件名, 最后將程序ROM中的一個字符串寫入寫入新建的文件"NEWFILE.TXT"中 */ /* CH374的INT#引腳采用查詢方式處理, 數(shù)據(jù)復(fù)制方式為"內(nèi)部復(fù)制", 本程序適用于MSP430F449單片機, 串口0輸出監(jiān)控信息,9600bps */

/* 本例以字節(jié)為單位讀寫U盤文件,讀寫速度較扇區(qū)模式慢,但是由于字節(jié)模式讀寫文件不需要文件數(shù)據(jù)緩沖區(qū)FILE_DATA_BUF, 所以總共只需要600字節(jié)的RAM,適用于單片機硬件資源有限、數(shù)據(jù)量小并且讀寫速度要求不高的系統(tǒng) */

/* ICC430 CH374HFT.C -l CH374HFT.LST -o CH374HFT.R43 */ /* XLINK CH374HFT.R43 -o CH374HFT.TXT -Fmsp430_txt ..\430\lib\cl430f.r43 CH374HFF.R43 -f ..\430\config\lnk430F449.xcl */

#include #include #include #include //#include "CH374HF6.LIB" /* 以下定義的詳細說明請看CH374HFF.H文件 */ #define LIB_CFG_INT_EN 0 /* CH374的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */

/* 單片機的RAM分配是: 0200H-03FFH為磁盤讀寫緩沖區(qū), 以字節(jié)為單位讀寫文件不需要文件數(shù)據(jù)讀寫緩沖區(qū)FILE_DATA_BUF */ #define DISK_BASE_BUF_ADDR 0x0200 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長度為SECTOR_SIZE */

#define CH374_INT_WIRE ( P1IN & 0x10 ) /* P1.4, CH374的中斷線INT#引腳,連接CH374的INT#引腳,用于查詢中斷狀態(tài) */ /* 如果未連接CH374的中斷引腳,那么應(yīng)該去掉上述定義,自動使用寄存器查詢方式 */

//#define DISK_BASE_BUF_LEN 2048 /* 默認的磁盤數(shù)據(jù)緩沖區(qū)大小為512字節(jié),建議選擇為2048甚至4096以支持某些大扇區(qū)的U盤,為0則禁止在.H文件中定義緩沖區(qū)并由應(yīng)用程序在pDISK_BASE_BUF中指定 */ /* 如果需要復(fù)用磁盤數(shù)據(jù)緩沖區(qū)以節(jié)約RAM,那么可將DISK_BASE_BUF_LEN定義為0以禁止在.H文件中定義緩沖區(qū),而由應(yīng)用程序在調(diào)用CH375Init之前將與其它程序合用的緩沖區(qū)起始地址置入pDISK_BASE_BUF變量 */

#define NO_DEFAULT_CH374_F_ENUM 1 /* 未調(diào)用CH374FileEnumer程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH374_F_QUERY 1 /* 未調(diào)用CH374FileQuery程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH374_RESET 1 /* 未調(diào)用CH374Reset程序故禁止以節(jié)約代碼 */

#pragma language=extended #include "CH374HFF.H" #pragma language=default

/* 由于MSP430不開放系統(tǒng)總線,所以用I/O引腳模擬產(chǎn)生CH374的并口讀寫時序 */ /* 本例中的硬件連接方式如下(實際應(yīng)用電路可以參照修改下述3個并口讀寫子程序) */ /* MSP430單片機的引腳 CH374芯片的引腳 P2.4 INT# P2.3 A0 P2.2 CS# P2.1 WR# P2.0 RD# P4(8位端口) D7-D0 */

void CH374_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時序,所以進行初始化 */ { P2OUT = ( P2OUT | 0x07 ) & 0xF7; /* 設(shè)置A0為低電平,CS,WR,RD默認為高電平 */ P2DIR = ( P2DIR | 0x0F ) & 0xEF; /* 設(shè)置INT#為輸入,設(shè)置CS,WR,RD,A0為輸出 */ P4DIR = 0; /* 設(shè)置8位并口輸入 */ }

void Write374Index( UINT8 mCmd ) /* 向索引端口寫入索引地址 */ { _NOP( ); _NOP( ); _NOP( ); _NOP( );_NOP( ); /* 至少延時2uS,實際由于模擬I/O較慢而只需少量延時 */ P2DIR |= 0x0F; /* 設(shè)置P1口A0,CS,WR,RD為輸出控制信號 */ P4OUT = mCmd; /* 向CH374的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P2OUT |= 0x0F; /* 指向CH374芯片的命令端口, A0(P1.3)=1; */ P2OUT &= 0xF9; /* 輸出有效寫控制信號, 寫CH374芯片的命令端口, A0(P1.3)=1; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( );_NOP( );_NOP( );_NOP( );_NOP( ); /* 該操作無意義,僅作延時,CH374要求讀寫脈沖寬度為100nS */ P2OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH374芯片, A0(P1.3)=1; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P2OUT &= 0xF7; /* 輸出A0(P1.3)=0; 可選操作 */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); _NOP( ); _NOP( ); _NOP( ); _NOP( ); /* 至少延時2uS,實際由于模擬I/O較慢而只需少量延時 */ }

void Write374Data( UINT8 mData ) /* 向數(shù)據(jù)端口寫入數(shù)據(jù),索引地址自動加1 */

{ P4OUT = mData; /* 向CH374的并口輸出數(shù)據(jù) */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P2OUT &= 0xF1; /* 輸出有效寫控制信號, 寫CH374芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _NOP( );_NOP( );_NOP( );_NOP( ); /* 該操作無意義,僅作延時,CH374要求讀寫脈沖寬度為100nS */ P2OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH374芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ P4DIR = 0; /* 禁止數(shù)據(jù)輸出 */ _NOP( ); _NOP( );_NOP( );_NOP( ); /* 至少延時1uS,實際由于模擬I/O較慢而不一定有必要 */ }

UINT8 Read374Data( void ) /* 從數(shù)據(jù)端口讀出數(shù)據(jù),索引地址自動加1 */ { UINT8 mData; P4DIR = 0; /* 讀操作所以數(shù)據(jù)輸入 */ _NOP( );_NOP( );_NOP( );_NOP( );_NOP( );_NOP( ); P2OUT &= 0xF2; /* 輸出有效讀控制信號, 讀CH374芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=1; RD(P1.0)=0; */ _NOP( ); _NOP( );_NOP( );_NOP( ); _NOP( );_NOP( );/* 該操作無意義,僅作延時,CH374要求讀寫脈沖寬度為100nS */ mData = P4IN; /* 從CH374的并口輸入數(shù)據(jù) */ P2OUT |= 0x07; /* 輸出無效的控制信號, 完成操作CH374芯片, A0(P1.3)=0; CS(P1.2)=1; WR=(P1.1)=1; RD(P1.0)=1; */ return( mData ); }

#include "PARA.C" /* 并口時序 */ /*#include "SPI.C"*/ /* SPI時序 */

/* 在P1.7連接一個LED用于監(jiān)控演示程序的進度,低電平LED亮 */ #define LED_OUT_INIT( ) { P2DIR |= 0x80; } /* P1.7 高電平為輸出方向 */ #define LED_OUT_ACT( ) { P2OUT &= 0x7F; } /* P1.7 低電平驅(qū)動LED顯示 */ #define LED_OUT_INACT( ) { P2OUT |= 0x80; } /* P1.7 低電平驅(qū)動LED顯示 */

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機 */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯誤 */ /* 遇到錯誤后,應(yīng)該分析錯誤碼以及CH374DiskStatus狀態(tài),例如調(diào)用CH374DiskConnect查詢當前U盤是否連接,如果U盤已斷開那么就重新等待U盤插上再操作, 建議出錯后的處理步驟: 1、調(diào)用一次CH374DiskReady,成功則繼續(xù)操作,例如Open,Read/Write等,在CH374DiskReady中會自動調(diào)用CH374DiskConnect,不必另外調(diào)用 2、如果CH374DiskReady不成功,那么強行將CH374DiskStatus置為DISK_CONNECT狀態(tài),然后從頭開始操作(等待U盤連接CH374DiskConnect,CH374DiskReady等) */ while ( 1 ) { LED_OUT_ACT( ); /* LED閃爍 */ CH374DelaymS( 100 ); LED_OUT_INACT( ); CH374DelaymS( 100 ); } }

/* 為printf和getkey輸入輸出初始化串口 */ void mInitSTDIO( ) { UTCTL0 = SSEL1; // UCLK = SMCLK UBR00 = 0x41; // 7.99MHz 9600bps UBR10 = 0x03; // 7.99MHz 9600bps UMCTL0 = 0x00; // no modulation UCTL0 = CHAR; // 8-bit character *SWRST* ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD P3SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD P3DIR |= 0x10; // P2.4 output direction }

/* 通過串口輸出監(jiān)控信息 */ int putchar( int c ) { while ( ( IFG1 & UTXIFG0 ) == 0 ); // USART0 TX buffer ready? TXBUF0 = c; // char to TXBUF0 return( c ); }

/* 選擇8MHz時鐘 */ void Clock_Init(void) { unsigned int i; BCSCTL1=0x00; BCSCTL2=0x88; do // wait in loop until crystal is stable { IFG1&=~OFIFG; for (i = 0xFF; i > 0; i--); // Time for flag to set }while(OFIFG&IFG1); }

vo


你在循環(huán)做CH374diskready()的時候,用示波器看一下d+,d-信號線上有沒有信號?


一直都是正弦波信號...不運行CH374diskready()的時候也是


按照正常的話,USB口的信號應(yīng)該為方波信號,的確在不運行CH374diskready()的時候有信號, #define DISK_BASE_BUF_ADDR 0x0200 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長度為SECTOR_SIZE */ 定義你去看下你編譯時候生成的MAP文件,看有沒有分配空間,你可以把這個宏不要,而直接定義 #if DISK_BASE_BUF_LEN == 0 pDISK_BASE_BUF = &my_buffer[0]; /* 不在.H文件中定義CH374的專用緩沖區(qū),而是用緩沖區(qū)指針指向其它應(yīng)用程序的緩沖區(qū)便于合用以節(jié)約RAM */ #endif 這個里面的my_buffer為512就好了


沒太看明白您的意思。這樣改對了么?我用的是IAR Embedded Workbench Evaluation 4.0編譯的。在編譯的時候沒有找到.map文件。我把#define DISK_BASE_BUF_ADDR 0x0200 這句給刪掉了。 加上了 #if DISK_BASE_BUF_LEN == 0 pDISK_BASE_BUF = &my_buffer[0]; /* 不在.H文件中定義CH374的專用緩沖區(qū),而是用緩沖區(qū)指針指向其它應(yīng)用程序的緩沖區(qū)便于合用以節(jié)約RAM */ #endif 但是還是老樣子...


好象編譯器的版本相差很大!你用3.20的編譯器實驗一下.或者把你的編譯器發(fā)給我們,幫你重新編譯一個庫文件.


恩。我發(fā)給您們編譯器吧。您們的郵箱是什么?謝謝了!


不好意思,那個編譯器有30多M大小。要不還是qq傳吧。qq是多少???謝謝了


我們的QQ是357684981


發(fā)了好友請求了……


您們沒收到好友請求么?到現(xiàn)在還沒有加我...麻煩加一下...被卡了一個禮拜了,真的很想盡快弄出來……


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频