用CMD_CHECK_EXIST命令測試硬件問題,該命令必然返回數(shù)據,如果返回數(shù)據不是0FFH,那么通常是 數(shù)據總線連接錯誤,這種問題容易處理,可以根據返回的值分析是哪個數(shù)據線有誤。 如果返回數(shù)據是0FFH,那么可能CH375不正常,例如,無時鐘、未復位、讀寫片選線有誤、工作于串 口方式等,如果復位期間CH375的TXD引腳是高電平,那么CH375工作于串口方式,當然并口操作無效 這是論團里說的,我測試過我的ch376無論復位引腳高或低,TXD引腳都是高電平啊,版主怎么處理,我用的是并口方式
你工作在并口模式,TXD應該接GND。返回0xFF那你就檢查一下晶振是否起振,25腳電平是否為低電平確保CH376正常工作。以上都正確你再檢查你的并口時序。
晶振沒問題,12M,且只在XO腳接了一個20PF電容,25腳外部復位引腳為低時也為低,復位引腳接了0.47u上拉電容,時序按照論壇了推薦的這個寫的 UINT8 xReadCH376Status( void ) /* 從CH376讀狀態(tài),僅用于并口方式 */ { UINT8 mData; CH376_DATA_DIR_IN( ); /* 設置并口方向為輸入 */ CH376_A0 = 1; CH376_CS = 0; CH376_RD = 0; /* 輸出有效讀控制信號, 讀CH376芯片的狀態(tài)端口 */ CH376_CS = 0; /* 該操作無意義,僅作延時,CH376要求讀寫脈沖寬度大于40nS,強烈建議此處執(zhí)行一條空指令延時以確保并口有足夠時間輸入數(shù)據 */ mData = CH376_DATA_DAT_IN( ); /* 從CH376的并口輸入數(shù)據 */ CH376_RD = 1; /* 輸出無效的控制信號, 完成操作CH376芯片 */ CH376_CS = 1; CH376_A0 = 0; return( mData ); } void xWriteCH376Cmd( UINT8 mCmd ) /* 向CH376寫命令 */ { CH376_DATA_DAT_OUT( mCmd ); /* 向CH376的并口輸出數(shù)據 */ CH376_DATA_DIR_OUT( ); /* 設置并口方向為輸出 */ CH376_A0 = 1; CH376_CS = 0; CH376_WR = 0; /* 輸出有效寫控制信號, 寫CH376芯片的命令端口 */ // CH376_CS = 0; /* 該操作無意義,僅作延時,CH376要求讀寫脈沖寬度大于40nS */ CH376_WR = 1; /* 輸出無效的控制信號, 完成操作CH376芯片 */ CH376_CS = 1; CH376_A0 = 0; CH376_DATA_DIR_IN( ); /* 禁止數(shù)據輸出 */ /* mDelay0_5uS( ); mDelay0_5uS( ); mDelay0_5uS( );*/ /* 延時1.5uS確保讀寫周期大于1.5uS,或者用狀態(tài)查詢代替 */ }
void xWriteCH376Data( UINT8 mData ) /* 向CH376寫數(shù)據 */ { CH376_DATA_DAT_OUT( mData ); /* 向CH376的并口輸出數(shù)據 */ CH376_DATA_DIR_OUT( ); /* 設置并口方向為輸出 */ CH376_A0 = 0; CH376_CS = 0; CH376_WR = 0; /* 輸出有效寫控制信號, 寫CH376芯片的數(shù)據端口 */ // CH376_CS = 0; /* 該操作無意義,僅作延時,CH376要求讀寫脈沖寬度大于40nS */ CH376_WR = 1; /* 輸出無效的控制信號, 完成操作CH376芯片 */ CH376_CS = 1; CH376_DATA_DIR_IN( ); /* 禁止數(shù)據輸出 */ // mDelay0_5uS( ); /* 確保讀寫周期大于0.6uS */ }
UINT8 xReadCH376Data( void ) /* 從CH376讀數(shù)據 */ { UINT8 mData; // mDelay0_5uS( ); /* 確保讀寫周期大于0.6uS */ CH376_DATA_DIR_IN( ); /* 設置并口方向為輸入 */ CH376_A0 = 0; CH376_CS = 0; CH376_RD = 0; /* 輸出有效讀控制信號, 讀CH376芯片的數(shù)據端口 */ CH376_CS = 0; /* 該操作無意義,僅作延時,CH376要求讀寫脈沖寬度大于40nS,強烈建議此處執(zhí)行一條空指令延時以確保并口有足夠時間輸入數(shù)據 */ mData = CH376_DATA_DAT_IN( ); /* 從CH376的并口輸入數(shù)據 */ CH376_RD = 1; /* 輸出無效的控制信號, 完成操作CH376芯片 */ CH376_CS = 1; return( mData ); } 按照這個思路修改你AVR的IO
我用的是STM32,也在讀寫過程中加了延時,版主如果有STM32并口例程發(fā)給我下,謝謝了,我都調了很多天
25腳外部復位引腳為低時也為低?這是什么意思,正常的話是低電平。另外,TXD用于模式選擇應該接GND。時序基本和我們提供的例程一樣,你還是檢查一下你的硬件。
您好:
我目前也是遇到相同的問題
利用CMD_CHK_EXIST (06)之后, 輸入0x65, 也是沒有讀到反向的數(shù)據, 而是讀到0xFF, 經確認當時的環(huán)境為:
(1) RSTI (pin-2)有接一個0.1uF電容到3.3V
(2) RST (pin-25)在供電之后為logic-0
(3) 12MHz crystal似乎沒有oscillate
請問公司有何建議呢?
?
B/R
首先你的晶振是必須要起振的,一般給芯片上電就可以,你檢查一下晶振部分電路,震蕩電容有沒有加合適?檢查硬件電路。
感謝您
我檢查過硬件了 晶體沒有震蕩 晶體震蕩電容有合乎標準
似乎遇到問題了
想要ch376工作,晶振就要工作。你是怎么測量晶振沒起振?用示波器測量比較好。板子晶振電容接地有沒有接好?試試在晶振XO和XI間并一個1M電阻試試。
換個晶振或ch376試試!
怎么測量晶振沒起振?用萬能表可以嗎?
我也是折騰了好久,還是0XFF。我用SPI,軟硬法都試過了。