




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Allwinner Technology .2013-02-CopyrightAllwinner Technology .2013-02-Copyright2011-2013Allwinners.1Allwinner Technology .版本歷Copyright2011-2013Allwinners.Allwinner Technology .版本歷Copyright2011-2013Allwinners.i版時備2013-02-Allwinner Technology .1. 前編寫目Allwinner Technology .1. 前編寫目適用范相. 2.SPI模塊介功能介硬件介源碼結
2、構介配置介SPI體系結構描SPI 常用數據結構描SPI常用接口描SPI 設備驅動開發Copyright2011-2013Allwinners.1. 1.1SPI 設備驅動在上的開發1.2Allwinner 。1.31. 1.1SPI 設備驅動在上的開發1.2Allwinner 。1.3SPI。Copyright2011-2013Allwinners.12. SPI對 SPI 設備的讀寫操作給予支持1)SPISPI MCU (SCLK(MOSI(MISO(SS 2. SPI對 SPI 設備的讀寫操作給予支持1)SPISPI MCU (SCLK(MOSI(MISO(SS SPI時鐘信號(SCLK)
3、使傳輸同步,SPI 總線的 結構如圖 11SPI接口2)SPI4 種工作模式分別是:SPI0 模式,SPI1 模式,SPI2 SPI3 SPI0SPI3 11SPICPOL:CPOL 1 Copyright2011-2013Allwinners.2SPILeading000101210311CPHA:CPHA0時,表示在時鐘的第一個跳變CPHA:CPHA0時,表示在時鐘的第一個跳變2 SPI4 2SPI總線工作模式時序對比2.3Linux 驅動位于 linux-3.3driversspispi-sun6i.c 2.41)sys_config.fex 配置說明sys_configfex4spi總
4、線可供使用,分別spi0、spi1、spi2spi3。配置下其中,若使用哪一組spi 總線,將對應的spi_used 1 即可config配置說明 DeviceDrivers 3config Copyright2011-2013Allwinners.3=3DeviceDriversSPIsupport 3DeviceDriversSPIsupport 4 4SPIsupportSUN6I SPI Controller 選項,可選擇直接編譯進內核,也可以選5 所示:Copyright2011-2013Allwinners.45SUN6ISPIController5SUN6ISPIControll
5、erCopyright2011-2013Allwinners.53. SPI SPI6 SPI64 SPI4 SPIUser AppAppAppKernel SPISPI SPImaster0 (SPI0)SPImaster1 (SPI1)SPImaster2 (SPI2)SPImaster3 (SPI3)HardwSevice Sevice evice Sevice Sevice Sevice 6SPI驅動層次架構3. SPI SPI6 SPI64 SPI4 SPIUser AppAppAppKernel SPISPI SPImaster0 (SPI0)SPImaster1 (SPI1)SP
6、Imaster2 (SPI2)SPImaster3 (SPI3)HardwSevice Sevice evice Sevice Sevice Sevice 6SPI驅動層次架構Copyright2011-2013Allwinners.6s s s4. SPI對應于一個 控制器, 過程中會掃描spi_transfer 用于4. SPI對應于一個 控制器, 過程中會掃描spi_transfer 用于描述 SPI 傳輸,而一次完整的 SPI 傳輸過程可能不只包含 1spi_transfer, 它可能包含多個 spi_transferspi_transfer最終通過 spi_message 組織在一起
7、。Copyright2011-2013Allwinners.7structspi_message/* 此次消息的傳輸隊列,一個消息可以包含多個傳輸段structspi_transferconstvoid*tx_buf;/* 要寫入設備的數據(必須是dma_safe),或者為NULL*/ void *rx_buf; /* 要的數據緩沖(必須是dma_safe),或者為NULL */ unsigned len; /* tx 和rx 的大小(字節數),他們總是相等的 */dma_addr_t tx_dma;/*tx的dma地址*/ dma_addr_t rx_dma;/* rx 的dma 地址*/*
8、 影響此次傳輸之后的片選,指示本次 transfer setup 改變設置u8bits_per_word; /* 0,使用默認值u16dea_usecs;*個傳輸或者結束整個消息/u32 speed_hz;struct list_head transfer_list;structspi_masterstructdevice dev; structlist_heads16/* 總,從零開始u16 num_chipselect;/* 支持的片選的數量。*/ u16 dma_alignment;u16mode_bits; u16 flags;#define SPI_MASTER_HALF_DUPLE
9、X/*cantdofullduplex*/ #define SPI_MASTER_NO_RX BIT(1)/* cant do buffer read */#define SPI_MASTER_NO_TX/*cantdobufferwrite*/ spinlock_t bus_lock_spinlock;structmutexbus_lock_mutex; bool bus_lock_flag;(*setup)(structspi_device/* 根據spi/* 添加消息到隊列的方法。這個函數不可睡眠,它的職責是安排發生的傳送并且的回調函數complete() */(*transfer)(s
10、tructspi_device*spi,structspi_message/* cleanup 函數會在ev_release 函數中被調用ev_release 被登記為releasevoid(*cleanup)(structspi_devicespi_messagespi_transfer表示的一串數組傳輸請求。這個傳FIFO 的順序。spi_device 對應于真實的物理設備,每個spi_messagespi_transfer表示的一串數組傳輸請求。這個傳FIFO 的順序。spi_device 對應于真實的物理設備,每個SPI spi_device 來Copyright2011-2013Al
11、lwinners.8structspi_board_infochar/* /* 私有數據,會被設置到spi_device.dev.platform_data*/ const void *platform_data;/* 私有數據,會被設置到spi_device.controller_data*/ void *controller_data;/* 設備中斷號u32/*SPI的最大速率u16/*SPI總線u16/* 與片選有關structspi_devicestructstruct/* /*spi/* 片選號,用來區分同一控制器上的設備*/ /* 各位的定義如下,主要是傳輸模式、片/* /* 時鐘
12、極性*/ SPI_MODE_0(0|0)SPI_MODE_1(0|SPI_CPHA) SPI_MODE_2 SPI_MODE_3 /* /* /* 輸入輸出共享接口,此時只能做半雙工 */#define SPI_LOOP 0 x20 #define SPI_NO_CS 0 x40 #define SPI_READY /* 每個字長的比特數*/ /* 使用到的中斷 */* structlist_headstructspi_device /* 傳輸的目的設備unsignedis_dma_mapped:1; /* 表示是否是DMA 傳輸方式*/ void(*complete)(void*contex
13、t); /* 異步調用完成后的回調函數*/ void *context;/* 回調函數的參數 */unsigned/* 此次傳輸的實際長度s us; /* 0,否則是一個負的錯誤碼*/ struct list_head queue;void*s spi_board_infospi_device 序號、片選序號、比特率、SPIspi_driver 主要提供驅動模型下的綁定方法和電源管理接口其成員spi_board_infospi_device 序號、片選序號、比特率、SPIspi_driver 主要提供驅動模型下的綁定方法和電源管理接口其成員 spi_
14、device spi_register_board_infoCopyright2011-2013Allwinners.9structspi_driverconststructspi_device_id/* 與sevice匹配成功后調用,對設備和私有數據進行初始化*/ (*probe)(struct spi_device *spi);/* 解除spi_device 和spi_driver 的綁定,probe申請的資源*/ (*remove)(struct spi_device *spi);(*shutdown)(structspi_device/* (*suspend)(struct spi_d
15、evipi, pm_message_t mesg);/* 掛起*/ (*resume)(struct spi_device *spi);/* 恢復 */structu8 mode;/* 設備的一些模式,例如片選的高低,SPI的連接方式 */5. SPICopyright5. SPICopyright2011-2013Allwinners.icinlinevoid*spi_get_drvdata(structspi_device handleto Theresult ofgetevicedrivericinlinevoidspi_set_drvdata(struct spi_device*spi
16、,voidhandleto Setprivateo icinlinevoidspi_unregister_driver(structspi_driverthedriver toUnregisteraevicedriverfromspisub-spi_register_driver(structspi_driverthedriver toinit=inittheeightbitnumber returned bythenegativeerrorSPIsynchronous 8bitwrite followedby8bit icspi_read(structspi_device*spi,u8*bu
17、f,size_tevicefromwhichdatawillberead; data buffer;databufferread=readthebuffernegativeerrorSPIsynchronous icspi_write(structspi_device *spi,constu8*buf,size_tevicetowhichdatawillbewritten; buf data buffer;databufferwrite=writethebuffernegativeerrorSPIsynchronous Getprivatedatafrom Copyright2011-2013
18、AllwinnersCopyright2011-2013Allwinners.ic inline void spi_message_add_tail(struct spi_transfer *t, struct icinlinevoidspi_message_init(struct spi_messagetheerto Initspi_write_then_read(struct spi_device *spi, const u8 *txbuf, unsigned n_tx, *rxbuf,unsigned evicewithwhichdatawillbeexchanged; o be wri
19、tten (need not be dma-safe); n_tx size of txbuf, in bytes;owhichdatawillberead(neednotbedma-safe); n_rxsize of rxbuf, in bytesexecute=thesixteenbitnumberreturned bythenegativeerrorSPIsynchronous 8bitwrite followedby16bit Copyright2011-2013AllwinnersCopyright2011-2013Allwinners.the poertospitransfer; the poer to spAddspitransfer toSPI設備驅動開發SPIdemo#include #include #include#includesspi_driver_demo_probe(struct spi_device struct/* */ pdata = &spi-dev.platform_data;ifSPI設備驅動開發SPIdemo#include #include #include#incl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論