当前位置: 首页 > article >正文

BearPi Std 板从入门到放弃 - 后天篇(2)(I2C1读写EEPROM)

简介

基于 BearPi Std 板从入门到放弃 - 后天篇(1)(I2C1 读取 光照强度), 使用同一个I2C接口访问EEPROM, 同时读取光照亮度
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出即可 \ 高电平点亮
串口: Usart1
I2C : I2C1
光照强度传感器:BH1750
EEPROM芯片 : AT24C02

芯片说明

  1. BearPi 自带的扩展版 E53_SC1_智慧路灯的原理图
    在这里插入图片描述

  2. AT2402C 基本描述, 2Kbit, 32Page, 每个Page 1 Byte, 所以地址是0~255

  3. AT2402C 的 设备地址规则
    在这里插入图片描述

  4. 结论
    a. 结合 原理图,
    A0 = 1; A1 = 0; A2 =0;
    写的地址 = 10100010 = 0xA2
    读的地址 = 10100011 = 0xA3

b. 2Kbit, 32Page, 每个Page 1 Byte, 所以地址是0~255

步骤

  1. 基于前面文章, 创建工程
  2. 添加读写代码
#define AT24C02_WRITE_ADDRESS 0xA2
#define AT24C02_READ_ADDRESS 0xA3

/* 写单个字节 */
uint8_t AT24C02_Write_Byte(uint16_t addr, uint8_t *dat)
{
	return HAL_I2C_Mem_Write(&hi2c1, AT24C02_WRITE_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, dat, 1, 0xffff);
}
/* 读取单个字节 */
uint8_t AT24C02_Read_Byte(uint16_t addr, uint8_t *buf)
{
	return HAL_I2C_Mem_Read(&hi2c1, AT24C02_READ_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, buf, 1, 0xffff);
}

/* 读多个字节 */
uint8_t AT24C02_Read_Bytes(uint16_t addr, uint8_t *buf, uint16_t bufSize)
{
	return HAL_I2C_Mem_Read(&hi2c1, AT24C02_READ_ADDRESS, addr, I2C_MEMADD_SIZE_8BIT, buf, bufSize, 0xffff);
}

int main()
{
	...
	uint8_t res = 0;
	uint8_t datTemp = 0;
	/* 写完整个EEPROM */
	for (int i = 0; i < 256; ++i)
	{
		datTemp  = i;
		res = AT24C02_Write_Byte(i, &datTemp);
		if (res)
		{
			printf("Faile To Write Address %d!\r\n", i);
		}
		HAL_Delay(10); // 写延时, 不然会失败
	}
	
	/* 读完整个EEPROM */
	for (int i = 0; i < 256; ++i)
	{
		res = AT24C02_Read_Byte(i, &datTemp);
		if (res)
		{
			printf("Faile To ReadAddress %d!\r\n", i);
		}
		else
		{
			printf("Address: %d, Value: %d\r\n", i, datTemp);
		}
	}

	while(1)
	{
		...
	}
}

BearPi I2C1 完整项目工程, 包含两份芯片datasheet


http://www.kler.cn/a/158975.html

相关文章:

  • Vue3 -- 项目配置之eslint【企业级项目配置保姆级教程1】
  • linux虚拟机无法使用yum在线拉取
  • 【STL】set,multiset,map,multimap的介绍以及使用
  • 【Android原生问题分析】夸克、抖音划动无响应问题【Android14】
  • WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
  • 【网络安全】网络安全防护体系
  • Windows11系统下MemoryCompression导致内存占用率过高
  • Auth模块的使用
  • AI 绘画 | Stable Diffusion LCM和FP8 显存不足的福音
  • js中批量修改对象属性
  • 两数之和 三数之和 哈希方法
  • Hadoop学习笔记(HDP)-Part.06 安装OracleJDK
  • openGauss学习笔记-144 openGauss 数据库运维-例行维护-慢sql诊断
  • js中的栈(stack)和堆(heap)
  • 1+X Web 前端开发职业技能等级证书模拟题(中级)理论知识
  • Maxwell学习笔记
  • 虚拟局域网(VLAN)解析(Virtual Local Area Network)(用于在不受物理位置限制的情况下将设备划分到同一网络或不同网络)
  • python之pyqt专栏7-信号与槽3
  • Flask项目Day1,Flask常见第三方拓展包
  • 算法通关村第十七关-青铜挑战贪心算法思想
  • JavaScript 安全的《加/解密处理》的实战--案例(二)
  • 【Java】Spring中BeanUtils.copyProperties的坑及解决
  • 单片机的基本概念——什么是单片机、单片机的分类以及单片机的发展历史、发展趋势
  • rvos 3编译与链接
  • 智能优化算法应用:基于鼠群算法无线传感器网络(WSN)覆盖优化 - 附代码
  • 云计算在数字营销中的作用是什么?