引言:本文通過(guò)以DS1302芯片為基礎(chǔ),介紹該芯片與FPGA之間SPI通信原理,詳細(xì)描述硬件設(shè)計(jì)原理及FPGA SPI接口驅(qū)動(dòng)設(shè)計(jì)。
1. DS1302硬件設(shè)計(jì)原理
1.1 概述
DS1302是由美國(guó)DALLAS公司推出的具有涓細(xì)電流充電能力的低功耗實(shí)時(shí)時(shí)鐘芯片。它提供秒、分鐘、小時(shí)、天、日期、月份和年份信息,對(duì)于少于31天的月份,月末日期會(huì)自動(dòng)調(diào)整,包括閏年的更正。時(shí)鐘以24小時(shí)或12小時(shí)的形式運(yùn)行,帶有AM/PM指示器。它通過(guò)一個(gè)簡(jiǎn)單的串行SPI接口與微處理器通信,如下圖所示。
圖1:DS1302管腳定義及典型應(yīng)用電路
圖2顯示了DS1302芯片內(nèi)部的主要組件:電源控制、輸入移位寄存器、命令和控制邏輯、振蕩器、實(shí)時(shí)時(shí)鐘和RAM。
圖2:DS1302芯片內(nèi)部框圖
1.2 管腳定義說(shuō)明:
VCC2:雙電源配置中的主電源引腳。VCC1連接到備用電源(通常為紐扣電池),以在沒(méi)有主電源的情況下保持時(shí)間和日期。DS1302從VCC1或VCC2中較大的一個(gè)操作。當(dāng)VCC2大于VCC1+0.2V時(shí),VCC2為DS1302供電。當(dāng)VCC2小于VCC1時(shí),VCC1為DS1302供電。
X1/X2:連接標(biāo)準(zhǔn)32.768kHz石英晶體,石英晶體負(fù)載電容典型值為6pF。DS1302也可以由外部32.768kHz振蕩器驅(qū)動(dòng),在該配置中,X1引腳連接到外部振蕩器信號(hào),并且X2引腳懸空。
GND:地信號(hào)。
CE:使能信號(hào),輸入CE信號(hào)必須在讀取或?qū)懭肫陂g被斷言為高電平。該引腳有一個(gè)內(nèi)部40kΩ(典型值)下拉電阻器,用于接地。
I/O:輸入/推拉輸出。I/O引腳是3線接口的雙向數(shù)據(jù)引腳。該引腳有一個(gè)內(nèi)部40kΩ(典型值)下拉電阻器,用于接地。
SCLK:SCLK用于同步串行接口上的數(shù)據(jù)通信。該引腳有一個(gè)內(nèi)部40kΩ(典型值)下拉電阻器,用于接地。
VCC1:單電源和電池操作系統(tǒng)中的低功率操作以及低功率電池備份。
1.3 振蕩電路
DS1302使用外部32.768kHz晶體,由于芯片內(nèi)部集成了負(fù)載電容,振蕩器電路不需要任何外部電阻器或電容器來(lái)操作。表1規(guī)定了外部晶體的參數(shù)要求。
表1:外部晶體的參數(shù)要求
1.4 時(shí)鐘精度
時(shí)鐘的精度取決于晶體的精度以及振蕩器電路的電容性負(fù)載與晶體的電容性負(fù)荷之間的匹配精度。溫度偏移引起的晶體頻率漂移將增加額外的誤差。耦合到振蕩器電路中的外部電路噪聲可能導(dǎo)致時(shí)鐘快速運(yùn)行。圖3顯示了用于隔離晶體和振蕩器與噪聲的典型PC板布局。
圖3:隔離噪聲的典型PCB板布局
1.5 原理圖設(shè)計(jì)
DS1302與FPGA通過(guò)三線SPI接口進(jìn)行通信,信號(hào)連接較為簡(jiǎn)單,信號(hào)對(duì)IO接口速率無(wú)要求。
圖4:DS1302原理圖設(shè)計(jì)
2. FPGA軟件設(shè)計(jì)
2.1 SPI接口讀寫時(shí)序
SPI接口讀時(shí)序操作如圖5所示。讀操作分為兩個(gè)階段,第一階段進(jìn)行寫命令操作,即往I/O數(shù)據(jù)線上寫入需要讀出的寄存器地址,第二階段是從I/O數(shù)據(jù)線上讀取當(dāng)前寄存器數(shù)據(jù)。
圖5:SPI接口讀操作時(shí)序
(1)使能信號(hào)CE為高電平,開啟讀操作,啟動(dòng)時(shí),SCLK必須為低電平;
(2)在SCLK時(shí)鐘的上升沿寫入命令字節(jié)到I/O數(shù)據(jù)線;
(3)在SCLK時(shí)鐘的下降沿從I/O數(shù)據(jù)線讀取數(shù)據(jù),要注意第一個(gè)讀取的bit D0是在寫命令最后一個(gè)bit時(shí)鐘的下降沿采樣的;
(4)使能信號(hào)CE為低電平,結(jié)束讀操作。
SPI接口寫時(shí)序操作如圖6所示。寫操作分為兩個(gè)階段,第一階段進(jìn)行寫命令操作,即往I/O數(shù)據(jù)線上寫入需要寫入的寄存器地址,第二階段是往I/O數(shù)據(jù)線上寫入當(dāng)前寄存器數(shù)據(jù)。
圖6:SPI接口寫操作時(shí)序
(1)使能信號(hào)CE為高電平,開啟寫操作;
(2)在SCLK時(shí)鐘的上升沿寫入命令字節(jié)到I/O數(shù)據(jù)線;
(3)在SCLK時(shí)鐘的上升沿寫入數(shù)據(jù)字節(jié)到I/O數(shù)據(jù)線;
(4)使能信號(hào)CE為低電平,結(jié)束寫操作。
2.2 寄存器說(shuō)明
命令字節(jié)
DS1302地址/命令字節(jié)如下表所示。
(1)bit7(MSB):必須是邏輯1。0:禁用對(duì)DS1302的寫入;
(2)bit6:0:選擇時(shí)鐘/日歷數(shù)據(jù),1:選擇RAM數(shù)據(jù);
(3)bit5~bit1:指定要寫或讀出的指定寄存器地址;
(4)bit0:0:寫操作,1:讀操作。
注意:命令字節(jié)總是從LSB(位0)開始傳輸。
時(shí)鐘和日歷寄存器
時(shí)間和日歷信息是通過(guò)讀取DS1302的寄存器字節(jié)來(lái)獲得的。表2說(shuō)明了RTC寄存器。
表2:RTC寄存器
寄存器說(shuō)明:
(1)時(shí)鐘和日歷初始化:可以通過(guò)寫入適當(dāng)?shù)募拇嫫髯止?jié)來(lái)設(shè)置或初始化時(shí)間和日歷。
(2)時(shí)間和日歷寄存器數(shù)據(jù)格式:二進(jìn)制編碼十進(jìn)制(BCD)格式。
(3)星期幾的寄存器在午夜遞增。與星期幾對(duì)應(yīng)的值是用戶定義的,但必須是連續(xù)的(即,如果1等于星期日,則2等于星期一,依此類推)。不合理的時(shí)間和日期條目會(huì)導(dǎo)致未定義的操作。
(4)每當(dāng)寫入秒寄存器時(shí),就會(huì)重置倒計(jì)時(shí)鏈。寫入傳輸發(fā)生在CE的下降沿。為避免滾動(dòng)問(wèn)題,一旦重置倒計(jì)時(shí)鏈,必須在1秒內(nèi)寫入剩余的時(shí)間和日期寄存器。
(5)DS1302可以在12小時(shí)或24小時(shí)模式下運(yùn)行。小時(shí)寄存器的第7位定義為12小時(shí)或24小時(shí)模式選擇位。當(dāng)為高時(shí),選擇12小時(shí)模式。在12小時(shí)模式中,第5位為AM/PM位,邏輯高為PM。在24小時(shí)模式中第5位是第二個(gè)10小時(shí)位(20–23小時(shí))。每當(dāng)12/24位發(fā)生變化時(shí),必須重新初始化小時(shí)數(shù)據(jù)。
(6)時(shí)鐘停止標(biāo)志:秒寄存器的bit7被定義為時(shí)鐘停止(CH)標(biāo)志。
1:振蕩器停止,DS1302進(jìn)入低功耗待機(jī)模式,電流消耗小于100nA;
0:時(shí)鐘將啟動(dòng)。
(7)WP寫保護(hù)位:控制寄存器的第7位是寫保護(hù)位WP。前7位(第0位至第6位)強(qiáng)制為0,讀取時(shí)始終讀取0。在對(duì)時(shí)鐘或RAM進(jìn)行任何寫入操作之前,位7必須為0。當(dāng)為高時(shí),寫保護(hù)位防止對(duì)任何其他寄存器進(jìn)行寫操作。因此,在嘗試寫入設(shè)備之前,應(yīng)清除WP位。
2.3 軟件設(shè)計(jì)
軟件設(shè)計(jì)模塊劃分如下圖7所示。
圖7:軟件設(shè)計(jì)模塊劃分框圖
軟件主要實(shí)現(xiàn)功能:
(1)DS1302芯片SPI接口驅(qū)動(dòng)功能;
(2)DS1302芯片寄存器讀寫控制功能,可以實(shí)現(xiàn)時(shí)鐘初始化設(shè)置;
(2)按鍵消抖功能;
(3)數(shù)碼管動(dòng)態(tài)顯示功能。
各個(gè)模塊功能:
(1)ds1302_segma.v模塊為頂層模塊,用于實(shí)現(xiàn)模塊間互聯(lián);
(2)spi_driver.v實(shí)現(xiàn)DS1302 SPI接口通信功能;
(3)ds1302_ctrl_m.v實(shí)現(xiàn)DS1302寄存器讀寫控制功能,包括將設(shè)置值寫入芯片和將芯片寄存器值讀出控制。
(4)set_init_time.v實(shí)現(xiàn)通過(guò)按鍵實(shí)現(xiàn)時(shí)間初始值設(shè)置;
(5)Segma.v實(shí)現(xiàn)數(shù)碼管動(dòng)態(tài)顯示功能(數(shù)碼管位有限,只顯示時(shí)、分、秒);
(6)KeyJitters.v實(shí)現(xiàn)按鍵消抖功能。
3. 軟件實(shí)測(cè)
軟件下載至電路板,通過(guò)SignaTap II在線邏輯分析儀抓取數(shù)據(jù)如下圖所示。
圖8:軟件設(shè)計(jì)模塊劃分框圖
圖9:數(shù)碼管顯示實(shí)時(shí)時(shí)鐘初始值
圖8顯示計(jì)時(shí)初始值正確寫入ds1302芯片寄存器,圖9數(shù)碼管顯示了正確的時(shí)、分、秒初始值。
來(lái)源:本文轉(zhuǎn)載自FPGA技術(shù)實(shí)戰(zhàn)公眾號(hào)
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603313 -
芯片
+關(guān)注
關(guān)注
455文章
50812瀏覽量
423573 -
接口
+關(guān)注
關(guān)注
33文章
8596瀏覽量
151145 -
SPI
+關(guān)注
關(guān)注
17文章
1706瀏覽量
91577 -
DS1302
+關(guān)注
關(guān)注
8文章
449瀏覽量
50688
原文標(biāo)題:FPGA入門基礎(chǔ)之SPI接口設(shè)計(jì)
文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論