采用LPC1752读取AT24C08C的原理与实现方案

发布时间:2023-02-08  

1 简介

1.1 LPC1752及AT24C08C简介

LPC1752是NXP推出的一款Cortex M3的芯片,最高运行频率可达80M


AT24C08C是Atmel的一款I2C串行EEPROM,代替原来的型号AT24C08B及AT24C08A。共有8K(1024*8 bit)、1024字节的存储单元。可进行1百万次的写操作,数据可保存100年。


1.2 连接方式

AT24C08C是通过LPC1752的I2C2连接的,连接图如下:

图1 LPC1752连接图

1.3 AT24C08C设备地址

The 8K EEPROM only uses the A2 device address bit with the next twobits (P1, P0) being for memory page addressing. The A2 bit must compare to itscorresponding hardwired input pin. The A1 and A0 pins are not connected.

根据连接图可得知AT24C08的地址为0xA0。

图2 AT24C08CDevice Address

1.4 I2C运行时钟频率

主机模式下必须通过对I2SCLH和I2SCLL寄存器进行设置来选择合适的总线速率和占空比。I2SCLH定义SCL高电平所保持的PCLK_I2C周期数,I2SCLL定义SCL低电平的PCLK_I2C周期数。位频率由下面的公式得出(PCLK_I2C是外围总线APB的频率):

选用的I2SCLL和I2SCLH值必须确保得出的总线速率在I2C总线速率的范围之内。I2SCLL和I2SLH的值都必须大于或等于4。表1给出了根据PCLK_I2C频率和I2SCLL和I2SCLH值计算出来的I2C总线速率的示例。

表1 I2C时钟速率的实例

2 函数介绍

2.1 初始化函数i2c2_init

按照LPC1752用户手册(UM10360)中第三章的介绍进行初始化,步骤如下:

a)。 电源:在寄存器PCONP中置位PCI2C2。

b)。 时钟:在寄存器PCLK_SEL1中选择PCLK_I2C2。

c)。 引脚: 通过寄存器PINSEL0使能I2C2引脚。通过寄存器PINMODE来配置I2C2引脚模式。

d)。 时钟频率:向I2SCLH和I2SCLH寄存器加载频率值来定义串行时钟频率(主机模式)。

e)。 中断:在NVIC中置位I2C2_IRQn寄存器使能I2C2中断。

f)。 向寄存器I2CONSET写入0x40来置位I2EN位。

2.2 中断函数I2C2_IRQHandler

通过读取I2STAT寄存器的值判断I2C总线上的状态,并进行下一步操作。

中断函数只处理了主机接收模式与主机发送模式。

1)I2C进入主机进入发送起始条件时,串行中断标志(SI)置位,状态寄存器(I2STAT)中的状态代码为0x08。此时将从机地址和数据方向位(SLA+W)装入I2DAT,同时复位I2CON的STA,STO和SI。

2.3 I2C总线进入开始状态i2c2_start

可通过置位STA位进入主机发送模式。一旦总线空闲,I2C逻辑会马上测试I2C总线并产生一个起始条件。

2.4 I2C停止函数i2c2_stop:

I2C结束时发送停止条件并释放总线。

a)向I2CONSET写入0x14来置位STO和AA位;

b)向I2CONCLR写入0x08来清除SI标志;

2.5主机发送函数i2c2_write

启动主机发送功能,向从机发送数据,通过建立缓冲区、指针和数据计数然后发启起始条件便可执行主发送操作。

a)初始化主机数据计数器;

b)建立数据将被发送到的从机地址,并且添加写位;

c)向I2CONSET写入0x20来置位STA位;

d)在主发送缓冲区内建立要发送的数据;

e)初始化主机数据计数器来匹配正在发送的信息长度;

f)退出。

2.6主机接收函数 i2c2_read

启动主机接收功能,接收从机发出的数据。

通过建立缓冲区、指针和数据计数然后发启起始条件便可执行主接收操作。

a)初始化主机数据计数器;

b)建立数据将被发送到的从机地址,并且添加读位;

c)向I2CONSET写入0x20来置位STA位;

d)在主接收缓冲区内建立要发送的数据;

e)初始化主机数据计数器来匹配正在发送的信息长度;

f)退出。

3 测试

通过向0x00地址写入并回读固定数据验证有效性。

测试结果比较

第一次读取

第二次读取

经验证可以正常使用。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    输出结构因具有更好的抗干扰性而广泛存在,但是后级MCU的ADC一般为单端输入,所以常规做法是在靠近MCU内置ADC输入的位置,加上一个单端转差分的运放。那么经常会产生疑问,能不能不额外加这个运放,直接将隔离运放的差分......
    ADA4950-2数据手册和产品信息;ADA4950-1/ADA4950-2是ADA4932-1/ADA4932-2的可选增益版本,内置片内反馈和增益电阻,非常适合用作驱动高性能ADC的单端转差分或差分转差分......
    ADA4932-1数据手册和产品信息;ADA4932-1/ADA4932-2是AD8132的新一代产品,具有更高的性能、更低的噪声和功耗。它们非常适合用作驱动高性能ADC的单端转差分或差分转差分......
    输入和输出的架构,优异的直流精度、高共模噪声抑制能力和改善总谐波失真等优点,特别适合应用于驱动差分输入的高性能模数转换器,如下图所示。 ZJA3100 单端转差分驱动18b SAR ADC......
    差分运放电路计算;不知道大家有没遇到这种情况,在计算电路的时候,有时候会突然的忘记一些公式啊啥的,需要回去翻看笔记或者查资料,知其然而不知其所以然。今天跟大家一起来一起推导一遍差分运放......
    性能没有得到优化。 图2.单端转差分电路 更好的方法是将两个运算放大器配置成差分方式,类似于基本差分放大器,其中U1和U2共享反馈和增益电阻,增益Av = (RG + 2RF)/RG(见图......
    可以在GLa1311后增加一级运放,将差分模拟信号转换为单端模拟信号,典型电路如下所示,在该电路中可以通过VCMADC为单端信号提供参考电平。 GLa1311后级差分转单端输出原理图 上述方案虽然可以解决单端......
    输出电压为什么要偏移?差分电路原理解析; 差分运算放大电路,对共模信号得到有效抑制,而只对差分信号进行放大,因而......
    不可突变则电压为0,运放-输入端得到的分压为正最大峰值,于是Uo为运放的负最大峰值,随着电容充满电,U0逐渐变为0。 图12:微分运算电路-充电 放电过程的电容C1可等效成一个电压源,且电......
    的差模(DM)信号可以被频带限制,而不需要的DM噪声被滤除掉。图1显示了通过寄生电容(CP)耦合到输入信号中的DM噪声。组合信号和噪声由一阶有源低通滤波器接收。差分运放电路......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>