CH395常見問題匯總及解答(持續(xù)更新)

@今世未央

您好,正常情況下回復(fù)03表示產(chǎn)生了發(fā)送緩沖區(qū)空和發(fā)送完成兩個(gè)中斷,表示數(shù)據(jù)發(fā)送完成以及發(fā)送緩沖區(qū)空可以再次調(diào)用發(fā)送函數(shù)發(fā)送數(shù)據(jù)。


如果返回00,可以檢查一下:

  1. 查詢socket中斷時(shí)輸入的socket id是否發(fā)生了偏差。

  2. 檢查一下此時(shí)socket狀態(tài)(手冊0x2F命令碼),如果是關(guān)閉狀態(tài),檢查一下是否觸發(fā)了軟件中的close_socket函數(shù)。

  3. 在返回00前,如果產(chǎn)生了斷開中斷和超時(shí)中斷,CH395默認(rèn)關(guān)閉socket,需要在這連個(gè)中斷中重新打開socket,如果是做TCP_server,還需要重新監(jiān)聽。

后續(xù)有其他問題可郵箱交流(lq@wch.cn)


UDP模式,單播通信,初始化完成后,while循環(huán)控制周期發(fā)送數(shù)據(jù),但正常通信一段時(shí)間后,再次發(fā)送數(shù)據(jù)前查詢發(fā)送緩沖區(qū)空中斷,一種是得到00回復(fù),另一種情況是得到41的回復(fù),41是超時(shí)中斷數(shù)據(jù)發(fā)送失敗,00是什么原因呢?這兩種情況怎么處理呢?


UDP模式,單播通信,初始化完成后,while循環(huán)控制周期發(fā)送數(shù)據(jù),但正常通信一段時(shí)間后,再次發(fā)送數(shù)據(jù)前查詢發(fā)送緩沖區(qū)空中斷,得到41的回復(fù),41是超時(shí)中斷數(shù)據(jù)發(fā)送失敗,之后重新打開socket通道,然后發(fā)送數(shù)據(jù)查詢發(fā)送緩沖區(qū)空中斷得到的回復(fù)還是41,應(yīng)該怎么處理呢


您好,

1.產(chǎn)生超時(shí)中斷后,395會(huì)默認(rèn)關(guān)閉對(duì)應(yīng)的socket,在超時(shí)中斷中重新調(diào)用open_socket函數(shù)打開socket即可。

2.中斷碼如果是在正常通信報(bào)03的同時(shí)有00產(chǎn)生,這是因?yàn)閳?bào)了空中斷,但中斷碼不會(huì)多報(bào)所以會(huì)夾雜著返回00,這是正?,F(xiàn)象,不會(huì)影響正常的通信。

3.在查詢socket中斷時(shí)可以同步再查一下此時(shí)socket的狀態(tài)是打開還是關(guān)閉,如果socket已經(jīng)是關(guān)閉狀態(tài),此時(shí)去查詢socket中斷會(huì)報(bào)00,如果socket處于打開狀態(tài)但沒有收發(fā)數(shù)據(jù),此時(shí)去查詢socket中斷也是00,如果socket處于打開狀態(tài)并且在正常通信,那么查詢到的00是上面的第二種情況。

4.如果查詢socket狀態(tài)已經(jīng)關(guān)閉了,要么就是觸發(fā)了代碼中的close_socket函數(shù),要么是之前已經(jīng)產(chǎn)生了超時(shí)導(dǎo)致socket被關(guān)閉,可以通過日志看一下具體情況。


后續(xù)問題可郵箱交流方便些(郵箱:lq@wch.cn)


收到超時(shí)中斷(收到回復(fù)41),我重新打開socket后發(fā)送數(shù)據(jù)還是超時(shí),收到超時(shí)回復(fù)直接打開通道就可以吧,不需要發(fā)送指令先關(guān)閉通道再打開通道吧?

您回復(fù)的第四條內(nèi)容,觸發(fā)了代碼中的close_socket函數(shù),是指現(xiàn)有邏輯可能會(huì)觸發(fā)395中關(guān)閉通道函數(shù)嗎?還有這個(gè)日志內(nèi)容怎么查看呢


您好,

1,在超時(shí)中斷中重新打開socket即可,不用先關(guān)閉。

