CH375DiskReady函數(shù)返回值總是1

串口操作CH375時,保證波特率的精確性要高,串口不要用在其他方面,如printf( )函數(shù)和RS232連接等等, 把MCU的串口初試化為9位的串口 for ( i = 0; i < 5; i ++ ) /* 有的U盤總是返回未準(zhǔn)備好,不過可以被忽略 */ { mDelaymS( 100 ); ShowText(10,46,"查詢U盤準(zhǔn)備好了沒有....."); if( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準(zhǔn)備好 */ } 沒有正常通過,有可能是哪方面的原因?下面是源程序,U盤用的是FAT32格式的。

/* 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 主機(jī)文件系統(tǒng)接口 */ /* 支持: FAT12/FAT16/FAT32 */

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

/* 本例以字節(jié)為單位讀寫U盤文件,讀寫速度較扇區(qū)模式慢,但是由于字節(jié)模式讀寫文件不需要文件數(shù)據(jù)緩沖區(qū)FILE_DATA_BUF, 所以總共只需要600字節(jié)的RAM,適用于單片機(jī)硬件資源有限、數(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" /* 以下定義的詳細(xì)說明請看CH374HFF.H文件 */ #define LIB_CFG_INT_EN 0 /* CH374的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */

/* 單片機(jī)的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 /* 默認(rèn)的磁盤數(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單片機(jī)的引腳 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模塊并口讀寫時序,所以進(jìn)行初始化 */ { P2OUT = ( P2OUT | 0x07 ) & 0xF7; /* 設(shè)置A0為低電平,CS,WR,RD默認(rèn)為高電平 */ P2DIR = ( P2DIR | 0x0F ) & 0xEF; /* 設(shè)置INT#為輸入,設(shè)置CS,WR,RD,A0為輸出 */ P4DIR = 0; /* 設(shè)置8位并口輸入 */ }

void Write374Index( UINT8 mCmd ) /* 向索引端口寫入索引地址 */ { P2DIR |= 0x0F; /* 設(shè)置P1口A0,CS,WR,RD為輸出控制信號 */ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P4OUT = mCmd; /* 向CH374的并口輸出數(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( ); /* 該操作無意義,僅作延時,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ù)輸出 */ }

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

{ P4DIR = 0xFF; /* 寫操作所以數(shù)據(jù)輸出 */ P4OUT = mData; /* 向CH374的并口輸出數(shù)據(jù) */ P2OUT &= 0xF1; /* 輸出有效寫控制信號, 寫CH374芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=0; RD(P1.0)=1; */ _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ù)輸出 */ }

