《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 如何通過MAX2990 I2C接口向標(biāo)準(zhǔn)EEPROM (24C04)連接
如何通過MAX2990 I2C接口向標(biāo)準(zhǔn)EEPROM (24C04)連接
摘要: 本文介紹了如何通過MAX2990電力線通信調(diào)制解調(diào)器的I2C接口與外部EEPROM24C04連接,并給出了相應(yīng)的固件例程。I²C總線受控于MAX2990(主機(jī)),24C04EEPROM為從機(jī)器件。以下框圖給出了本文示例的硬件配置。
Abstract:
Key words :

  引言

  本文介紹了如何通過MAX2990電力線通信調(diào)制解調(diào)器的I2C接口與外部EEPROM 24C04連接,并給出了相應(yīng)的固件例程。I²C總線受控于MAX2990 (主機(jī)),24C04 EEPROM為從機(jī)器件。以下框圖給出了本文示例的硬件配置。

  

硬件配置 www.elecfans.com

 

  固件說明

  I²C接口初始化

  一旦使能I²C模塊,SCL和SDA必須配置成漏極開路狀態(tài),以確保I²C總線通信正常。由于I²C是GPIO端口的一個替代功能,固件必須確保SCL和SDA輸入在初始化期間禁止上拉(通過對端口控制器的輸出位寫零實(shí)現(xiàn))。

示例中,時鐘頻率為250kHz。首先需要配置MAX2990的I²C接口:

PO1_bit.Bit2 = 0; 		// Disables the GPIO function of the
PO1_bit.Bit3 = 0; 		// I2C pins

I2CCN_bit.I2CEN = 0; 	// Makes sure that I2C is disabled
			// to allow the changing of the I2C settings

I2CCN_bit.I2CMST = 1; 		// Sets the I2C engine to master mode
I2CCN_bit.I2CEA = 0; 		// 7-bit address mode
I2CCK_bit.I2CCKL = 0x40; 	// 2µs CLK-low, to define I2C frequency
I2CCK_bit.I2CCKH = 0x40; 	// 2µs CLK-high, to define I2C frequency

I2CTO = 200; 		// I2C_TIMEOUT
I2CST = 0x400; 		// Resets I2C status register

I2CCN_bit.I2CEN = 1; 		// Enables the I2C engine

寫模式

寫入24C04 EEPROM時,必須通過I²C接口寫入以下字節(jié):

  1. EEPROM的I²C總線地址(這里為0xA0)
  2. EEPROM存儲器的地址
  3. 數(shù)據(jù)字節(jié)(地址將自動遞增)

示例中試圖寫入以下字節(jié),從0x00地址開始,向EEPROM寫入:0x12、0x34、0x56、0x78和0x90。

i2c_init_write(); 	// Sets the MAX2990 I2C Engine into write mode
i2c_write(0x50); 	// 24C04 write (adr = 0b1010 000 0) = 0xA0
		// The MAX2990 I2C engine shifts the I2C address by
			// 1 bit, because it will generate the R/W bit
			// automatically

i2c_write(0x00); 	// word address location
i2c_write(0x12); 	// data1
i2c_write(0x34); 	// data2
i2c_write(0x56); 	// data3
i2c_write(0x78); 	// data4
i2c_write(0x90); 	// data5
I2C_STOP; 		// Sends I2C stop-condition

讀模式

讀取我們寫入EEPROM的數(shù)據(jù)時,為24C04留出足夠的寫時間非常關(guān)鍵。通常在“停止條件”后留出幾個毫秒的時間,請參考數(shù)據(jù)資料,確認(rèn)您的時間設(shè)置符合IC的要求。

i2c_init_write(); 	// Sets the MAX2990 I2C engine into write mode
i2c_write(0x50); 	// 24C04 write (adr = 0b1010 000 0) = 0xA0
		// The MAX2990 I2C engine shifts the I2C address by
			// 1 bit, because it will generate the R/W bit
			// automatically

i2c_write(0x00); 	// word address location

i2c_init_read(); 	// Sets the MAX2990 I2C engine into read mode

i2c_write(0x50); 	// 24C04 read (adr = 0b1010 000 1) = 0xA1
		// The MAX2990 I2C engine shifts the I2C address by
			// 1 bit, because it will generate the R/W bit
			// automatically

