<觀念請教>Channel API和Frame API用法有何不同

各位前輩大家好

小弟因為計畫需要,老師幫我買了一塊NI-CAN,有附一套軟體叫做NIMAX,小弟有看裡面的Data Sheet

看來看去,這套MAX軟體好像只有跟CAN Channel API有關.

想請教各位前輩,Channel API和Frame API用法有何不同

下面這檔案,是不是屬於CAN Frame API的用法

CAN Transmit - periodic.vi

Channel API和Frame API這兩者  小弟實在是有點搞混了

希望各位大大能指點小第一番

第一次發言  若有得罪  希望各位大大多多包含

沒想到竟有人開始研究CAN了!我因為工作的需要前一陣子也買了一張NI的CAN card,價值比我現在使用IBM X31的NB還要貴,真是不便宜的小卡片。
後來和硬體的同事一起做了自已的CAN card,可以利用LV透過USB去收發CAN bus上的message,成本大約只有NI的十分之一。
而為了測試所寫的CAN card韌體,所以會用到NI的CAN card和相關的API,因此對此題目有點粗淺的研究。
言歸正傳,Channel API是比較簡單但使用起來較為受限的coding方式,在使用Channel API前,要先對您想要處理的CAN message定義出相關的資料檔,然後在程式中直接寫出與CAN message相對應的程式,利用Channel API的方式LV已幫您做了大部分的事,您只要關心相與message對應的工作即可,但缺點是您無法直接收到CAN bus上的raw data,也沒辦法處理remote frame,因為LV已經幫您處理過了。
而使用Frame API則有較大的彈性,您可以收到每一個在CAN bus上傳遞的message並加以處理,不過代價就是自已要做比較多的事。
至於在兩者之間如何選擇,端看您的需求了。若時間允可不妨都試試看。
在使用CAN API上若有問題,可以先找找隨API所附的範例程式,若還是不清楚在CAN API的文件中也有相當清楚的說明。
祝您使用順心!

[QUOTE=void]沒想到竟有人開始研究CAN了!我因為工作的需要前一陣子也買了一張NI的CAN card,價值比我現在使用IBM X31的NB還要貴,真是不便宜的小卡片。
後來和硬體的同事一起做了自已的CAN card,可以利用LV透過USB去收發CAN bus上的message,成本大約只有NI的十分之一。
而為了測試所寫的CAN card韌體,所以會用到NI的CAN card和相關的API,因此對此題目有點粗淺的研究。
言歸正傳,Channel API是比較簡單但使用起來較為受限的coding方式,在使用Channel API前,要先對您想要處理的CAN message定義出相關的資料檔,然後在程式中直接寫出與CAN message相對應的程式,利用Channel API的方式LV已幫您做了大部分的事,您只要關心相與message對應的工作即可,但缺點是您無法直接收到CAN bus上的raw data,也沒辦法處理remote frame,因為LV已經幫您處理過了。
而使用Frame API則有較大的彈性,您可以收到每一個在CAN bus上傳遞的message並加以處理,不過代價就是自已要做比較多的事。
至於在兩者之間如何選擇,端看您的需求了。若時間允可不妨都試試看。
在使用CAN API上若有問題,可以先找找隨API所附的範例程式,若還是不清楚在CAN API的文件中也有相當清楚的說明。
祝您使用順心!

[/QUOTE]

感謝Void前輩的回答    我本來以為這個問題,可能會石沉大海  太感謝了....

小弟是12月初時,被我教授叫去學CAN  用來監控我實驗室的各個系統.

目前已經完成了CAN Transceiver電路  而CAN BUS我是用兩顆120ㄛ母的電阻在bus的最末兩端.

那顆CAN Transceiver 我是用Ti的SN65HVD230Q 電源是3.3V.

小弟查了一下那塊NI-CAN板子上的CAN Transceiver是Philips Tja1044 電源是5V

這樣兩者所輸出的CAN_H和CAN_L在CAN BUS上是否要做準位的調整,還是NI-CAN那塊板子 已經都調整好了

還是說,所有的CAN Transceiver 在CAN BUS上CAN_H和CAN_L輸出的準位都一樣?

 

Void前輩在請教您一下,小弟現在是先測試CAN Transmit - periodic.vi這程式,然後把NI-CAN上的CAN_H和CAN_L接到

CAN BUS上,目前BUS上還沒接上其他設備,所以現在在BUS上NI-CAN一直重複傳送資料.(因為收不到ACK訊號)

請教一下,如果我在CAN BUS上接上DSP,要由NI-CAN傳送資料給DSP.

那我在CAN Transmit-periodic.vi 那程式的Arbitration ID是否一定要跟DSP某一個Mailbox的ID要一樣才能互傳

因為小弟目前所知,如果是DSP對DSP互傳  只要一方提出(CANTRS=1)

另一方對應的"郵箱"就會被要求傳送控制訊號(但不知這兩顆DSP同一郵箱編號的所設的 ID是否要一樣?)

小弟是這方面的新手,希望各位大大能指導小弟一下

 

目前我老闆是叫我先用DSP 2812跟NI-CAN作溝通,算是做測試  看在DSP那裡的程式是否正確

之後再測試用別的CAN控制器(SJA1000)跟8051結合,再跟NI-CAN溝通.

 

