查看: 5314|回復: 2
打印 上一主題 下一主題

SPI實(shí)現單總線(xiàn)硬件控制器的理論研究和實(shí)現方法(菜農)

[復制鏈接]
跳轉到指定樓層
樓主
發(fā)表于 2009-4-2 22:26:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
關(guān)鍵詞: spi , 菜農 , 單總線(xiàn) , 控制器 , 硬件
SPI實(shí)現單總線(xiàn)硬件控制器的理論研究和實(shí)現方法(菜農)

轉載本帖應注明雁塔菜地: http://blog.ednchina.com/hotpower/
本例程未經(jīng)過(guò)實(shí)戰檢驗,若應用于產(chǎn)品而出錯者,菜農不負任何責任,特此聲明.

菜農HotPower@126.com  2008.2.29(四年等一回的日子) 于雁塔菜地

常用的單總線(xiàn)有2大類(lèi): 1-Wire和HDQ16

1-Wire和HDQ16都采用單線(xiàn)數據雙向通訊,特別是有些1-Wire系列器件甚至不需電源。
單總線(xiàn)和I2C,SPI相比接線(xiàn)簡(jiǎn)單,但時(shí)序要求很?chē)栏?一般采用IO模擬定時(shí)器輔助的方法.

做主機其缺點(diǎn)還不太明顯,若作為從機設備時(shí),IO模擬一般還需外部中斷協(xié)助.
最大特點(diǎn)是CPU占有率太高.甚至根本無(wú)法實(shí)現.故雙機之間很少采用單總線(xiàn)通訊,
更別指望一主多從或多主多從通訊.

SPI實(shí)現單總線(xiàn)硬件控制器的接線(xiàn)方法很簡(jiǎn)單,為防止MOSI和單總線(xiàn)線(xiàn)與,可加二極管防止。

這樣加上拉電阻并短接MISO后即構成單總線(xiàn)1-Wire或HDQ16.

一.單總線(xiàn)時(shí)序的研究:

單總線(xiàn)一般由3大時(shí)序構成(簡(jiǎn)化):
1.總線(xiàn)復位
因為在空閑時(shí),總線(xiàn)由上拉電阻拉到高電平,這個(gè)狀態(tài)很有"物理意義"---對從機充電.
此時(shí)從機實(shí)際是在等待或休眠狀態(tài),故必須要由外部喚醒.

為保證從機的喚醒和聯(lián)接的可靠及加速單線(xiàn)通訊的速率,故需長(cháng)時(shí)間的復位(拉低電平).
使其復位周期和數據周期拉大距離以便區分。

HDQ16的總線(xiàn)復位周期由190uS的低電平和45uS的高電平組成,在高電平期間不需從機應答.
1-Wire的總線(xiàn)復位周期由480uS的低電平和480uS的高電平組成,在高電平期間可從機應答.

1-Wire與HDQ16的最大不同在于總線(xiàn)復位周期里包含從機的應答時(shí)序.

2.寫(xiě)'0'
在空閑中總線(xiàn)被下拉(同步)就表示啟動(dòng)單總線(xiàn)的數據操作過(guò)程的開(kāi)始.
由于總線(xiàn)被下拉導致通訊而阻塞(線(xiàn)與),故本時(shí)序只能作為主機操作過(guò)程.讀回數據恒為0.

3.寫(xiě)'1'
這個(gè)操作實(shí)際是寫(xiě)'1'和讀'0'及讀'1'三個(gè)時(shí)序的綜合.
因為T(mén)XD的開(kāi)漏輸出,故單總線(xiàn)實(shí)際就是51的準雙向IO. 只有在此期間方可讀取從機數據。

將寫(xiě)'0'和寫(xiě)'1'時(shí)序進(jìn)一步合并后,即可實(shí)現單總線(xiàn)讀寫(xiě)一體化操作.

二.SPI時(shí)序的研究:
SPI時(shí)序很簡(jiǎn)單,一般都支持4種模式. 主要由SS,SCK的開(kāi)始電平狀態(tài)。
這里我們只能采用模式3即SPI空閑時(shí),SS,SCK都為高電平。
由于要將SPI做單總線(xiàn)控制器,故不需要SS,SCK這2個(gè)硬件信號!!!但軟件必須設置SPI主機模式3。
這對于MCS/ARM/DSP等基本類(lèi)同。以下只以SPI模式3舉例,而且是在主機模式下。

