日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linux下使用i2c RTC驅(qū)動(dòng)實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘 (linux i2c rtc驅(qū)動(dòng))

隨著現(xiàn)代計(jì)算機(jī)應(yīng)用的廣泛推廣,對(duì)于精準(zhǔn)時(shí)間的要求越來越高,特別是對(duì)于數(shù)據(jù)采集和處理要求極高的領(lǐng)域來說,如電力、醫(yī)療、金融等領(lǐng)域,對(duì)于時(shí)間的精準(zhǔn)要求尤為重要。而傳統(tǒng)計(jì)算機(jī)的實(shí)時(shí)時(shí)鐘 RTC 一直受到時(shí)間漂移和噪聲等方面的影響,容易出現(xiàn)時(shí)間誤差。

10年積累的做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有達(dá)拉特免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

為了解決以上問題,i2c RTC驅(qū)動(dòng)在Linux系統(tǒng)中得到了廣泛應(yīng)用。本文將介紹如何在Linux系統(tǒng)中使用i2c RTC驅(qū)動(dòng)實(shí)現(xiàn)高精度的實(shí)時(shí)時(shí)鐘。

一、硬件選型

在實(shí)現(xiàn)i2c RTC驅(qū)動(dòng)之前,我們需要了解一些硬件方面的選型,主要包括i2c RTC芯片和開發(fā)板的選擇。

1. i2c RTC芯片選型

市面上有很多名牌廠家生產(chǎn)的i2c RTC芯片,如TI、ST、NXP等。本文推薦使用Texas Instruments公司的DS1307芯片,該芯片廣泛應(yīng)用于高精度時(shí)鐘、定時(shí)器、鬧鐘等領(lǐng)域,具有精度高、可靠性好的優(yōu)點(diǎn),在Linux系統(tǒng)中也得到了廣泛認(rèn)可和應(yīng)用。

DS1307芯片的規(guī)格如下:

– 工作電壓:2.0V ~ 5.5V

– 負(fù)載容量:Up to 400pF

– 精度:±2ppm (–40°C to +85°C)

– 電池電流:400nA max

– i2c總線速率:100KHz/400KHz

2. 開發(fā)板選型

實(shí)現(xiàn)i2c RTC驅(qū)動(dòng)需要一個(gè)能夠集成i2c總線并支持Linux系統(tǒng)的開發(fā)板。我們推薦使用樹莓派公司的樹莓派開發(fā)板,由于樹莓派開發(fā)板的i2c總線已經(jīng)預(yù)先集成,擁有更好的兼容性和高效性。

二、軟件配置

1. 安裝i2c-tools

在Linux系統(tǒng)中,我們可以使用i2c-tools工具來操作i2c總線。在樹莓派系統(tǒng)中,可以通過以下命令安裝:

“`

sudo apt-get install i2c-tools

“`

2. 配置i2c總線

在樹莓派系統(tǒng)中,我們需要先啟用所需的i2c總線。在終端中輸入以下命令:

“`

sudo raspi-config

“`

選擇 `Interfacing Options`, 然后選擇 `P5 I2C`,啟用i2c總線。

3. 確認(rèn)設(shè)備地址

在Linux系統(tǒng)中,我們需要先確認(rèn)i2c設(shè)備的地址。在樹莓派系統(tǒng)中,可以通過以下命令查找i2c設(shè)備地址:

“`

sudo i2cdetect -y 1

“`

其中,1表示i2c總線的編號(hào)。

設(shè)備地址為0x68,表示此設(shè)備是我們所需的DS1307芯片。

4. 安裝RTC模塊

在樹莓派系統(tǒng)中安裝RTC模塊,需輸入以下命令:

“`

sudo modprobe rtc-ds1307

“`

啟動(dòng)rtc模塊:

“`

sudo hwclock -s

“`

5. 配置rtc設(shè)備

創(chuàng)建一個(gè) /etc/modules-load.d/rtc.conf 文件并寫入新加載的 rtc-ds1307 模塊名稱:

“`

rtc-ds1307

“`

編輯/etc/rc.local文件,在文件最后一行添加以下命令:

“`

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

“`

這些命令的目的是在樹莓派啟動(dòng)時(shí)加載RTC設(shè)備,確保我們的系統(tǒng)可以在啟動(dòng)時(shí)自動(dòng)識(shí)別RTC設(shè)備。

6. 校準(zhǔn)時(shí)間

在Linux系統(tǒng)中,我們需要使用hwclock命令校準(zhǔn)時(shí)間。在終端輸入以下命令:

“`

sudo hwclock –set –date=’2023-01-01 00:00:00′

“`