2,重新打開socket后發(fā)數(shù)據(jù)還是超時(shí),可以在打開socket后查一下socket狀態(tài)確認(rèn)是否已經(jīng)成功打開,同時(shí)可以wireshark抓包看一下。

3,之前說會(huì)報(bào)00,可能是因?yàn)檎Mㄐ胚^程中socket被代碼某處的close函數(shù)給關(guān)掉了,所以可以排除一下這個(gè)原因

4,可以從上電正常通信開始一直打印socket的中斷碼和socket狀態(tài),等到出現(xiàn)異?,F(xiàn)象時(shí),通過打印推測一下問題原因。


可以把抓包和打印的信息郵箱發(fā)過來看一下(lq@wch.cn)


正常通信一段時(shí)間后,收到00回復(fù),我查詢了通道狀態(tài),回復(fù)是05 00,說明通道是正常打開的,那怎么還會(huì)收到00回復(fù)

c1470feef082e80cb292b27ab9a75fd1.jpg


所給例程中我看在while循環(huán)中,先讀取INT引腳為低電平,然后獲取全局中斷得到對(duì)應(yīng)socket中斷,最后才查詢socket中斷,得到發(fā)送緩沖區(qū)空中斷才發(fā)送數(shù)據(jù),必須按照這個(gè)流程來嗎?我是完成初始化后,在發(fā)送數(shù)據(jù)前只會(huì)查詢一下socket中斷,得到空中斷就發(fā)數(shù)據(jù),這個(gè)會(huì)影響我之前出現(xiàn)的那些問題嗎?


您好,395的事務(wù)處理機(jī)制為中斷的方式,可以通過395的中斷腳判斷是否需要執(zhí)行查詢中斷的命令,也可以采用輪詢的方式定時(shí)查詢中斷命令,您那邊收到的socket中斷狀態(tài)為0x41(超時(shí)中斷以及發(fā)送緩沖區(qū)空閑中斷)

image.png

建議通過MCU外部中斷或輪詢方式及時(shí)處理395報(bào)上來的中斷,防止出現(xiàn)某中斷沒有及時(shí)處理影響其他功能。此外數(shù)據(jù)發(fā)送失敗也會(huì)出現(xiàn)timeout超時(shí)中斷。可以通過FUN_PARA_FLAG_SOCKET_CLOSE來控制是否自動(dòng)關(guān)閉socket,如果是自動(dòng)關(guān)閉socket的模式需要注意再報(bào)timeout后需要重新創(chuàng)建socket才能繼續(xù)通信。

image.png

如有其他問題可通過郵箱溝通(zl@wch.cn)


CH395 上聯(lián)主控GD32 MCU ,但CH395INT#中斷信號(hào)線沒有鏈接MCU,獲取中斷時(shí),gpio_input_bit_get(GPIOA,?GPIO_PIN_1)?==?RESET是否可以取消,while里面直接調(diào)用中斷函數(shù)

while(1)

? ? ? ? { ? ?

? ? ? ? ? ??if(gpio_input_bit_get(GPIOA,?GPIO_PIN_1)?==?RESET)

? ? ? ? ? ? { ? ? ?

? ? ? ? ? ? ? ??CH395GlobalInterrupt();

? ? ? ? ? ? }



您好,可以采用輪詢的方式定時(shí)查詢CH395GlobalInterrupt();如果應(yīng)用比較簡單也可在while里直接直接調(diào)用CH395GlobalInterrupt();


您好,輪詢方式能給個(gè)實(shí)例代碼嘛?


您好,while中直接調(diào)用CH395GlobalInterrupt();也是輪詢方式的一種,如果想要定時(shí)查詢可參考GD32的定時(shí)器中斷例程。如有其他問題可郵件溝通(zl@wch.cn)。


您好,請問外部復(fù)位信號(hào)RSTI先輸出一個(gè)低電平,再輸出一個(gè)高電平,然后成功完成CH395初始化,但是發(fā)送第一幀數(shù)據(jù)就失敗了(查詢中斷回復(fù)41),為什么成功完成復(fù)位初始化操作,發(fā)送數(shù)據(jù)會(huì)失敗呢?(UDP模式單播通信)


udp廣播通信,上位機(jī)周期100ms發(fā)送數(shù)據(jù),大約幾個(gè)小時(shí)后,ch395q芯片死機(jī),這是什么問題了,有人遇到嗎


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

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