CH376 SPI讀寫正常,但是sd卡插進(jìn)去后晶振停振。

CH376 讀到的版本號(hào)是0x43即v0x3吧, SPI讀寫正常,CHECK_EXIST命令返回正確取反數(shù)據(jù),但是sd卡插進(jìn)去后晶振停振,拔出來以后又正常了。插進(jìn)去的時(shí)候測過各電壓,沒短路,沒拉低,是正常的3.3v供電,v3已連接到vcc。附電路圖,不知怎么插入,在附件里了。此時(shí)初始化是0x03 sd卡主機(jī)模式。同事附上初始化的代碼: // CH376 init void CH376_Init (void) { u8 check_data = 0x57 ;

CH376_GPIO_Config () ; CH376_RST_LOW ; CH376_EXTI_Config () ; CH376_SPI2_Config () ; // Reset CH376_RST_HIGH ; delay_ms (1) ; CH376_RST_LOW ; delay_ms (100) ; // delay 100ms

// 檢查ch376工作是否正常 CH376_SCS_LOW ; // SCS拉低 SPI2_SendReadByte(CHECK_EXIST) ; SPI2_SendReadByte(check_data) ; check_data = SPI2_SendReadByte (0) ; CH376_SCS_HIGH ;

if (check_data== 0xA8) { // success #ifdef CH376_DEBUG printf ("CH376初始化成功.\r\n") ; #endif

// 設(shè)置USB工作模式 CH376_SCS_LOW ; SPI2_SendReadByte (SET_USB_MODE) ; SPI2_SendReadByte (0x03) ; // SD卡主機(jī)模式 delay_ms (1) ; // 等待10us(待修改)延遲等待模式設(shè)置完成 check_data = SPI2_SendReadByte (0) ; CH376_SCS_HIGH ; #ifdef CH376_DEBUG if (check_data == CMD_RET_SUCCESS) printf ("命令操作成功.\r\n") ; else if (check_data == CMD_RET_ABORT) printf ("命令操作失敗.\r\n") ; else printf ("命令返回?cái)?shù)據(jù)0x%x.\r\n", check_data) ; #endif

// 設(shè)置SDO中斷方式 CH376_SCS_LOW ; SPI2_SendReadByte (SET_SDO_INT) ; SPI2_SendReadByte (0x16) ; SPI2_SendReadByte (0x10) ; // 禁止SDO作為中斷輸出腳 CH376_SCS_HIGH ;

// printf ("等待SD卡插入.\r\n") ; while (GPIO_ReadInputDataBit (GPIOA, GPIO_Pin_8)) ; // 等待sd卡插入 printf ("檢測到SD卡插入.\r\n") ; delay_ms (1000) ; // 此信號(hào)線不穩(wěn)定。所以延時(shí)等待sd卡插入穩(wěn)定 // 掛載SD卡 CH376_SCS_LOW ; SPI2_SendReadByte (DISK_MOUNT) ; CH376_SCS_HIGH ; delay_ms (100) ; // 等待SD穩(wěn)定 printf ("等待CH376中斷.\r\n") ; while (GPIO_ReadInputDataBit (GPIOB, GPIO_Pin_0)) ; // 等待ch376中斷(sd卡插入后停在這里,拔出后才產(chǎn)生中斷(偶爾產(chǎn)生。。。)) printf ("CH376產(chǎn)生中斷,開始獲取CH376中斷數(shù)據(jù).\r\n") ; CH376_SCS_LOW ; SPI2_SendReadByte (GET_STATUS) ; check_data = SPI2_SendReadByte (0) ; CH376_SCS_HIGH ; printf ("獲取中斷數(shù)據(jù)成功,請檢查中斷內(nèi)容.\r\n") ;

if (check_data == USB_INT_SUCCESS) printf ("掛載磁盤成功。\r\n") ; else { printf ("掛載磁盤失敗。check_data = 0x%x.\r\n", check_data) ; CH376_SCS_LOW ; SPI2_SendReadByte (DISK_MOUNT) ; CH376_SCS_HIGH ; while (GPIO_ReadInputDataBit (GPIOB, GPIO_Pin_0)) ; CH376_SCS_LOW ; SPI2_SendReadByte (GET_STATUS) ; check_data = SPI2_SendReadByte (0) ; CH376_SCS_HIGH ; if (check_data == USB_INT_SUCCESS) printf ("掛載磁盤成功。\r\n") ; else printf ("掛載磁盤失敗。check_data = 0x%x.\r\n", check_data) ; } } else { // failed #ifdef CH376_DEBUG printf ("CH376初始化失敗.\r\n") ; #endif }

} sd卡插入后,程序停在:while (GPIO_ReadInputDataBit (GPIOB, GPIO_Pin_0)) ; // 等待ch376中斷(sd卡插入后停在這里,拔出后才產(chǎn)生中斷(偶爾產(chǎn)生。。。)) 注:這個(gè)是INT#的中斷線,ch376的int#直接接到ARM的外部中斷。

sd卡插進(jìn)去后測了下晶振的兩腿XO為低,XI為3v這樣。 麻煩提供下意見,謝謝。

那你直接先把SD卡插入之后看是否可以操作?還有看下電源系統(tǒng)上面使用示波器看下有沒有異常。正常情況下設(shè)備的插入不會(huì)影響芯片的工作。


直接插入先的話,CH376是初始化失敗的。示波器檢測vcc腳(用觸發(fā)模式。下降沿觸發(fā),低于3v撲捉,并沒有信號(hào)觸發(fā),這應(yīng)該說明vcc在sd卡插入時(shí)是穩(wěn)定的)。把模式設(shè)置成0x2時(shí)(測試模式設(shè)置是否正常),可以看到UD+是3v這樣子,所以模式應(yīng)該沒錯(cuò)(SD卡我設(shè)成0x3sd卡主機(jī)模式)。


直接插入CH376初始化失敗是什么意思?是測試命令都沒有通過嗎?按照道理來講插入SD卡同單片機(jī)操作CH376沒有什么直接的關(guān)系。還有SD卡的信號(hào)線接法是否有什么問題?


是的,直接插入的話,376測試命令是沒有通過的。因?yàn)檫@時(shí)候晶振也停的,拔出來就起振。SD卡的接法是這樣的: CH376 SD卡槽 SD_CS-> 1(DAT3/CS) SD_DO-> 2(DI/CMD) SD_CK-> 5(CLK) SD_DI-> 7(DAT0/DO) 可以的話,我可以把電路圖發(fā)你郵箱。


那你把原理圖發(fā)給我看下。按照你的說法只要SD卡插入的話晶振始終是停振的是不是?


好了。汗,原來是sd卡插入時(shí)晶振的xi腳和sd卡的某個(gè)腳短起來了。做板時(shí)犯了個(gè)錯(cuò)誤(晶振用兩腳的,穿過電路板好像和sd卡槽接觸的地方,墊了個(gè)紙片。就掛載磁盤成功了。板子比較小。看來晶振得換SMD的封裝。

謝謝幫助提供意見。


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

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