通过MAX2990 I2C接口向标准EEPROM (24C04)连接的方法
引言
本文介绍了如何通过MAX2990电力线通信调制解调器的I2C接口与外部EEPROM 24C04连接,并给出了相应的固件例程。I²C总线受控于MAX2990 (主机),24C04 EEPROM为从机器件。以下框图给出了本文示例的硬件配置。
固件说明
I²C接口初始化
一旦使能I²C模块,SCL和SDA必须配置成漏极开路状态,以确保I²C总线通信正常。由于I²C是GPIO端口的一个替代功能,固件必须确保SCL和SDA输入在初始化期间禁止上拉(通过对端口控制器的输出位写零实现)。
示例中,时钟频率为250kHz。首先需要配置MAX2990的I²C接口:
PO1_bit.Bit2 功率电感= 0; // Disable电感器厂家s 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 f一体成型电感器requency
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接口写入以下字节:
- EEPROM的I²C总线地址(这里为0xA0)
- EEPROM存储器的地址
- 数据字节(地址将自动递增)
示例中试图写入以下字节,从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的数据时,为24C04留出足够的写时间非常关键。通常在“停止条件”后留出几个毫秒的时间,请参考数据资料,确认您的时间设置符合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 generat功率电感e 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现在,我们可以验证一下用于EEPROM读、写操作的功能。
i2c_init_write(void) i2c_init_read(void) i2c_write(UINT8 data) i2c_read(UINT8 *data) 平面变压器厂家 | 平面电感厂家
突发奇想:把充电宝的输入和输出端连接在一起会发哈哈哈,我突发奇想,如果把充电宝的输入端和输出端连接在一起,会发生什么?会发生短路吗?想到里面可能有电池保护电路,是不是会形成个反馈路径呢?猜测是不是充电宝电量会慢慢的自
为什么反激电源很少看见无损吸收电路?很多资料讲述反激电源的RCD吸收回路,包括计算。但是关于LCD无损吸收讲述的很少,这种电路在实际应用中少吗?是不实用还是成本因素?希望大家讨论讨论,如果有经验的前辈,可以给分享的
继电器抗冲击电流OJE-SH-112HM继电器过了UL认证,我在网上查了下,继电器应该过的是UL508,但是不知道到底可以抗多大冲击电流,有了解的吗,请告知一下此帖出自电源技术论坛
这个要去看继电器的