2018年2月4日 星期日

USB DIY--自學計畫_CAN Bus Application (二)

關於 CAN Bus 這個規格,嚴格講起來,它的歷史已經超過二十年了,而這二十多年來

在我們許多電子產品或系統通訊產品,也不知道又有多少新的規範標準出現,那為何

此一CAN Bus 仍然屹立不搖,甚至還一直保有其市場優越性呢?

學習一個通訊界面,大家可以K規格,看範例程式很快地就可以看到結果了,但又有多少人

能夠體會到這樣子的通訊界面所真正代表的意義呢?又該如何在系統發展使用這些介面來

提升自己系統發展的優勢呢?之前大家之所以不得不學習 USB 那是因為現在電腦周邊除了

USB 之外,已經很少再支援其他實體通訊介面了,而所謂的 Ethernet (Wifi) 對於一般單晶片

的發展環境也不是那麼親民(以單價成本或是韌體開發環境來說)。所以USB 是一種無奈而

不得不的選擇,所以很多人幾乎是"被迫"地要去學USB。以學習目標來說:只要可以打通

能夠運用就好,至於在系統上的"為什麼?"或是此一通訊介面在系統發展上所隱含的真正

的工程意義,或許就沒有人真的想去了解或體會了。



我想對於很多系統開發工程師們來說,大部分的心態是如此,這也無可厚非,反正嘛

人家說甚麼就聽甚麼?自然也就造就了所需單晶片的周邊發展的各種形式了。以前單晶片

可以提供 UART(透過RS232 可以轉到一般串列通訊介面),單晶片中就盡量提供UART 周邊

介面,但慢慢的發現,這樣子要跟一般個人電腦或筆電連線時,還要再搞一顆UART 轉USB

的東西,很麻煩,所以啦~慢慢地現在許多單晶片就直接提供了USB 介面,這就是我上述的

情況,但單晶片裡的UART 串列介面就顯得有點尷尬了,也不知道要拿來做甚麼用了?

而至於在單晶片  CAN Bus 就屬於另一種特殊應用領域了,人家就會跟你說:喔~CAN bus

那就是搞車用系統啊,或是甚麼特殊工業界面才會用的嘛!就一副與我無關的感覺了。
-----
喔~在此就順便回答許多人常問我的一件事:你明明已經在園區做了十幾年了,幹嘛還要

回去搞機車呢?我就舉一個例子給他們聽:我十年前在搞多核心單晶片時,當初我在完成

第一顆單晶片產品之後,去大陸、日本跑一圈市場之後,我跟我老闆說:現在(當初2007年)

一顆八位元單晶片,是很難賣到US$ 0.5 的。(尤其是要鎖住一般傳統OTP 又PIC like 的市場)

但當初我老闆不相信。但十年後的今天,你知道現在一顆8 bits OTP單晶片賣多少錢嗎?

就以我當初那家公司在大陸市場的價格來說:就是人民幣 0.12。大家也可以看到換算後

的台幣單價,還是封裝後的價格。不過你也不用訝異,實際價格應該還可以談,這已經

完全是由當地廠商與市場所操控了。所以這十年間,這個市場的產品價格不會因為你產品

功能改變而提升,而且價格不到1/10,同時你應該也知道:這十年來,台灣的機車價格

卻漲了一倍了,我跟你說:以後還會繼續漲價。那我來請問你:你覺得你應該要該做

甚麼呢?
----
所以大家就應該要懂得以系統發展來說:那又何必侷限在價格越來縮小的市場裡呢?

否則你的價值也就會隨之貶值啊。好啦~我們就回到 CAN Bus 這個主題上吧。

CAN Bus 跟USB 一樣都需要硬體支援一些通訊協定,像是傳輸封包格式或ACK回覆等等。

這跟一般UART 不同,UART 的通訊還需要很多韌體去定義通訊協定,增加很多韌體的

負載。這些都會徒增系統開發者的負擔,也不利系統平台開放性的發展。這是一個非常

重要的觀念:以現在或以後系統發展來說沒有一個適度開放性系統發展平台,是很難擴大

產品在市場的發展空間的。CAN Bus 的確是以車用市場需求所發展出來的通訊規範,但你也

不得不承認人家在此一系統發展領域中的高瞻遠矚。以今日車用電子系統的蓬勃發展,更能

凸顯出其優異的系統發展優勢:



現在車子裡所配備的電子系統有沒有那麼複雜?那也就不用我多說了。

就以現在大家都在講節能減碳的新一代能源車所用的電子系統也是脫離不少這個觀念:



 那你一定要問我:那為什麼就非得要用 CAN Bus ?用 RS232 或RS485 就不行嗎?

這個就真的牽涉到系統開發平台的概念,但很可惜的是我們台灣一般電子系統廠商都喜歡

關起門來,自己搞自己的~也不太喜歡跟別人合作,也就很難有這一種系統整合平台的

