那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式硬件通信接口協(xié)議-SPI(二)分層架構(gòu)設(shè)計(jì)模擬接口

DigCore掘芯嵌入式 ? 2019-01-03 19:43 ? 次閱讀

嵌入式軟件就是某一項(xiàng)目的源碼文件集合,源碼文件的數(shù)量,根據(jù)項(xiàng)目復(fù)雜程度的不同而有規(guī)模和層次的差別。

就拿簡單的一個(gè)芯片廠商提供的demo來說,代碼也會(huì)被細(xì)分到寄存器操作(Drv層)、板級(jí)支持包接口(Bsp層)、功能模塊驗(yàn)證(App層)等各層,但是這里的“分層”很多時(shí)候都不太明顯,因?yàn)樗鼉H僅是個(gè)demo,所謂的“分層”更多的還是人為給它做的定義。

真正意義的分層,是從代碼的編碼規(guī)范、程序的執(zhí)行邏輯來體現(xiàn)的。

關(guān)于分層設(shè)計(jì)的意義在這暫不做太多的探討,只是做個(gè)引子,來講講SPI接口的設(shè)計(jì)過程,如何設(shè)計(jì)一套擁有自己規(guī)范和方便移植的SPI接口。

SPI在分層架構(gòu)中的設(shè)計(jì)思路

剛剛提到分層設(shè)計(jì)的思路,那么SPI作為一個(gè)通信接口,如果按照分層設(shè)計(jì)的思路,如何把接口設(shè)計(jì)得更合理,更方便?

此處需要設(shè)計(jì)的SPI是介于“應(yīng)用”和“驅(qū)動(dòng)”之間的,“應(yīng)用”就是項(xiàng)目業(yè)務(wù)需求的功能模塊將數(shù)據(jù)、數(shù)據(jù)包等傳給SPI接口,而“驅(qū)動(dòng)”是SPI接口拿到數(shù)據(jù)包后,把數(shù)據(jù)轉(zhuǎn)變?yōu)镾PI的時(shí)序發(fā)送出去。

當(dāng)我們拿到一款芯片,大多數(shù)情況下官方提供的demo程序已經(jīng)給我們實(shí)現(xiàn)好了很多的驅(qū)動(dòng)(或者自己從網(wǎng)絡(luò)資源中Download),各個(gè)接口的驅(qū)動(dòng),已經(jīng)被封裝成函數(shù)或者庫供我們直接調(diào)用。

想象一下我們的項(xiàng)目工程,如果需要操作芯片硬件接口的時(shí)候,直接調(diào)用官方提供的接口函數(shù),雖然能實(shí)現(xiàn)功能,但是在需要更換芯片平臺(tái)的時(shí)候,就需要在繁雜的、與業(yè)務(wù)需求相關(guān)的應(yīng)用層里找和去修改為目標(biāo)驅(qū)動(dòng)接口。

這里就牽扯到了分層設(shè)計(jì)的優(yōu)勢所在:由于平臺(tái)的更換,驅(qū)動(dòng)接口已經(jīng)變了樣,那么對代碼的移植就會(huì)變得非常費(fèi)力,不僅是腦力活,更是體力活(即使可以批量替換,你也需要仔細(xì)核對接口,更要解決接口的差異性)。

而此時(shí)如果是分層設(shè)計(jì)的,在應(yīng)用和驅(qū)動(dòng)中間有個(gè)BSP層,應(yīng)用層調(diào)用的只是BSP層,完全不涉及驅(qū)動(dòng)、寄存器,不涉及與芯片平臺(tái)相關(guān)的接口,那么即使平臺(tái)怎么更換、驅(qū)動(dòng)怎么改變,你只需要改變BSP層的具體實(shí)現(xiàn),相對就輕松很多了。

從上一篇《嵌入式硬件通信接口協(xié)議-SPI(一)協(xié)議基礎(chǔ)》對SPI協(xié)議的介紹,設(shè)計(jì)BSP層的時(shí)候,根據(jù)SPI可配置項(xiàng)來設(shè)計(jì)接口功能。設(shè)計(jì)BSP層的SPI功能函數(shù)時(shí)考慮接口模式、數(shù)據(jù)寬度、時(shí)鐘極性與相位、時(shí)鐘速率、數(shù)據(jù)bit位大小端選擇、管腳定義。

