ch375初始話問題

我用的是atmega128單片機,編譯環(huán)境是avr studio。用的是CH375HFD.A庫文件。usb芯片是ch375b。

在對ch375初始化時,程序運行到函數(shù) CH375LibInit( void )停止。通過跟蹤,發(fā)現(xiàn)是運行到函數(shù)當中retrun (CH375Init( ))時,程序沒了反應。

我看資料上寫CH375HFD.A只支持ch375a芯片。但是ch375b是ch375a的升級版本,寬電壓,論壇里說支持ch375a的軟件和硬件。 我在論壇里查找這個問題的資料,有和我同樣問題的,但是都沒有給出解答。

不是的,也支持CH375B,在軟件和硬件上基本和CH375A兼容. CH375Init( ))過不了,你先做測試命令,發(fā)0X06命令,關于測試命令如何做 請看說明書. 如果無法通過,一般是硬件問題,或者時序不對.


我發(fā)了測試命令,讀到的返回值都是輸入數(shù)據(jù)的取反。那么 xWriteCH375Cmd(0x06); xWriteCH375Data(0xaa); c=xReadCH375Data(); 這三個自己改寫的函數(shù)應該沒有問題了吧,硬件也應該不會有問題吧。


硬件連接基本沒問題 把這三個函數(shù)貼出來看看 另,如果不是最新的庫,則升級庫(V3.5)


void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫命令 */ { mDelay1uS( ); mDelay1uS( ); /* 至少延時1uS */ /* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通過并口直接讀寫CH375而非普通I/O模擬 */ Usb_command(); /* 輸出A0=1 */ PORTA_OUT(); /* 并口D0-D7輸出 */ PORTA = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */ //PORTB &= 0xF9; /* 輸出有效寫控制信號, 寫CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */ Usb_clearcs(); //cs=0 Clearwrite(); //WR=0 Setread(); //RD=1 DDRA = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ //PORTB |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */ Setwrite(); //WR=1 Usb_setcs(); //CS=1 Usb_setcs(); //無效操作,用于延時 DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ Usb_data(); /* 輸出A0=0; 可選操作 */ mDelay1uS( ); mDelay1uS( ); /* 至少延時2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調用的子程序,向CH375寫數(shù)據(jù) */ { Setread(); /* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通過并口直接讀寫CH375而非普通I/O模擬 */ Usb_data(); //A0=0 PORTA = mData; /* 向CH375的并口輸出數(shù)據(jù) */ PORTA_OUT(); /* 并口D0-D7輸出 */ //PORTB &= 0xF1; /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */ Usb_clearcs(); //CS=0; Clearwrite(); //WR=0 Setread(); //RD=1 DDRA = 0xFF; /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ //PORTB |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ Usb_setcs(); Setwrite(); Setwrite(); DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */ mDelay1uS( ); /* 至少延時1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調用的子程序,從CH375讀數(shù)據(jù) */ { UINT8 mData; Setwrite(); /* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通過并口直接讀寫CH375而非普通I/O模擬 */ mDelay1uS( ); /* 至少延時1.2uS */ Usb_data(); PORTA_IN(); /* 數(shù)據(jù)輸入 */ PORTA=0XFF; //設置上拉電阻 //PORTB &= 0xF2; /* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */ Usb_clearcs(); Setwrite(); Clearread(); Clearread(); /* 該操作無意義,僅作延時,CH375要求讀寫脈沖寬度大于100nS */ mData = PINA; /* 從CH375的并口PA輸入數(shù)據(jù) */ //PORTB |= 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */ Usb_setcs(); Setread(); return( mData ); }


你首先看下你編譯的時候出現(xiàn)了多少個警告,如果警告多于20個的話,那就說明庫沒有鏈接進去,如何鏈接的話,你可以到置頂帖里面看下如何鏈接的,實際上我們的庫的初始化就做了測試命令以及初始化磁盤緩沖區(qū)。如果庫鏈接有問題的話,才會出現(xiàn)你說的死在庫里面


我想用扇區(qū)讀寫方式。因為atmega128有4k的ram。于是我就把文件緩沖區(qū)長度定義成了0x0800。出現(xiàn)了我說得問題。改成0x0200后問題解決了。只是現(xiàn)在為何文件緩沖區(qū)長度會有影響還不是很明白??梢钥匆幌挛叶x的緩沖區(qū) #define DISK_BASE_BUF_ADDR 0x0200 #define FILE_DATA_BUF_ADDR 0x0A00 #define DISK_BASE_BUF_LEN 2048 #define FILE_DATA_BUF_LEN 0x0400


總共4KB的RAM,磁盤緩沖區(qū)占了2K,若文件緩沖區(qū)再占0x800,則RAM全被占用完。那么堆??臻g放在哪呢? 當調用函數(shù)的時候程序肯定跑飛了。


多謝各位大俠的指點。已經(jīng)明白了。程序可以成功執(zhí)行了。


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

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