新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > 基于FPGA的RFID無線通信系統的實現

        基于FPGA的RFID無線通信系統的實現

        作者: 時間:2010-10-29 來源:網絡 收藏

        SPI總線模式的數據是以字節為單位進行傳輸的(一次傳輸可以傳多個字節),每字節為8位,每個命令或者數據塊都是字節對齊的(8個時鐘的整數倍)。數據按位傳輸,高位在前,地位在后,為全雙工通信,數據傳輸速度總體來說比I2C總線要快,速度可達到每秒幾兆比特。SPI接口是以主從方式工作的,這種模式通常有一個主器件和一個或多個從器件。在本文設計的無線通信系統中,由FPGA實現的SPI總線接口模塊為主機,NRF905的SPI模塊為從機。
        SPI時序模式的選擇:
        SPI接口有4種不同的數據傳輸時序,取CPOL和CPHL這兩位的組合。CPOL是用來決定SCK時鐘信號空閑時的電平;CPOL=O,空閑電平為低電平,CPOL=1時,空閑電平為高電平。CPHA是用來決定采樣時刻的,CPHA=0,在每個周期的第一個時鐘沿采樣;CPHA=1,在每個周期的第二個時鐘沿采樣。
        圖2為NRF905的SPI接口的時序圖,由此本文設計的SPI工作模式是在CPOL=O,CPHA=O這種時序下。

        本文引用地址:http://www.104case.com/article/156991.htm


        1.3.2 SPI硬件設計
        圖3是本文無線通信系統中SPI模塊的結構圖,該系統中的SPI主要由時鐘生成模塊,SPI寄存器組,SPI功能配置的模塊組成,并且通過Wishbone總線與控制器相連,具體設計如下:
        時鐘生成模塊:由于SPI模塊是基于FPGA來實現的,而FPGA外部提供的時鐘較快(50 MHz或100 MHz),不適合與NRF905的SPI接口進行通信
        (1 Hz~10 MHz),所以需要分頻來使時鐘慢下來。但是至于幾分頻是由SPI功能配置模塊來完成的。其次由于SPI協議指出數據可在上升沿或下降沿觸發,所以還需要對時鐘的上升沿或下降沿進行鑒別(也稱抓沿程序),這個功能也由這個模塊完成。


        SPI寄存器模塊:這個模塊實現的是一個由16個8位寄存器組成的128位的寄存器組,也就是說通過SPI接口一次性可收發8~128位的串行數據。具體操作由SPI功能配置模塊來完成。
        SPI功能配置模塊:這個模塊相當于一個SPI控制器,通過對其寄存器的配置來決定時鐘的分頻數,收發數據位數,時鐘上升沿或下降沿傳輸數據等,而對這些寄存器的配置是由控制模塊完成的。下面就配置寄存器做一些簡要說明。
        首先介紹控制寄存器:
        控制寄存器第O位go:是否開始發送。
        控制寄存器第1位rx_negedge:接收數據是下降沿還是上升沿。
        控制寄存器第2位tx_negedge:發送數據是下降沿還是上升沿。
        控制寄存器第3~9位char_len:發送數據的位數(因為SPI是全雙工的,所以這實際上也是接收數據的位數)。
        控制寄存器第10位lsb:是從高位發送還是地位發送。
        控制寄存器第11位ie:讀寫完成之后是否發送中斷信號。
        控制寄存器第12位ass:是否自動產生片選信號。
        分頻寄存器:spi_divider_sel。
        狀態寄存器:spi_ctrl_sel。
        數據寄存器O:spi_tx_sel[0]。
        數據寄存器1:spi_tx_sel[1]。
        數據寄存器2:spi_tx_sel[2]。
        數據寄存器3:spi_tx_sel[3]。
        片選信號寄存器:spi_ss_sel。
        1.4 控制模塊
        對于控制模塊來說,其實現方法是利用基于Verilog語言的有限狀態機來實現,相當于一條一條的指令來控制SPI模塊接收發送數據??刂颇K分成三個獨立的部分即接收控制模塊、發送控制模塊及NRF905配置模塊。其中接收與發送控制模塊分別包含對SPI進行配置的狀態。下面對接收控制模塊的設計進行說明。圖4即為Debussy綜合出的狀態機轉換圖。

        11z.jpg



        關鍵詞: 收發器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 云林县| 七台河市| 北流市| 山东| 云浮市| 湟中县| 新和县| 罗城| 文化| 土默特左旗| 滨海县| 唐河县| 安达市| 汉中市| 邵东县| 阿鲁科尔沁旗| 三门县| 行唐县| 项城市| 宁城县| 三门峡市| 西乡县| 宁晋县| 嘉兴市| 南投县| 大同县| 鸡东县| 昌乐县| 县级市| 华阴市| 迁西县| 凤山市| 房产| 凯里市| 大竹县| 偃师市| 南皮县| 板桥市| 东阿县| 阿巴嘎旗| 米脂县|