日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 玩轉嵌入式
[導讀]一口君最近移植了一款SPI轉CAN的芯片CSM300A,在這里和大家做個分享。

一口君最近移植了一款SPI轉CAN的芯片CSM300A,在這里和大家做個分享。

一、CSM300概述

CSM300(A)系列是一款可以支持 SPI / UART 接口的CAN模塊。

1. 簡介

CSM300(A)系列隔離 SPI / UART 轉 CAN 模塊是集成微處理器、 CAN 收發(fā)器、 DC-DC 隔離電源、 信號隔離于一體的通信模塊, 該芯片可以很方便地嵌入到具有 SPI 或 UART 接口的設備中, 在不需改變原有硬件結構的前提下使設備獲得 CAN 通訊接口, 實現(xiàn) SPI 設備或 UART 設備和 CAN 總線網(wǎng)絡之間的數(shù)據(jù)通訊。

外觀

CSM300

2. 參數(shù)

  1. 實現(xiàn) SPI 或 UART 與 CAN 接口的雙向數(shù)據(jù)通信;
  2. CAN 總線符合“ISO 11898-2”標準;
  3. 集成 1 路 SPI 接口, 支持用戶自定義的速率, 最高可達 1.5Mbit/s(非自定義協(xié)議轉換) ,或 1Mbit/s(自定義協(xié)議轉換) ;
  4. 集成 1 路 UART 接口, 支持多種速率, 最高可達 921600bps;
  5. 集成 1 路 CAN 通訊接口, 支持多種波特率, 最高可達 1Mbps;
  6. 隔離耐壓 2500VDC;
  7. 工作溫度:-40℃~+85℃;
  8. 電磁輻射 EME 較低;
  9. 電磁抗干擾 EMS 較高;
型號

如上圖所示 CSM300是5V工作電壓,CSM300A是3.3V工作電壓。

如果MCU、MPU側工作電壓不是1.8V那么就需要增加一個level shift來進行電壓轉換。

此次調(diào)試的板子使用的是CSM300A,只使用其中的SPI接口。

可以在如下搜索框中搜索需要的內(nèi)容:

3. 引腳定義及參考電路

使用SPI轉CAN功能時, 需要將MODE引腳接至高電平。MCU的SPI接口與CSM300(A)的 SPI 接口連接,同時 MCU 需要提供 GPIO 與 RST、 INT、 CTL0、 CTL1 引腳連接,實現(xiàn)對 CSM300(A)的有效監(jiān)測與控制。若需要通過 MCU 對CSM300(A)進行配置,則需要額外的 GPIO 與 CFG 引腳連接。

SPI 轉 CAN 參考電路(CSM300A)

引腳說明:

引腳說明

引腳功能說明如下:

  1. MODE腳直接接高電壓(高電平對應SPI模式,低電平對應UART模式);
  2. 10、11、12外接CAN總線,主要用于CAN通信;
  3. 3、6、7、24、19引腳接MCU/MPU,配置CSM300A的模式和讀寫操作都要依靠這幾個引腳;
  4. 18、21、22、23這4個引腳需要接到MCU/MPU的SPI控制器引腳,主要是CPU側發(fā)送配置信息和讀寫數(shù)據(jù)的SPI通路;
  5. 20 是INT引腳,CSM300A收到數(shù)據(jù)后,滿足一定條件就會下拉該引腳,產(chǎn)生中斷信號,通知CPU讀取數(shù)據(jù)。

二、工作模式

1. 工作模式分類

CSM300(A)上電后, MODE、 CFG 引腳電平會決定產(chǎn)品處于 4 種不同的工作模式的其中一種:SPI 轉 CAN 模式、 UART 轉 CAN 模式、 SPI 配置模式、 UART 配置模式。

CSM300(A)工作模式

如上表所示:

  1. 如果我們要配置CSM300A,就是要設置CSM300A模式為SPI配置模式,那么就需要將MODE引腳置為1,CFG置為0,RST置為1;
  2. 如果我們要通過CSM300A讀寫數(shù)據(jù),就是要設置CSM300A模式為SPI轉CAN模式,那么就需要將MODE引腳置為1,CFG置為1,RST置為1;
  3. 讀寫數(shù)據(jù)的操作,都屬于SPI轉CAN模式,不需要切換模式。
  4. 若需要切換產(chǎn)品的工作模式,更改引腳電平后,必須對產(chǎn)品進行復位,才能使其進入設 定的工作模式。需要注意的是,為保證成功復位, 復位保持時間最少為 100us,復位后, 產(chǎn)品初始化等待時間最少 3ms,待產(chǎn)品初始化完成后,才能進行正常操作。

下圖是不同模式切換的時序圖。

工作模式切換時序

2. SPI 轉 CAN 模式(數(shù)據(jù)讀寫)