unsigned char data[5]; 	// Array to store the received data
i2c_read(data[0]); // Reads 1 byte from I2C and writes it to the array
i2c_read(data[1]); // Reads 1 byte from I2C and writes it to the array
i2c_read(data[2]); // Reads 1 byte from I2C and writes it to the array
i2c_read(data[3]); // Reads 1 byte from I2C and writes it to the array
i2c_read(data[4]); // Reads 1 byte from I2C and writes it to the array
I2C_STOP; 		// Sends I2C stop-condition

現(xiàn)在,我們可以驗(yàn)證一下用于EEPROM讀、寫操作的功能。

i2c_init_write(void)
i2c_init_read(void)
i2c_write(UINT8 data)
i2c_read(UINT8 *data)

 

void i2c_init_write(void)
{
I2CCN_bit.I2CMODE = 0; // I2C transmit mode
I2CCN_bit.I2CACK = 1; // Creates I2C NACK so that slave can create ACK
I2C_START; 		// Generates I2C START condition
while( I2CCN_bit.I2CSTART == 1 ); 	// Waits until the START condition
				// was put to the I2C bus
I2CST_bit.I2CSRI = 0; 		// Resets the I2C interrupt flag
}

int i2c_init_read(void)
{
I2CCN_bit.I2CMODE = 1; 	// I2C read-mode
I2CCN_bit.I2CACK = 0; 	// Creates I2C ACK after receive
I2C_START; 		// Generates I2C START condition

while( I2CCN_bit.I2CSTART == 1 ); 	// Waits until the START condition
I2CST_bit.I2CSRI = 0; 		// Resets the I2C interrupt flag
}

void i2c_write(UINT8 data)
{
I2CBUF = data; 			// Puts the data on the I2C bus
while( I2CST_bit.I2CTXI == 0 ); 	// Waits for transfer complete
I2CST_bit.I2CTXI = 0; 		// Resets the I2C transmit complete
				// interrupt flag
}

