close

最近搞了一個案子是幫朋友解決USB Dongle ,應該算是USB Tools 的東西...


雖然這樣子的東西我也算作了不少東西了...對我來說:也只不過就是Copy & Paste ...


然後再改改一些UI 人機介面而已,您說有沒有比較特別的地方?!不知道!


對我來說一點也沒感覺。...


但後來想一想,這樣子的東西應該也是許多人常會碰到的問題吧:


譬如在USB 應用上常見到的 USB 轉RS232 或是USB 轉I2C 或SPI 等等吧!


所以我就以USB 轉RS232C (UART )大家常會碰到或想問的技術問題,我就稍微交代


一下吧!如果寫得不是很清楚的話...大家就用力的留言吐嘈吧!


---------------------


基本上,以前我都很懶得教大家搞那個USB 轉RS232C 的東西,因為呢?市面上已經有


一大堆這一種專用IC 了,我也不想斷人家的財路,所以,我也就順水推舟的請大家


自個兒想辦法了!


但我發現:有很多人用了這一種IC 之後,他們還是用那個VB 來寫PC AP 端的應用程式...


當然您不能要求每一個又搞USB (或MCU 韌體)的工程師們又要搞好PC AP 程式,


所以大家就利用簡單的VB 程式裡的COMM.H 加減寫寫程式了囉!


但是卻又常碰到資料三不五時會掉...老是搞不清楚問題出在哪?!功力好一點的或許還


可以從DEVICE端的韌體或AP 端作業系統底層追追看...但實在很辛苦,又求救無門!


其實,以前我在USB 文章內就有提過:您不要看USB 轉RS232 ,就哪兩支 RX/TX PIN嘛!


很簡單...這一種USB 轉RS232C 的IC 要搞好也不容易...


您光看以下這一家專用IC 所出的IC 編號...您就知道:人家搞了好幾個版本,還不一定搞定:



    說真的啦...出這麼多版本,又是一大堆技術文件資料...我自己也實在很懶得想看...


那您說:我自己本身在系統應用上會不會常遇到這一種東西?!Of course...


沒有的話,那就根本不是在搞研究,在系統開發上有多少實驗數據要量,有這麼多需要


調整的參數...您沒有PC 端的AP 協助?!搞屁啊?!瞎子摸象...在做什麼研究啊?


那您一定會問我說:那我怎麼處理這個問題?!那就是我這一系列文章要講的事!


------------------


首先我們先來講為什麼大家喜歡用UART ?!因為很簡單,現在MCU 幾乎都有支持,


甚至現在新一代的32 bits ARM 都還不只只有一組UART...


而且UART 在使用上很簡單:就只有TX/RX 兩條線就可以提供雙向通訊,


而且在PC AP 還有一大堆標準應用程式可以直接套用:像是超級終端機等。


大家只要笨笨的寫MCU 韌體程式就可以了。就可以透過PC 端Debug了!


但實際上,有時問題就沒那麼簡單...


-------


那我們就應該不要忘記這個RS232 為什麼會成為電腦應用上的一個重要規範?!


他原本的用意是啥?!....其實,最早的UART(RS 232) 是拿來外接數據機(Modem)


的介面...所以在RS232規範尚有很多還留著這一種產品的"餘毒"...您無法擺脫,但微軟的


作業系統就非常討厭他...那您還幹嘛跟微軟對幹呢?!更何況現在微軟也不行了。


----


當然現在已經沒有人用RS232 來連接Modem 了,但我們還是喜歡用他原本的那一套


通訊介面來玩周邊,尤其是作資料傳輸的這一件事。


那如果要提到拿Modem 精神來作電腦周邊傳輸的話,那您就不得不提到Null Modem


這個東西了!因為我們現在用UART 來作為系統傳輸介面的,都是利用Null Modem 的方法:



他最基本的就是 TX/RX (pin 2 & 3 ) 對調,就可以達到雙向通訊的功能了!


但很不幸的是:現在大家就只看到 RD/TD 這兩支pin 而已,都忘記了其實還有其他


