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

如何實(shí)現(xiàn)SDRAM存儲(chǔ)器并通過接口連接到高性能微控制器

小型RAM微控制器與SL API大量REST接口連接

MAX1169 ADC與PIC微控制器接口

MAX1169 ADC與PIC微控制器接口

將基于8051的微控制器連接到SCI端口

將MSP430? MCU與MMC或SD閃存卡連接

評(píng)論