此命令將系統(tǒng)時(shí)間設(shè)置為2023年1月1日0時(shí)0分0秒。

7. 設(shè)置系統(tǒng)時(shí)間同步

在Linux系統(tǒng)中,我們可以使用ntpdate命令實(shí)現(xiàn)時(shí)間同步,從而保證系統(tǒng)時(shí)間與標(biāo)準(zhǔn)時(shí)間保持一致。在終端中輸入以下命令:

“`

sudo apt-get install ntpdate

“`

安裝成功后,使用以下命令進(jìn)行系統(tǒng)時(shí)間同步:

“`

sudo ntpdate time.windows.com

“`

以上命令會(huì)將系統(tǒng)時(shí)間同步為與time.windows.com相同的時(shí)間。

三、驗(yàn)證實(shí)時(shí)時(shí)鐘

完成以上操作后,我們需要驗(yàn)證實(shí)時(shí)時(shí)鐘確實(shí)起作用。我們可以通過以下命令查看系統(tǒng)時(shí)間:

“`

date

“`

在終端中輸入命令后,可以看到當(dāng)前時(shí)間和日期信息。

我們也可以通過以下命令查看RTC芯片中存儲(chǔ)的時(shí)間:

“`

sudo hwclock -r

“`

以上命令將從RTC芯片中讀取時(shí)間信息,輸出到終端中。

四、

通過以上步驟,我們可以在樹莓派開發(fā)板上使用i2c RTC驅(qū)動(dòng)實(shí)現(xiàn)高精度的實(shí)時(shí)時(shí)鐘。在使用過程中,需要特別注意硬件選型和軟件配置等方面。當(dāng)然,實(shí)時(shí)時(shí)鐘的精度不僅受硬件和軟件的影響,而且還受環(huán)境和噪聲等因素的影響,因此,在應(yīng)用過程中還需根據(jù)實(shí)際情況進(jìn)行精細(xì)調(diào)整和優(yōu)化。

相關(guān)問題拓展閱讀:

  • linux下S3C2440更改硬件時(shí)間芯片自己保存不了,改了重啟還是以前的,使用的默認(rèn)u口也改不了總是ttyu0
  • linux/rtc.h 有什么用?急急急??!請(qǐng)高手指點(diǎn)迷津??!

linux下S3C2440更改硬件時(shí)間芯片自己保存不了,改了重啟還是以前的,使用的默認(rèn)u口也改不了總是ttyu0

如果你在命令沒有修改到硬件時(shí)間, 那說明你的命令沒有成功操作到時(shí)鐘芯片, 你可以看一下目標(biāo)版的時(shí)鐘芯片是哪個(gè)型號(hào)的, 找到對(duì)應(yīng)的datasheet, 看看該芯片采用什么總線接口連接你的s3c2440, 一般時(shí)鐘芯片都用i2c接口, 那么你可以仿照i2c總線規(guī)范寫一個(gè)操作i2c從設(shè)備寄存器的程序, 直接對(duì)時(shí)鐘芯片的寄存器, 比如分鐘, 小時(shí), 秒,星期,月, 年等寄存器做修改, 這樣硬件時(shí)間就會(huì)改變了.這是一個(gè)可以通用的方法.

至于ttyUSB0, 這個(gè)一般是修改不了的, 因?yàn)楫?dāng)只嫌嘩有一個(gè)USB設(shè)備連接到你的系統(tǒng)時(shí), linux默認(rèn)是將其標(biāo)記為ttyUSB0的.

你第二個(gè)問題是一個(gè)正常的現(xiàn)象.

之一個(gè)問題你可以這樣驗(yàn)證一下:

先用date命令修改一下系統(tǒng)時(shí)間, 比如date -s “:30:00”

之后用hwclock -w 將系統(tǒng)時(shí)間同步為硬件時(shí)間,

如果成功后應(yīng)該沒有錯(cuò)誤信息報(bào)錯(cuò).

之后再用hwclock -r 讀取硬件時(shí)間, 如果為剛剛你設(shè)定的時(shí)間的話, 那么說明你的時(shí)鐘芯片及驅(qū)動(dòng)沒有問題, 而可能是的操作不對(duì).

如果你在使用hwclock 時(shí)候, 有這樣的報(bào)錯(cuò):

root@juson:~# hwclock -w

hwclock: open() of /dev/rtc failed, errno=2: No such file or directory.

這是因?yàn)?hwclock 默認(rèn)打開/dev/rtc 這個(gè)文件, 但是你的linux可能將時(shí)鐘芯片掛載/dev/rtc0 上,

這樣可以:

ln -s /dev/rtc0 /dev/rtc