I/O 的定義的重要性,這個就是造成您通訊系統掉資料的問題了


-------------------


以下是兩家算是這個領域都很有名的 專用IC 廠所提供標準EV Borad :


一家就是Silabs 的CP210x : 



---


另一家就是FTDI 的專用IC...



----------------


大家都應該發現:其實人家的USB 轉UART 的IC 是提供標準的Null Modem 的標準接口。


除了常用的TD/RD 兩支I/O 之外,人家還是把所有的Null Modem 會用的I/O 腳都提供了!


只是大家不喜歡這麼用...因為我們就是要省 I/O 啊...除了TD/RD 之外,我們幾乎不管


其他I/O 的定義了。但如果大家若有心的話,那您就應該去看一下其他I/O 腳在


RS232 的通訊協定上扮演什麼硬體功能定義...如果您搞不懂這些的話,


那您也不能怪人家IC 有問題或為什麼會掉資料?!


-----


那我自己呢?!我當然也不喜歡這麼用啊!搞死自己喔!因為您還要兼顧到您PC AP 端的


程式問題...因為如果您要真正的完全掌握與控制這些除了RD/TD 以外的PIN 的話...


您就得要瞭解作業系統底層的東西。


最早您要透過作業系統來控制PC 硬體周邊時,您必須利用 電腦硬體上的BIOS 來玩!


那作業系統就得要提供這一條路徑:以前控制RS232 是透過BIOS 的中斷向量:0x14H...


我想現在人家微軟的作業系統不讓您這麼搞了吧!...您就別再想那個


COM1 : 0x03F8, COM2 :0x02F8.....。不要說您看了就討厭,連微軟自己也很討厭!


那您說:您的USB 轉RS232 的IC 又要有這一種I/O 腳的控制....那怎麼辦?!


微軟才懶得理您。那就只好要賣IC 的人。自己想辦法在底層的驅動程式裡作掉了啊!


搞得讓您的AP 能看得懂這些東西,然後又要避開微軟的底層...那您就知道怎麼會有那麼


多一大堆的VCP 或其他奇奇怪怪的驅動程式,然後每一家的還不一定相容呢! 


---


您就想一想:您偏偏要用微軟的的軟體開發平台,但人家就不喜歡您還在用這些東西...


您還在Open COMM ...又要comm_puts/comm_gets...微軟為什麼還要理您?!


這樣子的搞法,不就是拿石頭一直在砸自己的腳嗎?人家微軟也不一定會可憐您...


搞不好還在背後詛咒您說:死好!(台語!)....微軟的作業系統現在已經慢慢


失勢了...他們一定更不爽:就是您們這些人搞得讓他們一直擺脫不了包袱!


所以啦...看過我這一系列文章之後,您們真的要好好想想:我還要這麼搞法嗎?!


----


我們先在這一篇前言文章先下一個簡單結論註腳:


第一:我們利用RS232 的通訊協定,硬體上用的就是早期Null Modem 的基本作法。


            而Null Modem 在硬體定義上,除了TD/RD pin以外,其實還有其他I/O的


            定義。但我們往往常忽略這些I/O 在通訊協定上的意義!


第二:除了硬體的考量之外,我們還是得必須瞭解新一代的作業系統,尤其是微軟的


           作業系統對於基本Null Modem 的控制方式的支持。如果我們沒有對些基本的


           RS232 通訊協定的充分掌握的話,那就很難擔保過渡簡化的Null Modem 的


           資料傳輸方式(就只用TD/RD) ,會不會產生資料傳輸Loss 的現象?!


-----


先暫時歇筆一下...等到下一篇文章時,我再來解說:該如何解決這樣子類似的問題,


可以讓您跟著PC AP 端的軟體開發一路順遂!


(待續)....


 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 賈老師的真老公 的頭像
    賈老師的真老公

    ChamberPlus System Level Studio

    賈老師的真老公 發表在 痞客邦 留言(5) 人氣()