主題:EM9260 CAN通訊錯誤代碼含義? 共有20752人關注過本帖 |
---|
STUDENT |
1樓 |
EM9260 CAN通訊錯誤代碼含義? Post By:2011-4-6 14:46:00 [只看該作者]
在貴公司提供的CANTEST示例程序中,EM9260_CAN.cpp中有如下代碼
//CAN錯誤監測函數 DWORD CEM9260_CAN::GetErrorThreadFunc( LPVOID lparam ) { CEM9260_CAN *ceCAN = (CEM9260_CAN*)lparam; BOOL  bResult; while( 1 ) { if( WaitForSingleObject( ceCAN->m_hErrorCloseEvent, 0 )==WAIT_OBJECT_0 ) { break; } WaitForSingleObject( ceCAN->m_hErrEvent, INFINITE ); bResult = CAN_GetError( ceCAN->m_hCAN, &ceCAN->ErrorCode ); printf( "%d\r\n", ceCAN->ErrorCode ); if( bResult ) { // 調用回調函數 ceCAN->OnError( ); } } return 0; } 我在調試過程中發現該段程序輸出錯誤代碼,分別是1,2,3。請問這3個錯誤代碼有什么含義?通訊的什么錯誤會導致這三種錯誤的產生?謝謝了! |
|
單帖管理 | 引用 | 回復 |
x10 |
2樓 |
Post By:2011-4-6 21:40:00 [只看該作者]
目前定義了bit0 - bit6如下:
#define CANCONTROLLER_WARNING_LIMIT_REACHED (1<<0) // 1 #define CANCONTROLLER_ERROR_PASSIVE (1<<1) // 2 #define CANCONTROLLER_BUS_OFF (1<<2) // 4 #define CANCONTROLLER_OVERRUN (1<<3) // 8 #define CANCONTROLLER_BUS_ERROR (1<<4) // 16 #define CANCONTROLLER_ABITRATION_LOST (1<<5) // 32 #define RING_BUFFER_FULL (1<<6) // 64 |
|
單帖管理 | 引用 | 回復 |
STUDENT |
3樓 |
Post By:2011-4-12 10:24:00 [只看該作者]
謝謝!最近調試后發現,一旦用CAN發送數據,程序就接連輸出錯誤代碼1,2。那錯誤類型就應該是CANCONTROLLER_ERROR_PASSIVE和CANCONTROLLER_BUS_OFF。請問什么原因會導致這兩種錯誤?
|
|
單帖管理 | 引用 | 回復 |
zhl |
4樓 |
Post By:2011-4-12 17:26:00 [只看該作者]
這表明是SJA1000芯片發生了錯誤,并產生相應的passive 和bus-off中斷錯誤。一般來說數據發送錯誤過多,就會導致節點的總線關閉bus off。
|
|
單帖管理 | 引用 | 回復 |