幫我看看怎么回事,謝謝了

我用單片機+375讀U盤,375初始化以及u盤準備就緒后,在查詢磁盤信息是返回數(shù)據(jù)不對會是什么原因?如,F(xiàn)AN32格式的返回值是FAT16,以及返回值磁盤總扇區(qū)數(shù)1094713344,而剩余扇區(qū)數(shù)是1259339776.也就是說剩余的比總的扇區(qū)還大。文件也打不開。拜托,謝謝了[Emot]1[/Emot]

你用的是我們提供的庫還在自己寫的U盤初始化部分?


我是嚴格按照你公司的庫函數(shù)編寫的程序:會不會是配置有問題,幫我看看了。不勝感激 還有文件創(chuàng)建的返回值成功,在PC機上打開U盤跟本就搜不到文件 #include #include #include "uart.h"

#define CH375_CMD_PORT_ADDR 0XBDF1 #define CH375_DAT_PORT_ADDR 0XBCF0

#include "ch375hf6.h"

unsigned int i,j,SecCount; unsigned char xdata buf[512];

void Delayms(unsigned int mDelay) { int i; for(;mDelay>0;mDelay--) for(i=2762;i>0;i--); } void main() { Rs232_Init(); Timer1_Init(); Rs232_SendStr("串口初始化成功!") ; Rs232_SendDat(1234); // Rs232_SendInformation("串口",1234); 不能使用!! Rs232_SendNewLine(); i = CH375LibInit( ); if(i == ERR_SUCCESS) { Rs232_SendStr("375初始化成功!"); Rs232_SendStr("請插入U盤..."); Rs232_SendNewLine();

while( CH375DiskStatus < DISK_CONNECT ) { if ( CH375DiskConnect( ) == ERR_SUCCESS ) break; Delayms( 1 ); } Rs232_SendStr("CH375已經(jīng)插入!"); Rs232_SendNewLine();

//LED_OUT_ACT( ); //Delayms( 200 ); Rs232_SendStr("檢查U盤是否就緒....."); Rs232_SendNewLine(); for( i = 0; i < 5; i ++ ) { Delayms( 100 ); Rs232_SendStr( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; } Rs232_SendStr("獲取U盤容量....."); Rs232_SendNewLine();

i=CH375DiskSize( ); Rs232_SendDat(mCmdParam.DiskSize.mDiskSizeSec); Rs232_SendNewLine(); i=CH375DiskQuery(); if(i==0) { j=mCmdParam.Query.mTotalSector/2048; Rs232_SendStr("總扇區(qū)數(shù)是:"); Rs232_SendDat(mCmdParam.Query.mTotalSector); Rs232_SendNewLine(); Rs232_SendDat(j); Rs232_SendNewLine();

Rs232_SendStr("剩余扇區(qū)數(shù)為"); j=0; j=mCmdParam.Query.mFreeSector/2048; Rs232_SendDat(mCmdParam.Query.mFreeSector); Rs232_SendNewLine(); Rs232_SendDat(j); Rs232_SendNewLine();

switch(mCmdParam.Query.mDiskFat) { case 0: Rs232_SendStr("未知文件系統(tǒng)!"); break; case 1: Rs232_SendStr("FAT 12 "); break; case 2: Rs232_SendStr("FAT 16 "); break; case 3: Rs232_SendStr("FAT 32 "); break; } Rs232_SendNewLine();

Rs232_SendStr("創(chuàng)建文件"); Rs232_SendNewLine();

strcpy(mCmdParam.Create.mPathName,"\\EEEE.TXT"); i=CH375FileCreate(); if(i == ERR_SUCCESS) { Rs232_SendStr("創(chuàng)建文件成功!"); Rs232_SendNewLine(); } else Rs232_SendStr("創(chuàng)建失敗."); } else {Rs232_SendStr("磁盤信息獲取失敗.");} } else {Rs232_SendStr("初始化失??!");} while(1); }


j=mCmdParam.Query.mTotalSector/2048 兩個問題,j為int變量,最還為long 這個整除2048是什么意思? 你的移植很不嚴格。請按照我們的參考程序來移植。比如我們的參考程序中開始部分都會定義一些宏,這些宏務(wù)必在#include "ch375hf6.h"之前。這是必須的。


另外檢測到U盤連接和DiskReady之間的一些延時,請不要隨意去修改,程序中都已經(jīng)注釋了,這些延時是必要延時,另外 CH375DiskReady( )是否返回了ERR_SUCCESS?一定要確保返回 ERR_SUCCESS,而不是循環(huán)5次跳出


你好,我用貴公司的示例程序扇區(qū)模式讀寫EXAM3,你的說明文檔里說只需要1K的外部RAM,可是編譯后XDATA=1053,出現(xiàn)了溢出。是怎么回事?謝謝了...