在此工作模式下, CSM300(A)始終作為 SPI 從機, SPI 限定工作在模式 3(CPOL、 CPHA 均為 1),數(shù)據(jù)長度限定為 8 位, MSB 高位先傳輸。透明轉換、透明帶標識轉換下最高通信 速率為 1.5Mbps,自定義協(xié)議轉換最高通信速率為 1Mbps。

SPI 主機可以發(fā)送數(shù)據(jù)至 CAN 總線端, 且可接收 CAN 總線端收到的數(shù)據(jù)。此時 UART 接口無效,不會處理任何出現(xiàn)在 UART 接口的數(shù)據(jù),也不會返回 CAN 總線端接收到的數(shù)據(jù) 至 UART。

  1. SPI 幀 SPI 一次片選有效至片選無效之間的數(shù)據(jù)定義為一幀數(shù)據(jù)。幀與幀之間讀寫緩沖區(qū)數(shù)據(jù)應有 40us 的時間間隔。
主機讀數(shù)據(jù)幀 主機寫數(shù)據(jù)幀

3. SPI 配置模式

在此模式下, CSM300(A)處于等待配置狀態(tài), 無法向 CAN 端發(fā)送或接收數(shù)據(jù)。此模式下僅能通過 SPI 接口進行配置。

三、主機控制

CSM300(A)有兩個 SPI 主機控制引腳 CTL0, CTL1, 受主機端控制。主機通過控制 CTL0, CTL1 引腳, 使 CSM300(A)進入不同的功能狀態(tài),實現(xiàn)對 CSM300(A)不同操作目的。主機端控制引腳電平不同對應功能如下表所示:

SPI 模式下主機控制功能

主機可以通過讀從機當前狀態(tài)來獲取產(chǎn)品當前可以讀取的字節(jié)數(shù)以及可以寫入的字節(jié) 數(shù)。主機將功能選擇為主機讀狀態(tài),然后通過 SPI 讀出 4 個字節(jié),即為狀態(tài)碼。狀態(tài)碼由 32 個位構成,具體定義如下表所示。

狀態(tài)碼

若定義 status[]數(shù)組為 8 位整型, 通過 SPI 讀狀態(tài)依次讀出的數(shù)據(jù)為 status[0]、 status[1]、 status[2]、 status[3],則其數(shù)據(jù)結構如下圖:

狀態(tài)字節(jié)數(shù)據(jù)結構

四、反饋機制(中斷)

CSM300(A)只能作為 SPI 從機,不能主動地控制其他 SPI 總線設備,所以如果接收CAN數(shù)據(jù)幀之后,必須主動返回給CPU側。

CSM300(A)硬件上的 INT 反饋引腳, 此引腳與主機連接,出現(xiàn)以下兩種情況時, INT 引腳會由高電平變成低電平,通知主機進行讀數(shù)據(jù)操作(為避免數(shù)據(jù)丟失,建議主機使用低 電平觸發(fā)方式檢測):

  1. CAN 緩沖區(qū) CAN 幀數(shù)達到設置的觸發(fā)點時 當產(chǎn)品 CAN 總線端接收緩沖區(qū)接收到的 CAN 幀數(shù)達到觸發(fā)點時, INT 引腳電平置低, 直到緩沖區(qū)清空, INT 引腳才會恢復高電平。用戶可以在獲得 INT 信號之后查詢 CSM300(A) 的狀態(tài),獲取可讀字節(jié)數(shù),然后讀取緩沖區(qū) CAN 數(shù)據(jù)。

  2. CAN 緩沖區(qū)數(shù)據(jù)少于觸發(fā)幀數(shù),且在設定時間內(nèi)主機未讀取時 CAN 緩沖區(qū)有數(shù)據(jù)但少于觸發(fā)幀數(shù)時,若總線長時間未有新增數(shù)據(jù),且主機未進行讀 取操作時, CAN 接收緩沖區(qū)的數(shù)據(jù)將有可能長期得不到處理, 這就導致數(shù)據(jù)的實時性不高。為了解決少量數(shù)據(jù)的實時性問題, CSM300(A)內(nèi)部設置了一個計時器,若 CAN 緩沖區(qū)的數(shù) 據(jù)在一定時間內(nèi)未被讀取, 將觸發(fā) INT 引腳置低,通知主機讀取數(shù)據(jù)。CSM300(A)在接收 到最后一幀數(shù)據(jù)時, 計時器啟動,主機進行讀取操作時復位計時器。

五、組網(wǎng)方式

CAN 總線一般使用直線型布線方式,總線節(jié)點數(shù)可達 110 個。布線推薦使用屏蔽雙絞線, CANH、 CANL 與雙絞線線芯連接, CGND 與屏蔽層連接,最后屏蔽層單點接地。

得益于 CSM300(A)的最低波特率 5kbps,總線的最長通信距離可達 10km。

