arduino的門禁卡
spi是一種通信方式,
一共有4根數(shù)據(jù)線:


sck:?時(shí)鐘線,用于產(chǎn)生時(shí)鐘.(主機(jī)產(chǎn)生時(shí)鐘,各個(gè)從機(jī)按照主機(jī)時(shí)序進(jìn)行通信)
cs:片選,一個(gè)spi總線上可以有多個(gè)從機(jī),每個(gè)如何知道和哪個(gè)從機(jī)進(jìn)行通信,就用到了cs片選.
? ? ? ? ? ? 一般情況下.低電平有效.高電平屏蔽.
MISO(Master In Slave Out): 主機(jī)數(shù)據(jù)輸入,從機(jī)數(shù)據(jù)輸出
MOSI(Master Out Slave In): 主機(jī)數(shù)據(jù)輸出,從機(jī)數(shù)據(jù)輸入

在arduino上的接線:



關(guān)于程序官方spi庫(kù)的源代碼在:

比較好用的522庫(kù):


spi特點(diǎn)是有四種模式:
模式0(默認(rèn)值)?- 時(shí)鐘通常為低電平(CPOL = 0),數(shù)據(jù)在從低電平到高電平(前沿)(CPHA = 0)的轉(zhuǎn)換時(shí)采樣。
模式1?- 時(shí)鐘通常為低電平(CPOL = 0),數(shù)據(jù)在從高電平到低電平(后沿)(CPHA = 1)的轉(zhuǎn)換時(shí)采樣。
模式2?- 時(shí)鐘通常為高電平(CPOL = 1),數(shù)據(jù)在從高電平到低電平(前沿)(CPHA = 0)的轉(zhuǎn)換時(shí)采樣。
模式3?- 時(shí)鐘通常為高電平(CPOL = 1),數(shù)據(jù)在從低電平到高電平(后沿)(CPHA = 1)的轉(zhuǎn)換時(shí)采樣。
SPI.attachInterrupt(handler)?- 當(dāng)從設(shè)備從主設(shè)備接收數(shù)據(jù)時(shí)調(diào)用的函數(shù)。
spi的另一個(gè)特點(diǎn)是:
? ? ? ?收發(fā)同時(shí)進(jìn)行.


arduino的庫(kù)函數(shù):
?SPI.begin()
初始化SPI通信,調(diào)用該函數(shù)后,SCK/MOSI/SS引腳將被設(shè)置為輸出模式,且SCK/MOSI引腳拉低,SS引腳拉高。
SPI.end()
關(guān)閉SPI總線通信
SPI.setBitOrder(order)
設(shè)置傳輸順序。order:傳輸順序,LSBFIRST,低位在前;MSBFIRST,高位在前
SPI.setClockDivider(divider)
設(shè)置通信時(shí)鐘,由主機(jī)產(chǎn)生,從機(jī)不用配置。divider:SPI通信的系統(tǒng)時(shí)鐘分頻得到,可選配置有SPI_CLOCK_DIV2、SPI_CLOCK_DIV4(默認(rèn)配置)等,最大可達(dá)128分頻
SPI.setDataMode(mode)
設(shè)置數(shù)據(jù)模式。mode:可配置的模式,可選項(xiàng)有SPI_MODE0、SPI_MODE1、SPI_MODE2、SPI_MODE3
SPI.transfer(val)
傳輸1Byte的數(shù)據(jù),SPI是全雙工通信,所以發(fā)送1B的數(shù)據(jù),也會(huì)接收到1B的數(shù)據(jù)。val:要發(fā)送的字節(jié)數(shù)據(jù)。

發(fā)送一串?dāng)?shù)據(jù)