觀念了。所以就很難體會到這一種介面有甚麼系統發展好處了。(USB 基本上還算是自己

玩自己的,只要你能搞定PC個人電腦或是筆電,甚至微軟的作業平台就可以了)。

所以我就藉此系列文章,利用一些簡單的實驗來說明:

基本上在第一篇文章中我已經打通了USB MCU 與CAN Bus 之間的通訊應用範例了。

那如果我自己還要再開發一套真正獨立運作的單晶片控制系統來說,那我是不是還要

再搞一套從此獨立運作的單晶片控制系統弄一個甚麼CAN 轉甚麼的才能到PC 端呢?

我是不是可以在很短的時間內,藉由之前 CAN 轉USB 系統一起整合完成此一功能呢?

因為基本上CAN Bus 的連結方式是跟USB 一樣的:


我只要把CAN bus 外面的接線跟第一套系統"絞接"在一起就可以了,但我不想搞一大堆

甚麼通訊協定的讓我兩邊韌體程式花很多心思在這一方面?(如果是RS485 肯定是要的!)

但也不想造成系統之間互相衝突與失效,讓自己 Debug 不完。(包括硬體與軟體)

所以我們就直接看答案吧:

這是第一套:用USB 單晶片去控制CAN bus IC ,來完成基本CAN 系統。



所以第二套就只要把自己CAN 系統平台架起來跑就可以了:

所以直接看答案了:





-----
----
---
我們可以發現:我幾乎不用回去修改太多第一套系統,我的第二套CAN bus 系統就可以直接

與第一套CAN bus 整合在一起了:


上圖紅色部分是新的第二套電子系統所送出的CAN Bus 資料。而橘黃色的部分是原本第一套

CAN 轉USB 系統裡的CAN Bus 的資料。這樣子一來:你自己的系統發展是否也就可以一路

延續的擴展下去了?不是很好嗎?尤其現在許多系統發展是越來越複雜,整合工作也越來

越多,哪來那麼時間去整合彼此之間系統的硬體或軟體呢?

PS:說明一下我的第二套系統,的確是 32 bits MCU 了。因為現在的電子系統要求的複雜度

真的太高了。已經不是一般傳統 8 bit MCU 可以勝任的。市場需求所迫啊。

(單元結論)

不知道這樣的簡單的示範程式與操作有沒有可以點出系統發展與過去一般我們的傳統觀念

不同之處?

的確:車用電子系統要求精確穩定。幾乎容不下一絲絲的錯誤與失誤。所以在各個子系統整

合過程中,更需要要求個子系統之間的基本穩定性。但一部車子也不太可能只有唯一的供應

廠商或是單一系統可以勝任的,所以面臨不同子系統或不同產品供應商在整體系統整合測試

驗證與正常運作過程中,如何很快的釐清與完成各項子系統擔負的責任。在系統整合平台中

就需要一個更公開穩定的通訊介面平台,就顯得格外更重要了。

CAN Bus 早在二十幾年前就是因應如此市場需求而發展,如今隨著無人車,各種先進車用

電子設備開發,它已經是扮演著一個在產業發展與產品開發中一個不可以或缺的標準介面。

或許,你還很陌生,或是只是聽過,簡單的玩過,卻很少有機會如此深入去開發使用,

往後或許你也可以從此一系列的文章中,找到完全不同的系統開發體驗。

(待續)




2 則留言:

  1. 對岸自己的 8051 based STC15F104E 都還有 1-2 RMB, 不知前輩您有什麼看法?

    回覆刪除
    回覆
    1. 這樣子說好了。

      以前台灣MCU 廠,也不一定願意去做8051 based 的,總覺得怎麼做,

      他的成本也未必能跟一般 PIC Like MCU 拚,雖然 8051 Based 在許多應用及開發環境

      是比較方便親民的。但現在不同了,這些以前不玩 8051 based 台廠MCU 廠,這幾年也

      都有推出 8051 Based 相關MCU 產品,很簡單,在 8 bits MCU 已經是成熟市場了。

      在也不太可能有創新產品,所以也只能在這既有市場裡去把產品線弄完整了囉。

      人家宏晶(STC)既然這樣子玩了,你跟不跟?沒有好的產品PM 就只好找會殺價的業務了囉。

      會殺價的業務最喜歡做的生意就是 Me too 了囉。

      很好笑的是:其實宏晶原本是幫台灣"某MCU"賣貼牌8051 ,結果賣到最後,賣得比台灣原廠

      在市場還有人氣,搞到最後乾脆自己開IC 還一樣到台灣晶圓廠。結果:人家的投片量比原本

      台灣原廠多,人家晶圓廠在商言商,哈~哈~

      這不就是我們在這個行業常看到的產業發展縮影嗎?

      所以我能有甚麼看法?不就是如此嗎?第一步先在市場幫你賣得你爽歪歪的。

      接下來就是反客為主了。

      刪除