0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

454398 来源:一板网 作者:admin 2020-10-24 11:18 次阅读

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地址写入并回读固定数据验证有效性。

测试结果比较

第一次读取

第二次读取

经验证可以正常使用。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119977
  • 存储单元
    +关注

    关注

    1

    文章

    62

    浏览量

    16142
  • EEPROM
    +关注

    关注

    9

    文章

    1010

    浏览量

    81395
  • Cortex M3
    +关注

    关注

    0

    文章

    7

    浏览量

    8539
  • LPC1752
    +关注

    关注

    0

    文章

    4

    浏览量

    3471
收藏 人收藏

    评论

    相关推荐

    SSS1700C1鑫创USB麦克风芯片/24BIT 192K声卡芯片方案

    . SSS1700C1C1优化问题点:快速拔插不识别问题,打静电24bit 96Khz偶有失效,监听音量可独立调节 SSS1700C1功能支持192 KHz 24位采样率和外部音频编(
    发表于 11-14 10:06

    Type-C转DP线方案

    Type-C转DP线以其灵活便捷的高清视频输出解决方案,满足了现代数字生活对高效能和高清晰度的需求。通过利用Type-C接口的Alt Mode功能,Type-C转DP线
    的头像 发表于 11-11 10:42 244次阅读
    Type-<b class='flag-5'>C</b>转DP线<b class='flag-5'>方案</b>

    COFDM调制解调器的实时实现 采用TMS320C31 DSP的高频通道

    电子发烧友网站提供《COFDM调制解调器的实时实现 采用TMS320C31 DSP的高频通道.pdf》资料免费下载
    发表于 10-28 10:21 0次下载
    COFDM调制解调器的实时<b class='flag-5'>实现</b> <b class='flag-5'>采用</b>TMS320<b class='flag-5'>C</b>31 DSP的高频通道

    TMS320C24x/C240x CAN的编程示例

    电子发烧友网站提供《TMS320C24x/C240x CAN的编程示例.pdf》资料免费下载
    发表于 10-17 09:30 0次下载
    TMS320<b class='flag-5'>C24</b>x/<b class='flag-5'>C</b>240x CAN的编程示例

    在TMS320C6455/C6454上实现DDR2 PCB布局

    电子发烧友网站提供《在TMS320C6455/C6454上实现DDR2 PCB布局.pdf》资料免费下载
    发表于 10-16 11:24 0次下载
    在TMS320<b class='flag-5'>C</b>6455/<b class='flag-5'>C</b>6454上<b class='flag-5'>实现</b>DDR2 PCB布局

    C加密算法的实现

    电子发烧友网站提供《C加密算法的实现.pdf》资料免费下载
    发表于 09-20 11:10 1次下载
    <b class='flag-5'>C</b>加密算法的<b class='flag-5'>实现</b>

    英锐芯IDCHIP AD24C16(中性)

    AD24C16是一款串行电可擦除编程只读存储器(EEPROM)。存储器可存储2048个字节数据,分为128页 每页16字节,随机字寻址需要11位数据字地址,具有低功耗CMOS技术,自定时编程周期
    发表于 09-09 15:12 0次下载

    英锐芯AD24C02_16-Byte(中性)

    AD24C02是一款串行电可擦除编程只读存储器(EEPROM)。存储器可存储256个字节数据,分为16页 每页16字节,随机字寻址需要8位数据字地址,具有低功耗CMOS技术,自定时编程周期
    发表于 09-09 15:08 0次下载

    探索存储新未来:为何EVASH EV24C256A EEPROM成为市场新宠

    探索存储新未来:为何EVASH EV24C256A EEPROM成为市场新宠
    的头像 发表于 09-05 15:31 266次阅读

    如何关闭phy_version: 1163.0, 665d56c, Jun 24 2020, 10:00:08, RTOS new的发送?

    phy_version: 1163.0, 665d56c, Jun 24 2020, 10:00:08, RTOS new这个无法找到关闭的地方,也无法在SDK中找到源码,只在libphy.a里找到一个phy_version_p
    发表于 07-09 08:01

    玩转STM32和EV24C MCU + EEPROM ST + EVASH

    简介 本指南旨在帮助您轻松上手使用STM32微控制器和EVASH的EV24C系列EEPROM芯片。通过本教程,您将学习如何在实际项目中使用这些组件,逐步掌握从基本到高级的操作技巧。 必备材料
    的头像 发表于 07-01 09:58 425次阅读

    stm32F103使用CubeMX FreeRTOS通过其配置访问24C16,读取时会陷入死循环的原因?

    我是stm32F103,使用CubeMX FreeRTOS,通过其配置访问24C16,碰到一个非常奇怪的问题: 原生cubeMX生成的代码,在同样一批板子上,有大概10%,在代码第一次读取24C
    发表于 04-29 06:51

    使用Arduino I2C配置CY8C9560A-24AXI gpio,GPIO0的所有位配置为低位时会报错的原因?

    你好团队,我正在尝试使用 Arduino I2C 配置 CY8C9560A-24AXI gpio。将 GPIO0 的所有位配置为低位时会遇到问题。Wire.beginTransmission
    发表于 03-05 06:07

    24C02/04/08/16/32/64应用介绍

    电子发烧友网站提供《24C02/04/08/16/32/64应用介绍.pdf》资料免费下载
    发表于 12-07 10:38 2次下载

    c语言gets函数可以输入数字吗

    C语言中的gets函数是用来读取字符串的,而不是用来读取数字的。它会读取输入的字符直到遇到换行符或者文件结束符。因此,如果你尝试使用gets函数来
    的头像 发表于 11-24 10:00 1438次阅读