設(shè)計(jì)BSP層時(shí),首先想到的是接口初始化和數(shù)據(jù)收發(fā)。設(shè)計(jì)初始化,把SPI可配置項(xiàng)放在函數(shù)接口,作參數(shù)傳遞;設(shè)計(jì)數(shù)據(jù)收發(fā),傳數(shù)據(jù)的同時(shí)也把SPI端口號(hào)作為參數(shù)之一,因?yàn)槲覀兌贾?a target="_blank">MCU可能會(huì)有多個(gè)SPI接口,將SPI端口號(hào)作為參數(shù)也是比較必要。

SPI接口本身就是可以實(shí)現(xiàn)1對N的串行總線,為什么在使用過程中有時(shí)要分別使用不同的SPI端口來接不同的外圍器件呢?

主要原因是SPI的可配置項(xiàng)的不一致,有些外圍器件對SPI時(shí)鐘信號(hào)SCLK的極性要求為高、低不一樣,時(shí)鐘相位不一樣,并且通信數(shù)據(jù)bit位大小端選擇的不一樣,這些接口配置項(xiàng)的差異,導(dǎo)致了有些場景下操作不同器件時(shí)需要使用不同的SPI端口。

SPI時(shí)序使用IO引腳模擬

從零開始設(shè)計(jì)自有的一套SPI板級(jí)支持包(BSP)接口,那就從初始化開始。這里設(shè)計(jì)的是模擬SPI,所以會(huì)調(diào)用GPIO設(shè)置的接口。

嵌入式硬件通信接口協(xié)議-UART(一)協(xié)議基礎(chǔ)

當(dāng)前使用的芯片平臺(tái)是STM32F103系列,雖然此時(shí)已經(jīng)完全可以調(diào)用官方的StdPeriphDrivers V3.5.0版本的標(biāo)準(zhǔn)外設(shè)庫。調(diào)用接口庫不是目的,成為“調(diào)庫俠”其實(shí)很簡單。此處重新寫的模擬實(shí)現(xiàn)方式,旨在說明在BSP層,實(shí)現(xiàn)自有系統(tǒng)的軟件架構(gòu),為系統(tǒng)集成提供底層接口。同時(shí)也是在深入學(xué)習(xí)和了解SPI接口的時(shí)序特性。

初始化函數(shù)接口里暫時(shí)做了SPI端口號(hào)、數(shù)據(jù)寬度、接口時(shí)鐘模式、數(shù)據(jù)位優(yōu)先模式這四個(gè)參數(shù),基本上這四個(gè)參數(shù)已經(jīng)可以完成對大部分應(yīng)用需求。在編碼初期先不急于填入過多的配置項(xiàng),首先按照最簡單的默認(rèn)方式編碼,保證程序邏輯可以跑通。

其中用到的管腳定義,是在完成原理圖或者完成原型機(jī)驗(yàn)證時(shí),基本就確定了管腳的使用,因此管腳的定義一般的都是放在BSP層的頭文件中。這樣更便于移植和開發(fā)。

嵌入式硬件通信接口協(xié)議-UART(一)協(xié)議基礎(chǔ)

數(shù)據(jù)發(fā)送時(shí),先寫發(fā)送一個(gè)字節(jié)的數(shù)據(jù),數(shù)據(jù)是“踩”著SPI接口時(shí)鐘信號(hào)SCLK的“節(jié)拍”逐個(gè)bit位發(fā)送出去,因此在發(fā)送數(shù)據(jù)的時(shí)候也是需要主機(jī)操作時(shí)鐘信號(hào)SCLK和數(shù)據(jù)信號(hào)MOSI:

嵌入式硬件通信接口協(xié)議-UART(一)協(xié)議基礎(chǔ)

SPI的數(shù)據(jù)發(fā)送接口dcbsp_spi_sendbyte函數(shù)實(shí)現(xiàn)了將1個(gè)字節(jié)的數(shù)據(jù)通過GPIO輸出,實(shí)現(xiàn)了SPI接口的時(shí)序,其中關(guān)鍵的是SCLK信號(hào)輸出、1字節(jié)數(shù)據(jù)的移位輸出、SCLK信號(hào)做延時(shí)輸出脈沖。

而發(fā)送多數(shù)據(jù)的接口就可以采用dcbsp_spi_sendbyte函數(shù)來逐字節(jié)發(fā)送完成。

嵌入式硬件通信接口協(xié)議-UART(一)協(xié)議基礎(chǔ)