1.協(xié)議開(kāi)始
SPI本身是以SS的跳變開(kāi)始一幀信號數據的傳輸的,數據位數一般為8位和16位。
但有的DSP的McBSP可以在128位內進(jìn)行選擇。
從以下的分析中可以看出位數和分辨率的關(guān)系的。
即SS下降沿啟動(dòng)SPI時(shí)序.

2.數據發(fā)送和接收
在SCK節拍下,SCK的下降沿一般發(fā)送數據,在上升沿接收數據。也有在同邊沿收發(fā)數據的。
這要看具體硬件配置了.

3.協(xié)議結束
在傳送數據期間,SS跳變到初始狀態(tài)后都會(huì )強行結束一幀數據的收發(fā).
即SS上升沿結束SPI時(shí)序.

三.SPI和1-Wire/Hdq16的不同點(diǎn)和共同之處
從以上分析可以看出它們的共同之處:
1.空閑狀態(tài)到工作狀態(tài)的切換都是采用拉低總線(xiàn)來(lái)喚醒從機以實(shí)現同步.(起始位S)
2.每位數據都是由一定寬度的高低電平組成.并嚴格保持一定的有效時(shí)間.(數據串D0D1..DX)
3.釋放總線(xiàn)結束表示數據的結束.(停止位P)

最大的不同在于"每幀"SPI是多位(5,6,7,8等)數據位,而單總線(xiàn)為一位數據.
當SPI數據位串為連續的0或1時(shí),就可組成一位單總線(xiàn)的數據位!!!
即該方法是用數據位數的寬度來(lái)湊夠單總線(xiàn)的時(shí)序脈寬.

四.實(shí)現方法舉例(硬件只要MOSI,MISO)
SPI和UART的不同在于它沒(méi)有起始位和停止位的高低電平的固定變化.
故控制數據位模擬高低電平更加隨意.但分辨率可能受到損失(8位SPI數據不如UART的一幀高)

以下只分析單總線(xiàn)DS18B20的實(shí)現方法,HDQ16等其他單總線(xiàn)類(lèi)同
由于單總線(xiàn)的復位/應答周期需要480+480=960uS,故每位SPI數據需要960/8=120uS即BPS=8333
由于從機的應答脈寬為60~240uS,故可能收不到應答信號,不過(guò)在UART的104uS實(shí)戰中是可以收到的.

總之SPI湊數算法簡(jiǎn)單,即單總線(xiàn)需要的周期/SPI-幀收發(fā)的位數

注意SPI一般先發(fā)送最高位.而UART一般先發(fā)送最低位.

N=8)BPS=8300 T="120".48us  (1-Wire復位/應答時(shí)序)
0x0f ->00001111 即4T個(gè)0,4T個(gè)1  波形: 低電平481.92uS,  高電平481.92uS   周期:963.84uS

N=8)BPS=133300 T="7".501us (1-Wire寫(xiě)'1'/讀'0'/讀'1'時(shí)序)
0x7f ->01111111 即1T個(gè)0,7T個(gè)1  波形: 低電平7.501uS, 高電平52.507uS 周期:60.008uS

N=8)BPS=133300 T="7".501us (1-Wire寫(xiě)'0'時(shí)序)
0x01 ->00000001 即7T個(gè)0,1T個(gè)1  波形: 低電平52.507uS, 高電平7.501uS 周期:60.008uS

五.程序實(shí)現方法(待續)

5.單總線(xiàn)的協(xié)議硬件控制器終成正果

由于采用了SPI作為單總線(xiàn)的協(xié)議硬件控制器,故在傳送期間不怕中斷,時(shí)序不會(huì )錯亂.
沙發(fā)
發(fā)表于 2010-9-26 00:17:47 | 只看該作者
板凳
發(fā)表于 2015-2-7 10:23:16 | 只看該作者
支持一下
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页