void i2c_read(UINT8 *data)
{
I2CBUF = 0xff; 	// Puts "all ones" on the I2C bus so that slave can pull
		// the bus down to generate zeros

while( !I2CST_bit.I2CRXI ); 		// Waits for receive complete
I2CST_bit.I2CRXI=0; 		// Resets the I2C receive complete
					// interrupt flag

*data = I2CBUF; 			// Writes the data to the pointer
}
此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美精品精品一区| 国产欧美一二三区| 久久久91精品国产| 亚洲欧美日韩精品在线| 9色国产精品| 欧美激情小视频| 久久久精品久久久久| 先锋亚洲精品| 午夜精品福利一区二区蜜股av| 国产精品99久久久久久久女警 | 亚洲字幕在线观看| 在线亚洲高清视频| 一区电影在线观看| 亚洲午夜一区二区| 亚洲一区二区视频在线观看| 亚洲一级在线| 午夜精品久久一牛影视| 午夜伦欧美伦电影理论片| 亚洲女人av| 欧美一区综合| 亚洲国产欧美日韩| 日韩午夜精品| 亚洲视频欧洲视频| 亚洲欧美日本精品| 欧美在线亚洲一区| 麻豆免费精品视频| 欧美伦理91i| 国产精品二区影院| 国产欧美精品日韩| 国产综合激情| 亚洲激情一区二区三区| 99精品热视频| 亚洲综合日韩中文字幕v在线| 午夜视频久久久久久| 亚洲国产高清自拍| 一本色道久久综合亚洲精品按摩| 亚洲资源在线观看| 欧美一区二区三区免费看| 久久久欧美一区二区| 欧美激情无毛| 国产精品第2页| 国产午夜精品福利| 亚洲国产乱码最新视频| 一本一本久久a久久精品综合妖精| 亚洲手机成人高清视频| 欧美一区深夜视频| 最新高清无码专区| 亚洲午夜免费福利视频| 久久精品99无色码中文字幕| 欧美成人精品影院| 国产精品久久久久一区二区| 国产一区二区三区av电影| 亚洲国产欧洲综合997久久| 在线视频亚洲一区| 久久激情五月激情| 一区二区三区久久久| 久久成人av少妇免费| 欧美电影免费网站| 国产精品捆绑调教| 一区二区亚洲| 一区二区日韩免费看| 久久激情五月激情| 亚洲图片欧美午夜| 久久人人看视频| 欧美午夜激情视频| 狠狠色丁香久久婷婷综合_中| 日韩午夜av在线| 久久精品欧洲| 午夜精品久久久久久久男人的天堂 | 欧美制服第一页| 欧美久久久久久久久| 国产日韩欧美一区二区三区在线观看 | 欧美日韩一区免费| 尹人成人综合网| 亚洲一区综合| 99精品福利视频| 久久久久久久久久看片| 欧美色图五月天| 在线观看一区二区精品视频| 亚洲欧美日韩国产精品 | 免费黄网站欧美| 国产精品一区二区久久精品| 亚洲欧洲一区二区三区| 久久国产精品久久国产精品| 亚洲专区在线| 欧美精品一区二区三区久久久竹菊 | 久久成人国产| 国产精品你懂得| 亚洲肉体裸体xxxx137| 久久精品夜夜夜夜久久| 欧美一区二区三区在| 欧美系列一区| 亚洲日韩视频| 亚洲国产日韩欧美综合久久| 久久爱www久久做| 国产精品亚洲网站| 亚洲无毛电影| 一区二区三区日韩精品视频| 欧美成人免费在线视频| 精品电影一区| 久久国产主播| 久久免费高清视频| 国产日本欧洲亚洲| 亚洲一线二线三线久久久| 亚洲系列中文字幕| 欧美精品日韩综合在线| 亚洲国产精彩中文乱码av在线播放| 欧美一区二区三区免费观看视频| 亚洲欧美日韩综合aⅴ视频| 欧美视频免费在线| 亚洲美女诱惑| 一区二区国产精品| 欧美日韩成人一区二区| 亚洲人成高清| 99精品欧美一区| 欧美精品一区二区三| 亚洲日本电影在线| 99精品视频免费| 欧美黄色aaaa| 亚洲日本免费电影| 亚洲三级视频| 欧美激情综合色综合啪啪| 最近中文字幕日韩精品| 一本色道久久88综合日韩精品| 欧美精品激情在线| 日韩写真在线| 亚洲欧美综合| 国产精品网站在线播放| 亚洲欧美日韩网| 久久噜噜亚洲综合| 亚洲国产高清一区二区三区| 99国产精品久久久| 欧美日韩亚洲精品内裤| 在线一区二区三区四区| 亚洲免费在线| 国产麻豆综合| 亚洲第一精品在线| 欧美1区2区3区| 日韩小视频在线观看| 亚洲综合欧美日韩| 国产一区二区精品| 亚洲激情视频在线播放| 欧美精品福利在线| 亚洲一级二级在线| 久久久久久穴| 亚洲激情一区二区| 亚洲综合电影| 国产一区二区欧美日韩| 亚洲精品乱码久久久久| 欧美日韩一卡| 午夜精品免费视频| 老司机精品视频一区二区三区| 亚洲精品免费一二三区| 亚洲欧美中文另类| 一区二区亚洲| 亚洲夜晚福利在线观看| 国产精品美女久久久免费| 久久国产精品99国产精| 欧美日韩hd| 午夜宅男久久久| 欧美大片va欧美在线播放| 一本色道久久综合狠狠躁篇怎么玩| 欧美专区日韩专区| 亚洲国产你懂的| 性做久久久久久久免费看| 在线观看中文字幕亚洲| 亚洲无线一线二线三线区别av| 国产视频观看一区| 日韩亚洲综合在线| 国产午夜精品久久久久久久| 亚洲美女av黄| 国产亚洲精品激情久久| 夜夜嗨av一区二区三区免费区| 国产精品美女一区二区在线观看| 亚洲国产一区二区三区在线播| 国产精品成人在线| 亚洲国产精品va在线看黑人动漫 | 国产日产欧产精品推荐色| 亚洲欧洲一区二区天堂久久| 欧美性淫爽ww久久久久无| 久久激情综合网| 国产精品大片wwwwww| 亚洲激情欧美| 国产精品一区二区三区四区五区| 亚洲毛片在线观看.| 国产亚洲一区二区精品| 一区二区三区 在线观看视频| 国产亚洲第一区| 亚洲图片欧美午夜| 亚洲福利在线观看| 欧美一区二区三区久久精品| 亚洲精品美女久久久久| 久久亚洲欧美| 亚洲欧美日韩国产成人| 欧美日韩天天操| 亚洲卡通欧美制服中文| 国产专区综合网| 午夜一区二区三区在线观看| 亚洲巨乳在线| 美女主播视频一区|