另外接收數(shù)據(jù)的接口,同樣參考著字節(jié)發(fā)送接口的思路,數(shù)據(jù)的接收過程也是“踩”著SPI接口時(shí)鐘信號(hào)SCLK的“節(jié)拍”逐個(gè)bit位傳輸,這個(gè)過程主機(jī)繼續(xù)提供SCLK,然后讀取MISO信號(hào)的電平,再將讀到的電平逐bit緩存在一個(gè)變量里:

嵌入式硬件通信接口協(xié)議-UART(一)協(xié)議基礎(chǔ)

就這樣,利用GPIO進(jìn)行電平的輸出的讀取,實(shí)現(xiàn)了SPI接口的部分時(shí)序。這些接口的內(nèi)部實(shí)現(xiàn)過程,因人而異、因平臺(tái)變化而微調(diào),但是對外接口不動(dòng),對上層應(yīng)用來說,這就是同一個(gè)接口同一個(gè)東西,上層的應(yīng)用層程序改動(dòng)就很小了。

對于每次移植,BSP層提供了一定架構(gòu)接口,層次清晰改動(dòng)小,所以對于一個(gè)嵌入式開發(fā)者而言,寫好BSP層也很重要。

總結(jié),本文主要想分享的是設(shè)計(jì)嵌入式軟件時(shí),分出BSP層,作為應(yīng)用和驅(qū)動(dòng)的中間層,以便于在項(xiàng)目移植過程中,應(yīng)用的完美匹配。文中的代碼未完,關(guān)于驅(qū)動(dòng)類的代碼,其執(zhí)行結(jié)果必須在示波器等儀器下觀測,仍需確認(rèn)執(zhí)行的效率和時(shí)序的實(shí)現(xiàn)效果!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5093

    文章

    19178

    瀏覽量

    307717
