專案開發過程中遇到的串列埠資料解析出錯問題分析並提出解決方案
主控下發的開關波形資料下面驅動板有時候能解析正確,有時候解析不正確,而且主控下發某些資料時候就都能解析正確,下發其它資料比如0044的時候,就解析不正確。表現形式就是比如主控下發讓驅動板一致開通a上管,驅動板解析出來的資料應該是一直是高電平,但實際情況是,間隔一段時間,a上管的開關就會出現乙個低電平。
針對上述問題,第一階段實驗分析:
²對驅動板串列埠原始程式進行功能**和時序**,結果正確。 ²
驅動板程式自發自收(環迴)測試,結果正確。 ²
用示波器抓發現上面主控發下來的資料變換的時候,解析出來的資料變化正好延遲一組,波形看的很明顯。
²主控傳送特定資料的時候,解析錯誤的時候,但用示波器抓出來,發現前面的資料沒有明顯的錯誤。 ²
編寫測試軟體對驅動板接收的資料進行分析,確定接收的資料有錯誤。 ²
驅動板的接收模組重新編寫,進行收發驗證測試。 ²
繼續分析串列埠模組。 ²
主控重新編寫傳送模組,進行測試驗證。 ²
修改串列埠通訊協議,使串列埠資料由16位變8位驗證。
經過對串列埠接收模組分析和驗證,發現設計上的乙個缺陷。缺陷如下:串列埠波特率2m hz ,系統時鐘20mhz,乙個串列埠資料寬度是10個系統時鐘週期,目前出錯的程式,在接收序列資料時,是在資料的從開始位置起的第8個系統實戰取樣,如圖:
上述取樣的問題存在如下問題:如果實際波形上公升時間和下降時間超過2個系統時鐘週期,則導致硬體電路取樣到亞穩態,從而導致cpld驅動接收模組接收資料錯誤,引起資料解析錯誤。由於上面的問題在程式功能**和時序**不能確定,因為**的輸入輸出波形都是理想波形,不存在上公升時間和下降時間,所以上述**不能發現該問題。由於實際器件的上公升時間和下降時間不一致,所以在第一階段驗證時,出現主控有的埠傳送資料,驅動程式能正確的解析資料;不能正確接收和解析資料的的埠丟包數目不同。
針對發現的問題:對驅動程式進行改進,串列埠接收資料解析時,資料取樣如下圖:(在從開始位置起的第6個系統實戰取樣,即在資料的穩定期開始取樣,確保資料可靠):
²資料取樣一定要在資料的穩定期進行,否則取樣進入亞穩態,取樣結果不能預期。 ²
光模組的驅動電流越大,則資料傳遞頻寬越小,傳遞的脈衝的上公升和下降時間越大。
C 串列埠通訊 解析串列埠發來資料
首先我們得先知道串列埠發來的資料是什麼樣子的 例如 55 aa 02 04 01 02 03 04 05 0f我們看一下上面的例子 資料頭 55 aa 02 有效資料位 04有效資料位的意思是,從這個字元往後數多少位。是他的有效資料 代表數值 01 02 03 04 05 代表校驗碼 0f 首先我們...
串列埠資料解析通用方法
region 解析方法2 listening true 設定標記,說明我已經開始處理資料,一會兒要使用系統ui的。isreceive true 將資料新增到快取區 buffer.addrange receivebyte listindexlist new list 儲存包頭包尾位置 for int ...
gin解析json格式的資料出錯
好多天沒有更博了。因為前幾天家裡出了點急事,回家了幾天。奔喪去了。回到公司一堆bug亟待解決。寫的介面給測試測試,現在還沒有頁面,直接測試介面。使用 c.bindjson req 總是報錯,大致錯誤資訊如下 err invalid character in numeric literal 這是由於我...