void前輩  真的是太感謝你了  好像真的很少人在作CAN,往後不知可否請教您一些CAN的問題

感恩

 

 

 

1、CAN BUS上CAN_H和CAN_L位準的規範請參考http://www.can-cia.org/can/physical-layer若CAN Transceiver的IC是依照標準做的話,那麼應該是彼此通用。
2、至於Arbitration ID的問題就要看您DSP的firmware要如何寫了,我使用的CAN  microcontroler可以有選項去接收所有CAN bus上的message,也可以只收特定ID的message。當您的DSP要指定收特定ID的message時,那麼LV上的程式就要發出相同的ID,這樣在DSP端才會收的到。

[QUOTE=void]1、CAN BUS上CAN_H和CAN_L位準的規範請參考http://www.can-cia.org/can/physical-layer若CAN Transceiver的IC是依照標準做的話,那麼應該是彼此通用。
2、至於Arbitration ID的問題就要看您DSP的firmware要如何寫了,我使用的CAN  microcontroler可以有選項去接收所有CAN bus上的message,也可以只收特定ID的message。當您的DSP要指定收特定ID的message時,那麼LV上的程式就要發出相同的ID,這樣在DSP端才會收的到。 [/QUOTE]

感謝Void前輩所提供的網頁資料,小弟昨天埋頭狂K,受益良多

小弟再請教您一些問題,您給的這網頁的資料裡面的Nominal bit time裡面有一個Sample point小弟不是很了解他的功用

有查了一下,Sample point這個點定義Nominal bit time所傳輸位元的值,和補償edge Phase的誤差

那Sample point這個值要如何求呢?

小弟現今用的DSP 2812所提供的CAN範例  在程式的最後有寫了幾個值

DSP2812 ECAN.txt

PS:裡面的TSEG1=Propagation delay segment+Phase buffer segment1

             TSEG2=Phase buffer segment2

/* Bit configuration parameters for 150 MHz SYSCLKOUT*/
/***************************************************/
/*

The table below shows how BRP field must be changed to achieve different bit
rates with a BT of 15, for a 80% SP:
---------------------------------------------------
BT = 15, TSEG1 = 10, TSEG2 = 2, Sampling Point = 80%
---------------------------------------------------
1   Mbps : BRP+1 = 10  : CAN clock = 15 MHz
500 kbps : BRP+1 = 20  : CAN clock = 7.5 MHz
250 kbps : BRP+1 = 40  : CAN clock = 3.75 MHz
125 kbps : BRP+1 = 80  : CAN clock = 1.875 MHz
100 kbps : BRP+1 = 100  : CAN clock = 1.5 MHz
50  kbps : BRP+1 = 200  : CAN clock = 0.75 MHz

例:用1 Mbps   Sampling Point = 80%

 
    ECanaRegs.CANBTC.bit.BRP = 9;
    ECanaRegs.CANBTC.bit.TSEG2 = 2;
    ECanaRegs.CANBTC.bit.TSEG1 = 10; 

    Sample point不是可以用來補償edge Phase的誤差,如果今天edge Phase的誤差產生在別的地方

    那Sample point的值是不是就要跟著改變?

    還是說如果程式裡  就已經給定以上的值  那是否代表   Sampling Point = 80%和上面BRP TSEG2 TSEG1所設定的

    值所產生的edge Phase的誤差就可以完全消除?

The table below shows how to achieve different sampling points with a BT of 25:
-------------------------------------------------------------
Achieving desired SP by changing TSEG1 & TSEG2 with BT = 25 
-------------------------------------------------------------

TSEG1 = 18, TSEG2 = 4, SP = 80%
TSEG1 = 17, TSEG2 = 5, SP = 76%
TSEG1 = 16, TSEG2 = 6, SP = 72%
TSEG1 = 15, TSEG2 = 7, SP = 68%
TSEG1 = 14, TSEG2 = 8, SP = 64%

The table below shows how BRP field must be changed to achieve different bit
rates with a BT of 25, for the sampling points shown above:

1   Mbps : BRP+1 = 6
500 kbps : BRP+1 = 12
250 kbps : BRP+1 = 24
125 kbps : BRP+1 = 48
100 kbps : BRP+1 = 60
50  kbps : BRP+1 = 120

*/

再次感謝

有關CAN protocol 的簡介可以看看下面這份outline文件,其中後面幾頁有提到check point 的意義。
http://america.renesas.com/media/products/mpumcu/canlin_mpumcu/child_folder/rej99b0021_canoutline.pdf
至於您DSP中CAN的相關設定要請您看看DSP的data sheet了,因為我沒有用過您現在用的DSP,我用的是renesas的CAN microcontroller,也就是上面連接網址的公司。

[QUOTE=void]有關CAN protocol 的簡介可以看看下面這份outline文件,其中後面幾頁有提到check point 的意義。
http://america.renesas.com/media/products/mpumcu/canlin_mpumcu/child_folder/rej99b0021_canoutline.pdf
至於您DSP中CAN的相關設定要請您看看DSP的data sheet了,因為我沒有用過您現在用的DSP,我用的是renesas的CAN microcontroller,也就是上面連接網址的公司。
[/QUOTE]

Void前輩  再一次謝謝您 

您提供的這個文件, CAN protocol 寫的真的很詳盡....感謝

Ti所提供的相關資料,內容實在是很貧乏