收藏 人收藏

    評論

    相關(guān)推薦

    嵌入式硬件通信接口協(xié)議SPI講解

    嵌入式硬件通信接口協(xié)議-SPI(一)協(xié)議基礎(chǔ)
    發(fā)表于 07-19 09:03

    嵌入式硬件通信接口協(xié)議SPI解析

    嵌入式硬件通信接口協(xié)議-SPI模擬
    發(fā)表于 01-20 06:07

    嵌入式常見的通信接口/協(xié)議有哪些?

    0引言??嵌入式開發(fā)中,常見的通信接口/協(xié)議SPI,I2C,UART三種,本文先分三個(gè)部分對SPI
    發(fā)表于 10-27 09:14

    嵌入式分層架構(gòu)的相關(guān)資料分享

    最近重新進(jìn)入嵌入式領(lǐng)域,有必要對嵌入式分層架構(gòu)有一個(gè)清晰的理解。經(jīng)過多方查閱以及個(gè)人的理解,本人對嵌入式
    發(fā)表于 10-28 08:42

    為何要進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?如何設(shè)計(jì)?

    為何要進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?如何進(jìn)行嵌入式軟件架構(gòu)設(shè)計(jì)?
    發(fā)表于 11-01 06:31

    嵌入式系統(tǒng)中的架構(gòu)設(shè)計(jì)的理解

    【閱讀這篇文章,你能了解到什么】1. 從事嵌入式開發(fā)12年的我,對架構(gòu)設(shè)計(jì)的理解;2. 對嵌入式系統(tǒng)中的架構(gòu)設(shè)計(jì)要刻意訓(xùn)練;3. 嵌入式系統(tǒng)
    發(fā)表于 11-08 08:23

    嵌入式系統(tǒng)串口通信分層結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)

    介紹了以STC89C54RD+為核心具有ISP(在線可編程)特性的嵌入式系統(tǒng)中,PC 機(jī)與該系統(tǒng)串口全雙工通信的實(shí)現(xiàn)。給出了串口通信協(xié)議,提出了嵌入式系統(tǒng)中串口
    發(fā)表于 08-29 10:43 ?23次下載

    常用的硬件接口通信協(xié)議詳解

    常見硬件接口協(xié)議 嵌入式相關(guān) 講的比較細(xì)致~~~
    發(fā)表于 06-08 17:29 ?78次下載

    嵌入式常用接口協(xié)議

    接口協(xié)議指的是需要進(jìn)行信息交換的接口間需要遵從的通信方式和要求。接口協(xié)議的種類非常多。
    發(fā)表于 02-06 17:54 ?5861次閱讀
    <b class='flag-5'>嵌入式</b>常用<b class='flag-5'>接口</b><b class='flag-5'>協(xié)議</b>

    嵌入式硬件通信接口協(xié)議中的串行通信接口-SPI

    本節(jié)繼續(xù)講嵌入式硬件通信接口協(xié)議中的另外一個(gè)串行通信接口
    發(fā)表于 02-05 11:35 ?1669次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>硬件</b><b class='flag-5'>通信</b><b class='flag-5'>接口</b><b class='flag-5'>協(xié)議</b>中的串行<b class='flag-5'>通信</b><b class='flag-5'>接口</b>-<b class='flag-5'>SPI</b>

    嵌入式常見的通信接口/協(xié)議

    0 引言??嵌入式開發(fā)中,常見的通信接口/協(xié)議SPI,I2C,UART三種,本文先分三個(gè)部分對SPI
    發(fā)表于 10-19 18:33 ?16次下載
    <b class='flag-5'>嵌入式</b>常見的<b class='flag-5'>通信</b><b class='flag-5'>接口</b>/<b class='flag-5'>協(xié)議</b>

    嵌入式分層概括總結(jié)

    最近重新進(jìn)入嵌入式領(lǐng)域,有必要對嵌入式分層架構(gòu)有一個(gè)清晰的理解。經(jīng)過多方查閱以及個(gè)人的理解,本人對嵌入式
    發(fā)表于 10-21 10:51 ?11次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>分層</b>概括總結(jié)

    嵌入式UI架構(gòu)設(shè)計(jì)漫談

    嵌入式UI架構(gòu)設(shè)計(jì)漫談
    發(fā)表于 11-03 17:36 ?15次下載
    <b class='flag-5'>嵌入式</b>UI<b class='flag-5'>架構(gòu)設(shè)</b>計(jì)漫談

    嵌入式硬件通信接口協(xié)議-SPI分層架構(gòu)設(shè)計(jì)模擬接口

    嵌入式硬件通信接口協(xié)議-SPI
    發(fā)表于 12-09 12:36 ?19次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>硬件</b><b class='flag-5'>通信</b><b class='flag-5'>接口</b><b class='flag-5'>協(xié)議</b>-<b class='flag-5'>SPI</b>(<b class='flag-5'>二</b>)<b class='flag-5'>分層</b><b class='flag-5'>架構(gòu)設(shè)</b>計(jì)<b class='flag-5'>模擬</b><b class='flag-5'>接口</b>

    嵌入式硬件通信接口協(xié)議-SPI(一)協(xié)議基礎(chǔ)

    /hDUK43s8naybJLvoE2UsoA?本節(jié)繼續(xù)講嵌入式硬件通信接口協(xié)議中的另外一個(gè)串行通信
    發(fā)表于 01-12 17:48 ?10次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>硬件</b><b class='flag-5'>通信</b><b class='flag-5'>接口</b><b class='flag-5'>協(xié)議</b>-<b class='flag-5'>SPI</b>(一)<b class='flag-5'>協(xié)議</b>基礎(chǔ)
    足球百家乐官网投注计算| 百家乐投注程式| 大发888破解老虎机| 澳门百家乐官网怎洋赢钱| 百佬汇百家乐的玩法技巧和规则| 百家乐官网怎么稳赚| 百家乐有赢钱公式吗| 百家乐代理| 百家乐的打法技巧| 鸿运娱乐| 24山安葬吉凶择日| 德州扑克游戏| 百家乐官网桌布动物| 顶级赌场怎么样| 澳门百家乐官网游戏下| 伟博百家乐官网娱乐城| 尊博| 筹码币百家乐麻将| 阜宁县| 百家乐桌布橡胶| 百家乐官网在线投注顺势法| 永利博百家乐的玩法技巧和规则 | 678百家乐博彩赌场娱乐网规则| 百家乐官网翻天粤语下载| 百家乐首页红利| 百家乐扑| 百家乐官网有没有破解之法| tt娱乐城网址| 百家乐棋牌交| 百家乐官网棋牌交| 大发888娱乐场手机版| 凯旋门百家乐官网现金网| 百家乐乐赌| 狮威百家乐官网娱乐| 新濠国际| 线上百家乐是如何作弊| 百家乐官网在线娱乐可信吗| 信誉棋牌评测网| 澳门百家乐群策略| 百家乐官网赌博在线娱乐| 名门国际娱乐|