推薦組網(wǎng)示意圖

六、移植

1. 硬件連接圖

硬件連接圖

如上圖所示:

  1. SOC上已經(jīng)集成了SPI控制器,廠家的sdk已經(jīng)包含了spi控制器的設備樹和驅(qū)動信息;
  2. SOC的SPI控制器引腳需要先連接level shift進行升壓,板子電壓是1.8V,而CSM300要求電壓是3.3V;
  3. SOC的GPIO 76/107/113/114通過level shift分別連接CSM300A的RST/CFG/CTL1/CTL0;
  4. 在PC上運行CAN-Test軟件,可以通過USB轉CAN設備從CAN總線上讀取和發(fā)送數(shù)據(jù)。

【注】USB轉CAN設備,可以自行搜索,杜絕廣告。

2. 設備樹

以下是官方提供的設備樹:

csm300@0 {
 pinctrl-names = "default";
 pinctrl-0 =<&pinctrl_csm300>;
 gpios=<&gpio3 21 0 /*ctl0*/ &gpio3 22 0 /*ctl1*/ &gpio3 30 0 /*rst*/ &gpio3 31 0 /*cfg*/ >;
 interrupt-parent = <&gpio3>;
 interrupts = <26 IRQ_LEVEL_LOW>;
 compatible = "zhiyuan,csm300";
 spi-max-frequency = <500000>;
 reg = <1>;
 status = "okay";
}; 

以下是根據(jù)自己的平臺修改的結果,讀者移植的時候需要根據(jù)自己的平臺來移植,不可教條。

csm300@0 {
 pinctrl-names = "default";
 gpios=<&gpio 114 0 /*ctl0*/ &gpio 113 0 /*ctl1*/ &gpio 76 0 /*rst*/ &gpio 107 0 /*cfg*/ >;
 interrupt-parent = <&gpio>;
 interrupts = <196 IRQ_LEVEL_LOW>;
 compatible = "zhiyuan,csm300";
 spi-max-frequency = <500000>;
 reg = <0>;
 status = "okay";
}; 

3. 驅(qū)動

官方會提供驅(qū)動程序csm300.c,具體實際原理,本篇暫不討論。

拷貝到以下目錄:

drivers/net/can/spi 

修改本級目錄下的Makefile

 obj-$(CONFIG_CAN_CSM300) += csm300.o 

修改本級目錄下的Kconfig

config CAN_CSM300
 tristate "Microchip CSM300 driver" depends on SPI 
 ---help---
   Driver for the Microchip CSM300  . 

執(zhí)行make menuconfig 驅(qū)動位置如下:

選中該驅(qū)動:

menuconfig

重新編譯內(nèi)核即可。

注意:該驅(qū)動還需要依賴CAN和SPI,一定要選上 。

4. 增加調(diào)試接口

在調(diào)試過程中,會有各種原因?qū)е耤sm300驅(qū)動無法注冊成功,那如何判定是spi控制器驅(qū)動有問題,還是csm300驅(qū)動有問題呢?

為了方便通過spi控制器發(fā)送出波形,我們增加以下代碼,用于在板子目錄/sys/bus/spi/drivers/csm300中創(chuàng)建state文件節(jié)點,通過寫入不同的值來產(chǎn)生spi數(shù)據(jù),或者控制RST、 CFG、 CTL0、 CTL1這4個引腳。

  1. 增加函數(shù)csm300_spi_store()
測試接口

重點說明一下函數(shù)**check_csm300()**是驅(qū)動自帶的用于測試CSM300的SPI通信功能的函數(shù)。

該函數(shù)會先將CSM300A設置為SPI配置模式,然后寫入9個數(shù)據(jù),然后再讀取出數(shù)據(jù),進行校驗數(shù)據(jù)是否正確。

  1. 修改probe函數(shù)
struct net_device *global_net = NULL ; csm_probe()
{
 ……
 global_net = net;
 ret = check_csm300(net);
 ……
 ret = driver_create_file(&(csm300_can_driver.driver),&driver_attr_state); if(ret < 0){
  ret = -ENOENT; goto out_free;
 }
 ……
} 
  1. 測試命令 進入csm300模塊目錄
cd /sys/bus/spi/drivers/csm300 
  1. 產(chǎn)生spi數(shù)據(jù)
echo 3 > state 
  1. 拉高RST、 CFG、 CTL0、 CTL1
echo 1 > state 
  1. 拉低RST、 CFG、 CTL0、 CTL1
echo 0 > state 

5. 正確的開機log與波形

開機后驅(qū)動會調(diào)用check_csm300()來測試spi通道,發(fā)送的數(shù)據(jù)為F7:F8:02……

正確的開機log

以下為SPI接口的CLK和MOSI引腳的波形:

開機SPI的波形

