調(diào)用CH375的程序庫問題

想做一個(gè)項(xiàng)目:用89S52單片機(jī)通過CH375,將采樣數(shù)據(jù)保存在U盤里

下載了CH375LIB.zip來使用

有個(gè)問題想請(qǐng)問一下: CH375HF4.lib、 CH375HF5.lib 、CH375HF6.lib中的子程序是不是一樣?從CH375HF.pdf中沒有說明白。 我現(xiàn)在是IO總線方式,是不是應(yīng)該調(diào)用CH375HF5.lib,庫里是不是沒有CH375_RD_DAT()、CH375_WR_CMD()、CH375_WR_CMD()這幾個(gè)函數(shù),這幾個(gè)要自己編寫?函數(shù)名字是不是一定要取成示例中的xWriteCH375Cmd()、xWriteCH375Data()、xReadCH375Data()? 在調(diào)用CH375HF4.lib的示例程序中,沒有看到這幾個(gè)函數(shù)?是不是庫里已經(jīng)有了?自己只要定義端口地址(CH375_CMD_PORT CH375_DAT_PORT)就可以了?

1、LIB4、LIB6、FILELIBA是總線的,定義命令口、數(shù)據(jù)地址即可,參考例程;LIB5、LIBC是I/O模擬總線的,那么需要提供硬件接口程序,參考CH375HF.PDF中的“6.4 硬件I/O接口子程序” 2、89S52的代碼空間和RAM均不夠用,資源占用“不少于4KB 到8KB的程序空間,不少于600 字節(jié)的隨機(jī)存儲(chǔ)器RAM。對(duì)于MCS-51 單片機(jī),600 字節(jié)的RAM 包括不少于75 字節(jié)的內(nèi)部RAM 和530 字節(jié)的外部RAM”


謝謝 MCU會(huì)選擇程序空間更大的89C55,RAM的話會(huì)擴(kuò)展62256

現(xiàn)在調(diào)用CH375HF5.lib,使用過程中,有問題: 1. CH375Init()調(diào)用,返回成功(0x00) ;應(yīng)用程序等待U盤接入,進(jìn)行查詢xQueryInterrupt(),當(dāng)U盤接入后,能夠讀出DISK_CONNECT事件。此后CH375DiskReady(),返回ERR_SUCCESS。接著執(zhí)行CH375FileOpen()時(shí),總是返回ERR_BPB_ERROR(0xA1)? 這是為什么?將U盤重新格式化(FAT16和FAT32都試過),問題依舊 2. 應(yīng)用程序是否要對(duì)CH375LibConfig進(jìn)行初始化?CH375DiskStatus和CH375LibConfig全局變量什么時(shí)候可以進(jìn)行查詢?CH375Init()成功以后就可以嗎?


1、測(cè)試一下磁盤緩沖區(qū)DISK_BASE_BUF,連續(xù)寫入數(shù)據(jù),再連續(xù)讀出,比對(duì)數(shù)據(jù)是否一致 2、應(yīng)用程序不需要對(duì)CH375LibConfig進(jìn)行初始化,用戶一般情況下不需要用到這2個(gè)變量,你的目的是什么?


1,返回X0A1的話,那么你需要去檢查下你的DISK-BASE-BUF這個(gè)緩沖區(qū),你有沒有定義這個(gè)緩沖區(qū),如果沒有定義的話就會(huì)返回這個(gè)錯(cuò)誤的。 2,不需要對(duì)我們的變量進(jìn)行任何的初始化,庫的變量在庫初始化的時(shí)候已經(jīng)全部初始化過了,不需要你去初始化。


謝謝二位回答

1.問題依舊

在頭文件中,定義了: #define DISK_BASE_BUF_LEN 512 extern unsigned char DISK_BASE_BUF[DISK_BASE_BUF_LEN]

并且在我的應(yīng)用程序中,一開始增加了一段程序來測(cè)試 DISK_BASE_BUF for(i=0;i<512;i++) DISK_BASE_BUF[i] = 0x55; 再通過串口將數(shù)據(jù)發(fā)送上來,數(shù)據(jù)正確

