本應(yīng)用筆記說明如何使用I2C I/O擴展器將CF卡連接到微控制器的I2C接口。解釋了用于讀取和寫入數(shù)據(jù)的軟件命令。MAX7311 I/O端口擴展器用于設(shè)計電路。
數(shù)據(jù)記錄通常需要大量內(nèi)存來存儲測量數(shù)據(jù),尤其是在監(jiān)控通道數(shù)量很大的情況下。更復(fù)雜的是,小型微控制器的內(nèi)部數(shù)據(jù)存儲器(RAM和EEPROM)有限,并且缺少地址和數(shù)據(jù)端口,這通常妨礙了外部存儲器的添加。圖1電路使用16位I2C I/O擴展器(U1,MAX7311)將緊湊型閃存(CF)卡連接到微控制器的I2C接口。I2C接口是一個合理的選擇,因為許多電路已經(jīng)使用它來連接外部ADC、DAC、實時時鐘和其他元件。
圖1.該電路采用16位I/O擴展器(MAX7311)將緊湊型閃存連接器連接到微控制器的I2C總線。
CF 卡以內(nèi)存映射模式通過 8 位寬的數(shù)據(jù)總線進行控制。MAX7311的端口1(I/O線0–7)連接到CF卡的數(shù)據(jù)總線;端口 2 連接到地址和控制信號。CF卡的數(shù)據(jù)寄存器可以使用端口1的輸入和輸出寄存器進行讀寫。端口 2 尋址正確的寄存器并生成讀寫信號。
要寫入特定寄存器,首先將數(shù)據(jù)寫入配置為輸出的端口 1。接下來,使用相同的數(shù)據(jù)連續(xù)三次寫入端口 2,WR 除外N通過從 1 到 0 切換到 1 來生成寫入信號的 PIN。地址位 A2–A0 指示要寫入的寄存器。CE 低,而 RDN為高啟用 CF 卡。類似的過程允許您從特定的寄存器讀取。端口 1 用作輸入端口,在三次寫入端口 2 后讀取,其中 RDNPIN 通過從 1 到 0 切換到 1 來生成讀取信號。三次寫入后,電路讀取端口 1 并使數(shù)據(jù)可用。這三個地址位允許您讀取、寫入和尋址八個內(nèi)部寄存器:
地址 | 注冊 | 地址 | 注冊 |
0x00 | 數(shù)據(jù) | 0x04 | 氣缸低 |
0x01 | 錯誤/功能 | 0x05 | 氣缸高 |
0x02 | 扇區(qū)計數(shù) | 0x06 | 選擇卡/頭 |
0x03 | 扇區(qū)編號 | 0x07 | 狀態(tài)/命令 |
寄存器0x00用于主機和CF卡之間的數(shù)據(jù)交換。寄存器0x03、0x04、0x05和0x06用于指定讀取或?qū)懭霐?shù)據(jù)的磁道。每個軌道包含 512 個數(shù)據(jù)字節(jié)。處理器通過寫入命令寄存器來指示讀/寫磁道和其他功能。您可以讀取狀態(tài)和錯誤寄存器以獲取狀態(tài)(忙、數(shù)據(jù)就緒等)和錯誤條件。
端口 2(I/O 10 和 11)上的兩個未使用的引腳可用于驅(qū)動顯示電路活動的 LED,或讀取指示處理器使用或不使用卡的跳線(由用戶設(shè)置)。如果第二個CF卡與第二個MAX7311連接,處理器可以從一個卡切換到下一個卡;用戶可以拔下卡并處理其上的數(shù)據(jù),而不會干擾數(shù)據(jù)記錄過程。使用特殊的 CF 連接器時,該卡可熱插拔。在這種情況下,MAX7311的中斷輸出應(yīng)連接到微控制器上的中斷輸入。因此,通過放置或移除跳線產(chǎn)生的中斷可用于觸發(fā)處理器切換到另一張卡。
軟件
兩個I2C功能使微控制器能夠讀寫。如果它具有硬件I2C接口,則功能可以非常簡單。首先,讀取和寫入MAX7311端口需要兩個功能:
Write_MAX7311(slv,prt,dat)此過程啟動I2C總線,將數(shù)據(jù)字節(jié)數(shù)據(jù)發(fā)送到MAX7311上具有從地址slv的PRT端口。
Read_MAX7311(SLV,PRT)此過程啟動I2C總線,從MAX7311端口prt讀取數(shù)據(jù)字節(jié),從地址為slv。
上述函數(shù)用于創(chuàng)建另外兩個函數(shù),它們讀取和寫入 CF 卡寄存器:
Write_CF_REG(注冊,dat)此過程使用 Write_MAX7311 將數(shù)據(jù) dat 放在端口 1 上。相同的過程用于將寄存器地址reg與其他控制信號一起放置在端口2上。寫入執(zhí)行三次(切換 WRN) 以生成寫入信號。
Read_CF_REG(注冊)此過程使用Write_MAX7311對CF卡寄存器進行尋址并生成讀取信號。然后,Read_MAX7311過程從寄存器讀取數(shù)據(jù)。
可用于讀取和寫入卡寄存器的函數(shù)現(xiàn)在可用于創(chuàng)建訪問 CF 卡扇區(qū)的函數(shù):
Write_CF(cyl,head,sec)此過程使用Write_CF_REG在寫入操作中指定目標(biāo)柱面、缸蓋和扇區(qū)(寄存器0x03到0x06)。然后,通過將0x30寫入命令寄存器來配置CF卡進行數(shù)據(jù)寫入。然后執(zhí)行 512 次Write_CF_REG,將數(shù)據(jù)(存儲在全局?jǐn)?shù)組中)寫入數(shù)據(jù)寄存器。CF 卡會自動將此數(shù)據(jù)添加到當(dāng)前軌道。
Read_CF(cyl,head,sec)此過程使用 Write_CF_REG 在讀取操作中指定目標(biāo)柱面、缸蓋和扇區(qū)。然后,通過將0x20寫入命令寄存器來配置CF卡進行數(shù)據(jù)讀取。然后執(zhí)行 512 次Read_CF_REG,通過數(shù)據(jù)寄存器從軌道讀取所有 512 個字節(jié),并將數(shù)據(jù)放入全局?jǐn)?shù)組中。
如果微控制器的內(nèi)部存儲器太小,無法存儲 512 字節(jié)的數(shù)據(jù),則可以從進行數(shù)據(jù)采集的環(huán)路中寫入扇區(qū)。也就是說,在接收到每個新的測量數(shù)據(jù)點后,其值可以直接寫入CF卡。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151423 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120365 -
I2C總線
+關(guān)注
關(guān)注
0文章
14瀏覽量
2131
發(fā)布評論請先 登錄
相關(guān)推薦
評論