[問題] 關於UART通訊的兩個小問題

看板ASM (組合語言)作者時間8年前 (2016/08/10 08:36), 8年前編輯推噓5(504)
留言9則, 2人參與, 最新討論串1/1
最近開始嘗試使用USB to UART或是藍芽 to UART傳輸資料給MCU, 目前已經可以正確的 讓PC跟MCU傳輸/接收資料了,不過要完成應用還有一些部份沒什麼經驗要怎麼做,想跟 大家請教一下。 問題一: 我研究了一下arduino的serial bootloader,發現它是用接收到的第一個字元來決定接 下來做什麼事情,比方說: 第一個字元接收到'A'就依下一個接收到的字元回送不同的version資訊。 第一個字元接收到'U'就把下兩個接收到的byte當成address。 依此類推,並且回送都會以0x14開頭、以0x10結尾。 如果我要做自己的應用,像是上述這些定義我隨自己喜好定義就好嗎?還是有一定的規 範呢?比方說回送資料以0x14開頭、以0x10結尾可以依自己喜好改成其他數值之類的? 問題二: UART device在PC上會被顯示成COM 1、COM 2...COM N,編號似乎沒有一定規則,我要 怎麼知道我的device是哪個COM port呢?目前想到兩種方案: 1. 在PC UI上讓使用者自己選COM port。 arduino IDE就是採用這種方式,不過這有點不人性化,事實上我就常常忘記選或是選 錯。對一般電腦知識較淺的使用者而言要開裝置管理員找到正確的COM port也不是這麼 容易。 2. 在device裡設計一個回送自己ID的命令,然後PC端軟體執行時對所有COM port的 device送出詢問命令,只要回答的ID正確就表示它是我要通訊的device。 這方法克服方法1的缺點,可是針對所有COM port送東西這點好像有點怪怪的,如果保 護做的不夠周全,感覺有可能會有某個device把我送的東西當成給它的資料而產生奇 怪的行為? 以上兩個問題希望能有先進分享經驗,謝謝。 -- 使用MCU快10年了才第一次用上UART...XD -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.72.212.239 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1470789397.A.8F3.html ※ 編輯: icetofux (211.72.212.239), 08/10/2016 08:38:27

08/10 08:45, , 1F
第一個protocol 看你應用 自己要用自己定也行
08/10 08:45, 1F
那有一般常用的protocol可以參考嗎?比方說protocol名稱之類的,我想找資料來看。

08/10 08:46, , 2F
只是要考慮未來有人跟你要protocol來連線
08/10 08:46, 2F

08/10 08:48, , 3F
第二個 這叫virtual com port 是usb的裝置類型 要改可能
08/10 08:48, 3F

08/10 08:48, , 4F
連PC driver都要改?
08/10 08:48, 4F

08/10 08:51, , 5F
問題2-2 因為USB有product id(pid) 很難撞到
08/10 08:51, 5F
※ 編輯: icetofux (211.72.212.238), 08/10/2016 10:59:36

08/10 12:17, , 6F
我是覺的modbus之類的工控協定滿常見的 但是要架也很搞
08/10 12:17, 6F

08/10 12:17, , 7F
08/10 12:17, 7F

08/10 12:39, , 8F
如果是一般要用 你提到的就ok了 再加個checksum之類也行
08/10 12:39, 8F

08/17 20:50, , 9F
你可以去了解半導體通訊協定,對你有幫助
08/17 20:50, 9F
文章代碼(AID): #1NgdSLZp (ASM)
文章代碼(AID): #1NgdSLZp (ASM)