說明文檔中所說的是指最少只需要,不表示我們的參考程序就用這么多。 EXAM3為扇區(qū)讀寫函數(shù)。占用RAM大些。


再次請教一下,我移植你公司的EXAM3示例程序如下: #include #include #include

#define LIB_CFG_DISK_IO 2 #define LIB_CFG_FILE_IO 2 #define LIB_CFG_INT_EN 0 //#define LIB_CFG_FILE_IO_DEFAULT 1

#define CH375_CMD_PORT_ADDR 0xBDF1 #define CH375_DAT_PORT_ADDR 0xBCF0

#define DISK_BASE_BUF_ADDR 0x0100 //#define FILE_DATA_BUF_ADDR 0x0200

#define FILE_DATA_BUF_LEN 0x0200

#define CH375_INT_WIRE P3^2 //#define DISK_BASE_BUF_LEN 0 #include "CH375HF6.H"

//unsigned char xdata buf[512];

sbit P1_4 = P1^4; #define LED_OUT_INIT( ) { P1_4 = 1; } /* P1.4 高電平 */ #define LED_OUT_ACT( ) { P1_4 = 0; } /* P1.4 低電平驅(qū)動LED顯示 */ #define LED_OUT_INACT( ) { P1_4 = 1; } /* P1.4 低電平驅(qū)動LED顯示 */ sbit P1_5 = P1^5;

#define LED_RUN_ACT( ) { P1_5 = 0; } /* P1.5 低電平驅(qū)動LED顯示 */ #define LED_RUN_INACT( ) { P1_5 = 1; } /* P1.5 低電平驅(qū)動LED顯示 */ sbit P1_6 = P1^6;

#define LED_WR_ACT( ) { P1_6 = 0; } /* P1.6 低電平驅(qū)動LED顯示 */ #define LED_WR_INACT( ) { P1_6 = 1; } /* P1.6 低電平驅(qū)動LED顯示 */

/* 延時100毫秒,不精確 */ void mDelay100mS( ) { UINT8 i, j, c; for ( i = 200; i != 0; i -- ) for ( j = 200; j != 0; j -- ) c+=3; }

/* 檢查操作狀態(tài),如果錯誤則顯示錯誤代碼并停機 */ void mStopIfError( UINT8 iError ) { if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( "Error: %02X\n", (UINT16)iError ); /* 顯示錯誤 */ while ( 1 ) { LED_OUT_ACT( ); /* LED閃爍 */ mDelay100mS( ); LED_OUT_INACT( ); mDelay100mS( ); } }

/* 為printf和getkey輸入輸出初始化串口 */ void mInitSTDIO( ) { SCON = 0x50; PCON = 0x80; TMOD = 0x20; TH1 = 0xf3; /* 24MHz晶振, 9600bps */ TR1 = 1; TI = 1; }

void main( ) { UINT8 i, c, SecCount; UINT32 NewSize, count; UINT8 code *pCodeStr; LED_OUT_INIT( ); LED_OUT_ACT( ); mDelay100mS( ); LED_OUT_INACT( ); mInitSTDIO( ); printf( "Start\n" );

//#if DISK_BASE_BUF_LEN == 0 // pDISK_BASE_BUF = &buf[0]; /* 不在.H文件中定義CH375的專用緩沖區(qū),而是用緩沖區(qū)指針指向其它應(yīng)用程序的緩沖區(qū)便于合用以節(jié)約RAM */ //#endif

i = CH375LibInit( ); /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ mStopIfError( i );

while ( 1 ) { printf( "Wait Udisk\n" ); while ( CH375DiskStatus != DISK_CONNECT ) { xQueryInterrupt( ); } printf( "查詢到中斷狀態(tài)\n" );

while(1); } } 程序運行結(jié)果是,375程序庫和芯片初始化成功。RST與RST#分別為低、高電平。在等待U盤插入時,U盤插入后沒有反應(yīng),也就是說倒數(shù)第二個while()循環(huán)無法跳出,但是P3.2引腳在插入U盤前后確實電平由高變低了。幫忙檢查一下,不勝感激。。。。


以及程序在執(zhí)行 /* 檢查U盤是否準備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ for ( i = 0; i < 5; i ++ ) { /* 有的U盤總是返回未準備好,不過可以被忽略 */ mDelay100mS( ); printf( "Ready ?\n" ); if ( CH375DiskReady( ) == ERR_SUCCESS ) break; /* 查詢磁盤是否準備好 */ } 在執(zhí)行CH375DiskReady( )時程序跑飛了。


#define FILE_DATA_BUF_LEN 0x0200 這個先這樣定義: #define FILE_DATA_BUF_LEN 0x000


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

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