但是操作CH375FileOpen()時(shí),還是返回0xA1 并且我在調(diào)用CH375FileOpen()之前,查詢了一下CH375DiskStatus,值為0x03,文件系統(tǒng)不支持

2.只是想看一下CH375LibConfig、CH375DiskStatus和CH375LibConfig的值,來驗(yàn)證一下我的操作是否正確。應(yīng)用程序本身并沒有需要這些變量的地方,特地問問。是不是這些變量已經(jīng)過庫函數(shù)后,就已經(jīng)有值了


庫函數(shù)會(huì)自動(dòng)的將這些變量賦值,U盤的供電為5V?不能太低,有沒有換過U盤測(cè)試一下?


for(i=0;i<512;i++) DISK_BASE_BUF = 0x55; 這個(gè)是什么意思呢? 另外i是什么類型的變量?


應(yīng)該是 DISK_BASE_BUF[i]

unsigned int i

串口中測(cè)試數(shù)組中512個(gè)數(shù)據(jù)都正確

為什么我寫了中括號(hào)i,發(fā)表回復(fù)后沒有了?


這可能是網(wǎng)頁有問題造成的.


就是將DISK_BASE_BUF中512個(gè)變量全部賦值為0x55,然后通過串口發(fā)送查看是否正確。


CH375DiskStatus,值為0x03是正確的.你在CH375FileOpen()之后查看一下CH375vDiskFat, extern UINT8D CH375vDiskFat; /* 邏輯盤的FAT標(biāo)志:1=FAT12,2=FAT16,3=FAT32 */


CH375vDiskFat = 0


庫讀取的DBR扇區(qū)數(shù)據(jù)有誤,用下面的程序直接讀取物理扇區(qū): /* CH375ReadBlock( )為直接讀取物理扇區(qū)的函數(shù),其參數(shù)借用ReadX,但參數(shù)被重定義: ReadX.mReserved[ 1 ]:為準(zhǔn)備讀取的扇區(qū)數(shù) ReadX.mReserved[ 3 ] - ReadX.mReserved[ 6 ]:為絕對(duì)扇區(qū)號(hào) ReadX.mDataBuffer:為緩沖區(qū)地址 */ printf("read form LBA: 0x00000000\n"); mCmdParam.ReadX.mReserved[ 1 ] = 0x01; /* 扇區(qū)數(shù) */ mCmdParam.ReadX.mReserved[ 3 ] = 0x00; /* 絕對(duì)扇區(qū)號(hào) */ mCmdParam.ReadX.mReserved[ 4 ] = 0x00; /* 絕對(duì)扇區(qū)號(hào) */ mCmdParam.ReadX.mReserved[ 5 ] = 0x00; /* 絕對(duì)扇區(qū)號(hào) */ mCmdParam.ReadX.mReserved[ 6 ] = 0x00; /* 絕對(duì)扇區(qū)號(hào) */ mCmdParam.ReadX.mDataBuffer = &FILE_DATA_BUF[ 0 ]; /* 緩沖區(qū) */ i = CH375ReadBlock( ); mStopIfError( i ); for( count = 0; count < CH375vSectorSize; count ++ ) { if( count % 16 == 0 ) printf("\n"); printf("%X ", (unsigned short)FILE_DATA_BUF[ count ]); } 另,網(wǎng)上下載一個(gè)軟件WinHex,它可以直接察看U盤的物理扇區(qū),對(duì)比一下二者的數(shù)據(jù)是否一致


奇怪! 如果不用 #define DISK_BASE_BUF_LEN 512 extern unsigned char DISK_BASE_BUF[DISK_BASE_BUF_LEN] 而是定義成指針形式 extern unsigned char xdata *pDISK_BASE_BUF; unsigned char xdata Disk_Buf[ 512 ]

在應(yīng)用程序中打開文件之前,pDISK_BASE_BUF = Disk_Buf; 然后就能夠成功執(zhí)行CH375FileOpen()

按照說明,這兩種方式應(yīng)該是等價(jià)的?


你是不是修改庫的頭文件?這是不允許的,DISK_BASE_BUF是定義在XDATA區(qū)的,怎么被你定義在DATA區(qū)了,請(qǐng)恢復(fù)。


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

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