UINT8 Read374Data( void ) /* 從數(shù)據(jù)端口讀出數(shù)據(jù),索引地址自動加1 */ { UINT8 mData; P4DIR = 0; /* 讀操作所以數(shù)據(jù)輸入 */ P2OUT &= 0xF2; /* 輸出有效讀控制信號, 讀CH374芯片的數(shù)據(jù)端口, A0(P1.3)=0; CS(P1.2)=0; WR=(P1.1)=1; RD(P1.0)=0; */ _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)控演示程序的進(jì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),如果錯誤則顯示錯誤代碼并停機(jī) */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯誤 */ /* 遇到錯誤后,應(yīng)該分析錯誤碼以及CH374DiskStatus狀態(tài),例如調(diào)用CH374DiskConnect查詢當(dāng)前U盤是否連接,如果U盤已斷開那么就重新等待U盤插上再操作, 建議出錯后的處理步驟: 1、調(diào)用一次CH374DiskReady,成功則繼續(xù)操作,例如Open,Read/Write等,在CH374DiskReady中會自動調(diào)用CH374DiskConnect,不必另外調(diào)用 2、如果CH374DiskReady不成功,那么強(qiáng)行將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); }

void main() { WDTCTL = WDTPW + WDTHOLD; UINT8 i, c; UINT16 TotalCount; UINT8 *pCodeStr; Clock_Init(); CH374_PORT_INIT( ); LED_OUT_INIT( ); LED_OUT_ACT( ); /* 開機(jī)后LED亮一下以示工作 */ CH374DelaymS( 100 ); /* 延時100毫秒 */ LED_OUT_INACT( ); mInitSTDIO( ); /* 為了讓計算機(jī)通過串口監(jiān)控演示過程 */ printf(

用的CH375,還是CH374?有點亂啊 如果CH374的話,你先測試讀寫寄存器看能不能成功.如果不成功需要檢查時序了.必須保證讀寫函數(shù)正確才能調(diào)用庫函數(shù).


是374.第一段沾錯了。 能夠調(diào)用CH374DelaymS(),CH374DiskConnect()兩個庫函數(shù), 但是調(diào)用CH374DiskReady()后,CH374DiskStatus的值仍然是2.題目也寫錯了……不是1,是2。 U盤的指示燈已經(jīng)亮了,但是檢查U盤是否準(zhǔn)備好一步無法順利通過


你先不用去關(guān)心CH374DiskStatus的值是多少,你先去測試你的讀寫函數(shù)是否正確.然后看一下函數(shù)CH374DiskReady( )的返回值是多少.


讀寫函數(shù)也都不能正常調(diào)用。 i = CH374FileOpen( ); /* 打開文件 */ i = CH374FileCreate( ); /* 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */ i的返回值都是1 CH374DiskStatus的值依然是2


你還是沒有明白什么意思,如果CH374DiskReady函數(shù)無法通過,你做其他操作是沒有任何意義是!請按照我們所提供的思路解決問題.你的讀寫函數(shù)有沒有測試是否正確,CH374DiskReady函數(shù)的返回值和i沒有任何關(guān)系.


你所說的讀寫函數(shù)是這幾個么? void Write374Index( UINT8 mCmd ) void Write374Data( UINT8 mData ) UINT8 Read374Data( void ) 之前我理解錯你的意思了


你讀寫寄存器,讀寫CH374的主機(jī)緩沖區(qū),看是否成功,要確保你對374的操作成功才可以.


“你先去測試你的讀寫函數(shù)是否正確.然后看一下函數(shù)CH374DiskReady( )的返回值是多少” 這句話是什么意思我還是沒太明白。


“你先去測試你的讀寫函數(shù)是否正確.然后看一下函數(shù)CH374DiskReady( )的返回值是多少” 這句話是什么意思我還是沒太明白。


“你讀寫寄存器,讀寫CH374的主機(jī)緩沖區(qū),看是否成功,要確保你對374的操作成功才可以.” 是指的調(diào)用 UINT8 CH374_READ_REGISTER( UINT8 mAddr ) /* 外部定義的被CH374程序庫調(diào)用的子程序,從指定寄存器讀取數(shù)據(jù) */ { Write374Index( mAddr ); return( Read374Data( ) ); } 來讀取下面這些寄存器的值么?什么叫成功了?P4IN有返回值就算是成功了么?? #define RAM_ENDP0_SIZE 0x08 /* 端點0的緩沖區(qū)長度 */ #define RAM_ENDP0_TRAN 0x20 /* 端點0發(fā)送緩沖區(qū)的起始地址 */ #define RAM_ENDP0_RECV 0x28 /* 端點0接收緩沖區(qū)的起始地址 */ #define RAM_ENDP1_SIZE 0x08 /* 端點1的緩沖區(qū)長度 */ #define RAM_ENDP1_TRAN 0x30 /* 端點1發(fā)送緩沖區(qū)的起始地址 */ #define RAM_ENDP1_RECV 0x38 /* 端點1接收緩沖區(qū)的起始地址 */ #define RAM_ENDP2_SIZE 0x40 /* 端點2的緩沖區(qū)長度 */ #define RAM_ENDP2_TRAN 0x40 /* 端點2發(fā)送緩沖區(qū)的起始地址 */ #define RAM_ENDP2_RECV 0xC0 /* 端點2接收緩沖區(qū)的起始地址 */ #define RAM_ENDP2_EXCH 0x80 /* 端點2備用緩沖區(qū)的起始地址 */ #define RAM_HOST_TRAN 0x40 /* 主機(jī)發(fā)送緩沖區(qū)的起始地址 */ #define RAM_HOST_RECV 0xC0 /* 主機(jī)接收緩沖區(qū)的起始地址 */ #define RAM_HOST_EXCH 0x80 /* 主機(jī)備用緩沖區(qū)的起始地址 */

#define REG_SYS_INFO 0x04 /* 系統(tǒng)信息, 只讀 */ #define REG_SYS_CTRL 0x05 /* 系統(tǒng)控制,不受軟件復(fù)位影響 */ #define REG_USB_SETUP 0x06 /* USB配置 */ #define REG_INTER_EN 0x07 /* 中斷使能 */ #define REG_USB_ADDR 0x08 /* USB設(shè)備地址 */ #define REG_INTER_FLAG 0x09 /* 中斷標(biāo)志, 只讀, 位寫1清0 */ #define REG_USB_STATUS 0x0A /* USB狀態(tài), 只讀 */ #define REG_USB_LENGTH 0x0B /* USB長度, 讀為當(dāng)前USB接收長度, 設(shè)備方式下寫為USB端點2,主機(jī)方式下寫為USB主機(jī)發(fā)送長度 */ #define REG_USB_ENDP0 0x0C /* 僅USB設(shè)備方式: USB端點0控制 */ #define REG_USB_ENDP1 0x0D /* 僅USB設(shè)備方式: USB端點1控制 */ #define REG_USB_H_PID 0x0D /* 僅USB主機(jī)方式: USB主機(jī)令牌 */ #define REG_USB_ENDP2 0x0E /* 僅USB設(shè)備方式: USB端點2控制 */ #define REG_USB_H_CTRL 0x0E /* 僅USB主機(jī)方式: USB主機(jī)控制 */


這樣吧,電話技術(shù)支持可能更好點02552638370


哦,那謝謝了


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

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