1. 實驗簡介
實驗通過閱讀DS1302芯片手冊,了解DS1302操作時序和相關寄存器,然后設計程序將DS1302 RTC時間通過串口發送到PC,通過串口調試助手可以看到時間信息。
2. 實驗原理
RTC(Real-Time Clock)實時時鐘為系統提供一個可靠的時間,并且在斷電的情況下,RTC實時時鐘也可以通過電池供電,一直運行下去。RTC通過類SPI總線向FPGA傳送8位數據(BCD碼)。數據包括秒,分,小時,日期,天,月和年。在本實驗中我們將讀取RTC的時,分,秒的數據通過串口發送到PC。
2.1 硬件介紹
開發板上RTC設計采用DALLAS公司的低功耗實時時鐘芯片DS1302, DS1302的VCC2為主電源,VCC1為后備電源。在主電源關閉的情況下,也可以通過電池保持時鐘的連續運行。DS1302外接32.768kHz晶振為RTC電路提供振蕩源。 RTC部分的原理圖如下圖所示:
![o4YBAGBAcJmAXjGzAABPJ0LpP7s516.jpg](https://file.elecfans.com//web1/M00/E3/16/o4YBAGBAcJmAXjGzAABPJ0LpP7s516.jpg)
2.2 DS1302時序和控制
1)寫數據時序
DS1302芯片寫操作的時序圖。第一個字節是“訪問寄存器的地址”,第二字節是“寫數據”。在寫操作的時候,都是“上升沿有效”,然而還有一個條件,就是CE(/RST)信號必須拉高。(數據都是從LSB開始發送,亦即是最低位開始至最高位結束)。
![pIYBAGBAcJmAIucYAABlF9KpIyE828.jpg](https://file.elecfans.com//web1/M00/E3/8F/pIYBAGBAcJmAIucYAABlF9KpIyE828.jpg)
2)讀數據時序
基本上和寫操作的時序圖大同小異,區別的地方就是在第二個字節是“讀數據”的動作。第二字節讀數據開始時,SCLK信號都是下降沿送出數據,這個時候可以使用上升沿讀取數據。CE(/RST)信號同樣是必須拉高。(第一節數據是從LSB開始輸出,第二節數據是從LSB開始讀入)。
![o4YBAGBAcJmAa-s0AABudCUDlD0788.jpg](https://file.elecfans.com//web1/M00/E3/16/o4YBAGBAcJmAa-s0AABudCUDlD0788.jpg)
3)命令格式和寄存器
無論是讀操作還是寫操作,在時序圖中,第一個字節都是“訪問寄存器的地址”,然而這一字節數據有自己的格式。
![pIYBAGBAcJqAOWgoAABQuOYtlnw839.jpg](https://file.elecfans.com//web1/M00/E3/8F/pIYBAGBAcJqAOWgoAABQuOYtlnw839.jpg)
BIT 7 固定。 BIT 6 表示是訪問寄存器本身,還是訪問RAM空間。 BIT 5 到BIT1 表示是寄存器或RAM空間的地址。 BIT 0 表示是訪問寄存器本身是寫操作,還是讀操作。
下圖是DS1302的寄存器地址和數據格式
![o4YBAGBAcJqAR_9ZAACcVVYDZHQ356.jpg](https://file.elecfans.com//web1/M00/E3/16/o4YBAGBAcJqAR_9ZAACcVVYDZHQ356.jpg)
3. 程序設計
通過分析DS1302讀寫時序,可以看出和SPI時序類似,只不過數據輸出和輸入分時復用了,本實驗利用SPI Master模塊來做為DS1302的底層讀寫控制模塊,然后再編寫一個RTC讀寫模塊。
ds1302_io模塊完成DS1302寄存器讀寫控制,狀態機如下圖所示。
狀態“S_IDLE”空閑狀態,收到讀寫寄存器請求寫進入“S_CE_HIGH”狀態,將CE拉高,然后根據請求類型,進入讀(S_READ)或寫狀態(S_WRITE)。
“S_WRITE”狀態下一個狀態進入寫地址狀態“S_WRITE_ADDR”,再進入寫數據狀態“S_WRITE_DATA”,完成一個寄存器的寫入,最后應答,拉低CE。
“S_READ”狀態下一個狀態進入讀地址狀態“S_READ_ADDR”,再進入讀數據狀態“S_READ_DATA”,完成一個寄存器的讀取,最后應答,拉低CE。
ds1302_io狀態機
信號名稱 | 方向 | 說明 |
clk | in | 時鐘輸入 |
rst | in | 異步復位輸入,高復位 |
ds1302_ce | out | DS1302 CE,高有效 |
ds1302_sclk | out | DS1302串行時鐘 |
ds1302_io | inout | DS1302數據 |
cmd_read | in | 讀寄存器請求,發出請求時準備好地址 |
cmd_write | in | 寫寄存器請求,發出請求時準備好地址和數據 |
cmd_read_ack | out | 讀寄存器應答,應答時讀取數據有效 |
cmd_write_ack | out | 寫寄存器應答 |
read_addr | in | 讀寄存器地址 |
write_addr | in | 寫寄存器地址 |
read_data | out | 讀出的數據 |
write_data | in | 寫寄存器數據 |
ds1302_io端口
ds1302模塊主要完成時間寄存器的讀寫控制,狀態機狀態較為簡單。
ds1302模塊狀態機
信號名稱 | 方向 | 說明 |
clk | in | 時鐘輸入 |
rst | in | 異步復位輸入,高復位 |
ds1302_ce | out | DS1302 CE,高有效 |
ds1302_sclk | out | DS1302串行時鐘 |
ds1302_io | inout | DS1302數據 |
write_time_req | in | ds1302寫時間請求,請求發出時,時間數據write_second、write_minute、write_hour、write_date、write_month、write_week、write_year要有效 |
write_time_ack | out | 寫時間請求應答 |
write_second | in | 寫時間:秒,BCD碼,00-59 |
write_minute | in | 寫時間:分,BCD碼,,00-59 |
write_hour | in | 寫時間:時,BCD碼,,00-23 |
write_date | in | 寫時間:日,BCD碼,,01-31 |
write_month | in | 寫時間:月,BCD碼,,01-12 |
write_week | in | 寫時間:周,BCD碼,,01-07 |
write_year | in | 寫時間:年,BCD碼,,00-99 |
read_time_req | in | 讀時間請求 |
read_time_ack | out | 讀時間請求應答 |
read_second | out | 讀時間:秒,BCD碼,00-59 |
read_minute | out | 讀時間:分,BCD碼,,00-59 |
read_hour | out | 讀時間:時,BCD碼,,00-23 |
read_date | out | 讀時間:日,BCD碼,,01-31 |
read_month | out | 讀時間:月,BCD碼,,01-12 |
read_week | out | 讀時間:周,BCD碼,,01-07 |
read_year | out | 讀時間:年,BCD碼,,00-99 |
ds1302模塊端口
ds1302_test模塊主要CH狀態檢測,CH位于秒寄存器的BIT7位,上電后首先讀取時間,判斷秒寄存器的CH狀態,如果為高,表示DS1302暫停,狀態機進入“S_WRITE_CH”,將CH寫0,并將一個初始時間寫入,然后循環不斷的讀取時間寄存器。
ds1302_test狀態機
信號名稱 | 方向 | 說明 |
clk | in | 時鐘輸入 |
rst | in | 異步復位輸入,高復位 |
ds1302_ce | out | DS1302 CE,高有效 |
ds1302_sclk | out | DS1302串行時鐘 |
ds1302_io | inout | DS1302數據 |
read_second | out | 時間:秒,BCD碼,00-59 |
read_minute | out | 時間:分,BCD碼,00-59 |
read_hour | out | 時間:時,BCD碼,00-23 |
read_date | out | 時間:日,BCD碼,01-31 |
read_month | out | 時間:月,BCD碼,01-12 |
read_week | out | 時間:周,BCD碼,01-07 |
read_year | out | 時間:年,BCD碼,00-99 |
ds1302_test端口
4. 實驗現象
將程序下載到開發板以后,連接uart轉串口到PC機
開發板串口連接圖
打開串口調試助手
端口選擇按照設備管理器中“Silicon Labs CP210x USB to UART Bridge”設置,波特率選擇“115200”,其他值默認。
我們可以看到串口每秒會收到一條數據,顯示一個時間。
-
FPGA
+關注
關注
1630文章
21759瀏覽量
604308 -
時鐘
+關注
關注
11文章
1736瀏覽量
131585 -
DS1302
+關注
關注
8文章
449瀏覽量
50729 -
RTC
+關注
關注
2文章
541瀏覽量
66718 -
紫光同創
+關注
關注
5文章
87瀏覽量
27525
發布評論請先 登錄
相關推薦
「正點原子Linux連載」第二十二章串口格式化函數移植實驗
HarmonyOS內核源碼分析(下)
火力發電廠水汽分析方法 第二十二部分:化學耗氧量的測定(高錳
實時頻譜儀原理及操作指南
第二十二講 同步時序邏輯電路的分析方法
![<b class='flag-5'>第二十二</b>講 同步時序邏輯電路的分析方法](https://file1.elecfans.com//web2/M00/A4/AE/wKgZomUMNUKASybrAAAQYJr-wSY245.gif)
模擬電路網絡課件 第二十二節:功率放大電路的一般問題
第二十二屆高交會深圳開幕 3300多家展商亮相
2020第二十二屆高交會助力科技領域雙循環
第二十二屆高交會如期而至,共話云計算行業發展
第二十二屆高交會圓滿落幕,極視角與您明年相約
美高電子推出高性能迷你主機,亮相深圳第二十二屆高交會
【正點原子FPGA連載】第二十五章HDMI方塊移動實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1
![【正點原子<b class='flag-5'>FPGA</b>連載】<b class='flag-5'>第二十五章</b>HDMI方塊移動<b class='flag-5'>實驗</b> -摘自【正點原子】新起點之<b class='flag-5'>FPGA</b>開發指南_V2.1](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
展會直擊 | 美格智能亮相IOTE 2024第二十二屆國際物聯網展·深圳站
![展會直擊 | 美格智能亮相IOTE 2024<b class='flag-5'>第二十二</b>屆國際物聯網展·深圳站](https://file1.elecfans.com/web2/M00/04/8D/wKgZombP8FKAD2nhAAETTWr6Ylg244.png)
巍泰技術攜多款創新產品驚艷亮相 2024 第二十二屆物聯網展
![巍泰技術攜多款創新產品驚艷亮相 2024 <b class='flag-5'>第二十二</b>屆物聯網展](https://file1.elecfans.com/web2/M00/06/F2/wKgaombhQo-AbEkNAADafTSJ_gg926.png)
評論