概述:
DS1302是DALLAS公司制作的涓流充電時鐘芯片。芯片有實時時鐘日歷功能,有31*8bits靜態RAM,可以通過串行接口方式和處理器(stm32,ARM等)進行通信來讀寫RAM,有兩種傳送方式,單字節傳送和多字節傳送。內部實時時鐘日歷功能邏輯電路用于提供時、分、秒、年、月、日信息(2100年之前的日期),可以自動調整閏年,閏月問題。有24小時和12小時兩種格式表示。DS1302和處理器之間通過三根線連接:1、CE(低電平有效)使能線;2、I/O(Data line)數據線;3、SCLK(serial clock)串行時鐘線。DS1302具有低功耗,接口簡單(和處理器之間只需要三根引腳),精度高,抗干擾強等優點,工作電壓(2.0V~5.5V)與TTL兼容。DS1302有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器、RAM突發寄存器、RAM存儲器(31*8bits)。
DS1302管腳排列和描述
引腳描述
X1 X2 接32.768KHz晶振引腳
GND 接地線
CE 使能引腳
I/O 數據收發引腳
SCLK 時鐘引腳
Vcc1,Vcc2 供電引腳
DS1302框圖如下:
命令字:
命令字占8個比特位,如下圖:
命令字節用來初始化每次數據的傳輸。命令字節中最高位(bit 7)必須設置為1。如果設置為0,寫入會被禁止。Bit6 為0時,指定對時間\日期數據讀寫,如果為1時,指定對RAM數據進行讀寫。bit1 到 bit5指定將要被讀寫的寄存器是那個(芯片內部寄存器地址)。最后一個bit位(bit0)如果為0時表示寫入(input),如果為1時表示讀出(output)。命令字在傳輸的時候都是先傳輸低比特位(bit0)。
使能以及時鐘控制:
需要傳輸數據時,要設置使能引腳(CE)為高電平。
使能引腳(CE)的高低電平用來提供兩種功能。第一種:設置為高電平使能芯片,此時允許命令字節\地址序列去訪問DS1302內部的移位寄存器。第二種:CE信號提供一個用于終止數據傳輸(無論是單字節傳輸還是多字節傳輸)的功能。
SCLK時鐘線上的一個上升沿和后面緊跟著一個下降沿組成的一個方波構成了一個時鐘周期。處理器向DS1302寫入數據時,DS1302會在時鐘周期的上升沿時采集I/O(數據線)電平狀態。處理器從DS1302讀取數據時,DS1302會在時鐘周期的下降沿時設置I/O(數據線)電平狀態。如果CE(使能信號線)輸出低電平,所有的數據傳輸將會終止并且I/O(數據線)將會變成高阻態。下圖展示了單字節的讀寫時序圖。在剛上電時,CE(使能信號線)必須處于低電平狀態(低于2.0V)。還有就是在CE(使能信號線)從低電平變為高電平期間SCLK(串行時鐘信號線)必須保持低電平。
輸入數據 (write)
首先傳輸一個寫的命令字(bit0 為低電平)占用前8個時鐘周期,在緊隨其后的連續8個時鐘周期傳輸一個8比特位(一個字節)的數據,每一個比特位都是在SCLK(串行時鐘線)為上升沿時設置I/O(數據線)。如果不慎發生了額外的時鐘周期,這些額外的時鐘周期將會被忽略。數據的傳輸是先傳送每個字節的低bit位。
輸出數據(read)
首先傳輸一個讀的命令字(bit0 為高電平)占用前8個時鐘周期,在緊隨其后的連續8個時鐘周期傳輸一個8比特位(一個字節)的數據。需要注意的是,數據的第一個比特位(D0)輸出是在命令字的bit7所在周期的下降沿傳輸。如果不慎發生了額外的時鐘周期,這些額外的時鐘周期將會被忽略,此時CE(使能信號線)還是高電平。同時,I/O引腳在每個時鐘周期上升沿時為高阻態。數據的傳輸是先傳送每個字節的低bit位。
突發模式:
不管是時鐘/日歷寄存器還是RAM寄存器都可以使用突發模式進行訪問。需要把命令字的地址位(bit1 ~ bit5 )全部設置為1。設置命令字的bit6(指明操作的是時鐘/日歷寄存器還是RAM寄存器)。設置命令字的bit0(用于指明是讀還是寫)。訪問時鐘/日歷寄存器的時候在地址9~31的位置是沒有存儲介質的。還有在訪問RAM寄存器的時候在地址31的位置沒有存儲介質。在突發模式下無論是讀還是寫都是從0地址的bit0位開始的。
當在突發模式下寫時鐘\日歷寄存器時,前8個寄存器必須按照順序寫入數據。但是,在突發模式下寫RAM寄存器時,就沒必要把所有的31字節的寄存器全部寫入數據。傳輸的每一個字節都會被寫入到RAM寄存器中,不管是否傳輸了31個字節。
時鐘/日歷
讀相應的寄存器可以獲取時間和日期。表格3 說明了時間\日期寄存器。寫響應的寄存器可以用來設置時間和日期。用BCD碼的格式把時間/日期數據保存在響應的寄存器中。
在午夜凌晨的時候會遞增表示星期幾的寄存器。用戶可以自定義表示星期天的數值是多少,但是數值必須是連續的(例如:1表示星期天,那么2就表示星期一,3就表示星期二等等)。如果輸入了一些不符合邏輯的時間或者日期,會導致一些未定義的結果。
When reading or writing the time and date registers, secondary (user) buffers are used to prevent errors when the internal registers update. When reading the time and date registers, the user buffers are synchronized to the internal registers the rising edge of CE.
The countdown chain is reset whenever the seconds register is written. Write transfers occur on the falling edge of CE. To avoid rollover issues, once the countdown chain is reset, the remaining time and date registers must be written within 1 second.
DS1302可以運行在12小時制和24小時制兩種模式。小時寄存器的bit7位用于決定運行在12小時制還是24小時制模式,設置為1(高電平)時就是12小時制模式。當運行在12小時的模式時,bit5用來表示是上午還是下午(AM/PM),為1(高電平)時表示PM。當運行在24小時模式時,bit5用來表示第2個10小時(20-23小時)。當切換模式的時候(修改bit7)需要重新初始化小時寄存器。
時鐘停止標志:
秒寄存器的bit7位是時鐘終止標志位,當bit7設置為1時,時鐘振蕩器將會停止振蕩此時DS1302進入低功耗的待機模式,消耗電流小于100nA。當bit7設置為0時,時鐘將開始工作。設備剛上電時該位沒有定義。
寫保護位:
控制寄存器的bit7是寫保護位(WP)。前7個bit位(bit0 ~ bit6)都設置位0,如果讀控制寄存器的前7個bit位(bit0 ~ bit6),讀到的永遠是0。在寫時鐘/日歷或者RAM寄存器之前,控制寄存器的bit7必須是0。當寫保護位(WP)是1時,會防止對任何其他寄存器的寫操作。因此,如果想往設備寄存中寫數據就必須先將寫保護位(WP)清0。設備剛上電時該位沒有定義。
涓流充電寄存器:
該寄存器決定了DS1302的充電特性。
時鐘/日歷突發模式:
由時鐘/日歷命令字來指定突發模式操作。在這種模式下,8個時鐘/日歷寄存器可以被連續的讀出或者寫入。讀出或者寫入的其實位置是0地址的第0個bit位。
如果設置寫保護位為1時,在時鐘/日歷突發模式寫,8個時鐘/日歷寄存器沒有一個會發生變化(包括控制寄存器)。涓流充電器在突發模式下不可訪問。
在開始讀時鐘的時候,當前的時間被轉移到一個備用寄存器中。時間信息會從備用寄存器中讀出來,在這個過程中時鐘可能發生變化。這就消除了在時鐘寄存器更新時需要重新讀取時鐘寄存器的情況。
RAM:
靜態RAM大小為 31*8bits。在RAM地址空間中他們的地址是連續的。
RAM突發模式:
由RAM命令字來指定突發模式操作。在這種模式下,31個RAM寄存器可以被聯系的讀出或者寫入。讀出或者寫入的其實位置是0地址的第0個bit位。
寄存器概況:
表3展示了寄存器數據格式的概況。
晶振選擇:
在DS1302的X1,X2管腳上可以鏈接一個32,768kHz的晶振。
表3如下:
表4 如下: