From 53de825c4c4d8325c02341177f62ab84897eb5ee Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Sat, 25 Jul 2026 22:09:43 +0800
Subject: [PATCH] update vscode task.json and add stm32flash tools
---
ex2.i2c-bitbang/Board/eeprom.h | 79 +++++++++++++++++++++++++++++++++++++++
1 files changed, 79 insertions(+), 0 deletions(-)
diff --git a/ex2.i2c-bitbang/Board/eeprom.h b/ex2.i2c-bitbang/Board/eeprom.h
new file mode 100644
index 0000000..ca823a8
--- /dev/null
+++ b/ex2.i2c-bitbang/Board/eeprom.h
@@ -0,0 +1,79 @@
+/**********************************************************************
+* Copyright: (C)2024 LingYun IoT System Studio
+* Author: GuoWenxue<guowenxue@gmail.com>
+* Description: I2C EEPROM device driver for ISKBoard
+*
+* ChangeLog:
+* Version Date Author Description
+* V1.0.0 2024.08.29 GuoWenxue Release initial version
+***********************************************************************/
+#ifndef __EEPROM_H__
+#define __EEPROM_H__
+
+#include "i2c_bitbang.h"
+
+#define EEPROM_INFO(_name, _cap, _page, _addr_bytes) \
+ .name = _name, \
+ .capacity = _cap, \
+ .page_size = _page, \
+ .addr_bytes = _addr_bytes, \
+ .n_pages = (_cap)/(_page)
+
+typedef struct eeprom_info
+{
+ const char *name; /* 芯片型号名称,如 "AT24C256" */
+ uint32_t capacity; /* 总容量 (Bytes) */
+ uint32_t page_size; /* 单页大小 (Bytes) */
+ uint8_t addr_bytes; /* 片内寻址字节数:1 或 2 */
+ uint32_t n_pages; /* 总页数 */
+} eeprom_info_t;
+
+/* 设备运行时上下文结构体 */
+typedef struct eeprom_dev
+{
+ i2c_bus_t *bus; /* 绑定的 I2C 总线 */
+ uint8_t dev_addr; /* 基础 I2C 从机地址 (通常为 0x50) */
+ const eeprom_info_t *info; /* 指向匹配成功的规格信息,直接替代原 switch-case */
+} eeprom_dev_t;
+
+/* 导出 API */
+
+/**
+ * @brief 初始化 EEPROM 设备结构体对象
+ * @note 该函数仅做内部参数映射与规格配置(如页大小、芯片容量)。
+ * @param eeprom: 指向 EEPROM 设备句柄的指针
+ * @param bus: 绑定的物理 I2C 总线对象指针
+ * @param dev_addr: EEPROM 的 7 位 I2C 从机基地址 (例如 AT24C256 常规为 0x50)
+ * @param chip_name: EEPROM 的芯片型号名称 (例如 "AT24C256")
+ * @retval None
+ */
+int eeprom_init(eeprom_dev_t *eeprom, i2c_bus_t *bus, uint8_t dev_addr, const char *chip_name);
+
+/**
+ * @brief 从 EEPROM 的指定内部地址连续读取数据
+ * @param eeprom: 指向已初始化的 EEPROM 设备句柄的指针
+ * @param reg_addr: 芯片内部物理存储的 16 位起始地址 (0x0000 ~ 0x7FFF)
+ * @param buf: 存放接收数据的用户缓冲区指针
+ * @param len: 期望读取的数据字节数
+ * @retval I2C_OK: 读取成功; I2C_ERROR: 总线或从机无应答; I2C_BUSY: 总线被占用
+ */
+i2c_status_t eeprom_read(eeprom_dev_t *eeprom, uint16_t reg_addr, uint8_t *buf, uint16_t len);
+
+/**
+ * @brief 向 EEPROM 的指定内部地址连续写入数据(含跨页切片处理)
+ * @param eeprom: 指向已初始化的 EEPROM 设备句柄的指针
+ * @param reg_addr: 芯片内部物理存储的 16 位起始地址 (0x0000 ~ 0x7FFF)
+ * @param buf: 存放待发送数据的源缓冲区指针
+ * @param len: 期望写入的数据字节数
+ * @retval I2C_OK: 全部数据写入成功; I2C_ERROR: 期间发生物理通信故障
+ */
+i2c_status_t eeprom_write(eeprom_dev_t *eeprom, uint16_t reg_addr, uint8_t *buf, uint16_t len);
+
+/**
+ * @brief EEPROM 测试函数
+ * @param bus: 绑定的物理 I2C 总线对象指针
+ * @retval None
+ */
+int eeprom_test(i2c_bus_t *bus);
+
+#endif /* __EEPROM_H__ */
--
Gitblit v1.10.0