之后的操作就因該沒問題了, 你看下我的記錄:

//修改系統(tǒng)時(shí)間

root@juson:~# date -s “:30:00”

Sun Apr 28 10:30:00 CST 2023

root@juson:~#

//同步為硬件時(shí)間

root@juson:~# hwclock -w

hwclock: open() of /dev/rtc failed, errno=2: No such file or directory.

//使用ln 解罩者或決這個(gè)物伍問題

root@juson:~# ln -s /dev/rtc0 /dev/rtc

root@juson:~#

//再次同步就ok了

root@juson:~# hwclock -w

root@juson:~#

//獲取硬件時(shí)間

root@juson:~# hwclock -r

Sun Apr 28 10:36:.seconds

以上就成功地修改了硬件時(shí)間.

linux/rtc.h 有什么用?急急急??!請(qǐng)高手指點(diǎn)迷津?。?/h3>

Linux內(nèi)核缺早對(duì)RTC的編程MC146818RTC芯片(或其他兼容芯片,如DS12887)可以在IRQ8上產(chǎn)生周期性的中斷,中斷的頻率在2HZ~8192HZ之蘆扮拿間。與MC146818RTC對(duì)應(yīng)的設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn)在include/linux/rtc.h和drivers/char/rtc.c文件中,對(duì)應(yīng)的設(shè)備文件是/dev/rtc(major=10,minor=135,只讀字符設(shè)備)。因此用戶進(jìn)程可以通過對(duì)她進(jìn)行編程以使得當(dāng)RTC到達(dá)某個(gè)特定的時(shí)間值時(shí)激活I(lǐng)RQ8線,從而將RTC當(dāng)作一個(gè)鬧鐘來用。而Linux內(nèi)核對(duì)RTC的唯一用途就是把RTC用作“離線”或“后臺(tái)”的時(shí)間與日期維護(hù)器。當(dāng)Linux內(nèi)核啟動(dòng)時(shí),它從RTC中讀取時(shí)間與日期的基準(zhǔn)值。然后再運(yùn)行期間內(nèi)核就完全拋開RTC,從而以軟件的形式維護(hù)系統(tǒng)的當(dāng)前時(shí)間與日期,并在需要時(shí)將時(shí)間回寫到RTC芯片中。Linux在include/linux/mc146818rtc.h和include/a-i386/mc146818rtc.h頭文件中分別定義了mc146818RTC芯片陪搭各寄存器的含義以及RTC芯片在i386平臺(tái)上的I/O端口操作。而通用的RTC接口則聲明在include/linux/rtc.h頭文件中。7.2.1RTC芯片的I/O端口操作Linux在include/a-i386/mc146818rtc.h頭文件中定義了RTC芯片的I/O端口操作。端口0x70被稱為“RTC端口0”,端口0x71被稱為“RTC端口1”,如下所示:

#ifndefRTC_PORT#defineRTC_PORT(x)(0x70 (x))#defineRTC_ALWAYS_BCD1/*RTCoperatesinbinarymode*/#endif 顯然,RTC_PORT(0)就是指端口0x70,RTC_PORT(1)就是指I/O端口0x71。端口0x70被用作RTC芯片內(nèi)部寄存器的地址索引端口,而端口0x71則被用作RTC芯片內(nèi)部寄存器的數(shù)據(jù)端口。再讀寫一個(gè)RTC寄存器之前,必須先把該寄存器在RTC芯片內(nèi)部的地址索引值寫到端口0x70中。根據(jù)這一點(diǎn),讀寫一個(gè)RTC寄存器的宏定義CMOS_READ()和CMOS_WRITE()如下:

#defineCMOS_READ(addr)({\outb_p((addr),RTC_PORT(0));\inb_p(RTC_PORT(1));\})#defineCMOS_WRITE(val,addr)({\outb_p((addr),RTC_PORT(0));\outb_p((val),RTC_PORT(1));\})#defineRTC_IRQ8 在上述宏定義中,參數(shù)addr是RTC寄存器在芯片內(nèi)部的地址值,取值范圍是0x00~0x3F,參數(shù)val是待寫入寄存器的值。宏RTC_IRQ是指RTC芯片所連接的中斷請(qǐng)求輸入線號(hào),通常是8

關(guān)于linux i2c rtc驅(qū)動(dòng)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營(yíng)銷推廣服務(wù)眾多企業(yè)。電話:028-86922220


網(wǎng)站欄目:Linux下使用i2c RTC驅(qū)動(dòng)實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘 (linux i2c rtc驅(qū)動(dòng))
標(biāo)題來源:http://m.5511xx.com/article/djeshoj.html