可以看到數(shù)據(jù)與我們發(fā)送的是一致的。

6. 接收數(shù)據(jù)波形圖

接收數(shù)據(jù)步驟如下:

  1. 運行于PC上的CAN Test 軟件發(fā)送數(shù)據(jù) 00 01 02 03 04 05 06 07,
  2. 經(jīng)過USB轉CAN設備后,轉換成了差分信號,
  3. 到達CSM300A之后,信號被調(diào)制成矩形方波,
  4. CSM300A通過拉低引腳INT向cpu發(fā)送中斷信號,調(diào)用CSM300A注冊的中斷函數(shù),
  5. 運行于CPU上的CSM300A中斷程序通過SPI接口讀走CSM300A上的數(shù)據(jù),
  6. CSM300A緩沖區(qū)數(shù)據(jù)被讀走后,拉高INT,
  7. 驅(qū)動程序?qū)⒔邮盏降臄?shù)據(jù)上傳給應用層,于是candump命令得到了CAN幀的數(shù)據(jù)。
接收數(shù)據(jù)流程

數(shù)據(jù)發(fā)送過程和上述過程類似。

7. CAN命令

如果文件系統(tǒng)中沒有can命令,需要自行移植。

1) 設置波特率并開啟can0口

ip link set can0 up type can bitrate 800000 

2) 發(fā)送數(shù)據(jù)

cansend can0 1F334455#1122334455667788 

3) 查看接收的數(shù)據(jù)

candump can0 

七、出錯記錄

調(diào)試過程中遇到了很多的錯誤,CSM300A定位問題步驟:

  1. 首先用示波器測試CSM300的MOSI引腳的波形,是不是和第七章第5節(jié)的波形一致,如果不一致,說明SPI控制器驅(qū)動加載不正確;
  2. 要通過SPI控制器產(chǎn)生數(shù)據(jù),使用命令echo 3 > state;
  3. 如果波形一致,就測量RST、 CFG、 CTL0、 CTL1這四個引腳,查看電平是否正確;
  4. RST、 CFG、 CTL0、 CTL1控制是否正確,可以用echo 0 > state、echo 1 > state分別拉低拉高,查看對這幾個引腳的控制是否正常。

基本上照著這個思路去調(diào)試很快就能定位到問題。

以下是驅(qū)動加載出錯的log,出錯的原因主要是調(diào)用check_csm300()函數(shù)向CSM300A寫入數(shù)據(jù)再讀取出來后數(shù)據(jù)不匹配,從而判定加載出錯。

出錯log

1. CFG引腳拉低異常

現(xiàn)象:check_csm300()函數(shù)始終報錯。

分析:check不成功,基本上原因是SPI控制器與CSM300通信出了問題。首先用示波器,查看SPI發(fā)送的數(shù)據(jù)是否正常到達CSM300(用示波器抓取SSEL、CLK、MOSI),結果是正常的。

于是檢測檢測 RST、 CFG、 CTL0、 CTL1四個引腳。如下圖所示,使用echo 0 > state 拉低CFG引腳,發(fā)現(xiàn)沒有拉到0V。

在這里插入圖片描述

解決方案:

交給硬件工程師去改。這兄弟給CFG加了一個反向電阻,驅(qū)動部分需要將所有設置CFG的代碼,全部反置。

gpio_set_value(priv->CFG,0);
修改成
gpio_set_value(priv->RST,1); 
gpio_set_value(priv->CFG,1);
修改成
gpio_set_value(priv->RST,0); 

2. RST 延時不夠

現(xiàn)象:echo 0 > state 可以拉低,測量也是正確的,但是CSM300始終無法接收到數(shù)據(jù)幀。

分析:一般數(shù)據(jù)接收不到,有兩種可能:就是CSM300給出的中斷信號CPU沒有截取到,CSM300沒有處于SPI轉CAN模式。

先用示波器確定了,USB轉CAN的數(shù)據(jù)已經(jīng)成功到達CSM300,于是檢測對應的引腳電平 RST、 CFG、 CTL0、 CTL1,發(fā)現(xiàn)也是對的。

檢查中斷計數(shù),用cat /proc/interrupts查看CSM300是否有中斷計數(shù),結果發(fā)現(xiàn)數(shù)據(jù)為0。

懷疑CSM300沒有rst成功,于是執(zhí)行echo 3 > state,查看rst是否正確設置,結果發(fā)現(xiàn)以下波形,確定了該引腳拉高比較緩慢,所以CSM300采樣不到這個電平。

在這里插入圖片描述

修改方法:驅(qū)動中每次rst操作,都要增加延遲時間:

gpio_set_value(priv->RST,0);
usleep_range(2000,2300);
gpio_set_value(priv->RST,1); 

修改后,執(zhí)行echo 3 > state,RST波形如下所示。

在這里插入圖片描述


免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