EEPROM测试代码 EVASH Ultra 系列EEPROM

EVASH Ultra系列EEPROM与通用型MCU:以Arduino为例

在嵌入式系统开发中,可靠的数据存储解决方案至关重要。EVASH Ultra系列EEPROM以其高可靠性和快速写入速度而闻名,非常适合多种应用场景。本文将展示如何在Arduino平台上使用EVASH Ultra系列EEPROM进行数据存储。

一、硬件连接

  1. 连接引脚:
    • Arduino的SCL (A5) 连接到 EVASH Ultra EEPROM 的 SCL。
    • Arduino的SDA (A4) 连接到 EVASH Ultra EEPROM 的 SDA。
    • 电源和地分别连接到 EEPROM 的 Vcc 和 GND。
  2. 上拉电阻: I2C总线上的SCL和SDA线需要通过上拉电阻连接到电源,一般使用4.7kΩ的电阻。

二、软件实现

使用Arduino的Wire库进行I2C通信。以下是一个基本的读写示例代码。

初始化代码

c

复制代码

#include <Wire.h>

#define EEPROM_ADDRESS 0x50 // EVASH Ultra EEPROM I2C地址

void setup() {

    Wire.begin(); // 初始化I2C

    Serial.begin(9600); // 初始化串口用于调试输出

}

写入操作

c

复制代码

void EEPROM_Write(uint16_t memAddress, uint8_t *data, uint16_t size) {

    Wire.beginTransmission(EEPROM_ADDRESS);

    Wire.write((int)(memAddress >> 8)); // 发送高字节地址

    Wire.write((int)(memAddress & 0xFF)); // 发送低字节地址

    for (uint16_t i = 0; i < size; i++) {

        Wire.write(data[i]); // 发送数据

    }

    Wire.endTransmission();

    delay(5); // 确保写入完成

}

读取操作

c

复制代码

void EEPROM_Read(uint16_t memAddress, uint8_t *data, uint16_t size) {

    Wire.beginTransmission(EEPROM_ADDRESS);

    Wire.write((int)(memAddress >> 8)); // 发送高字节地址

    Wire.write((int)(memAddress & 0xFF)); // 发送低字节地址

    Wire.endTransmission();

    

    Wire.requestFrom(EEPROM_ADDRESS, size);

    for (uint16_t i = 0; i < size; i++) {

        if (Wire.available()) {

            data[i] = Wire.read(); // 读取数据

        }

    }

}

主函数示例

c

复制代码

void loop() {

    uint8_t writeData[4] = {0x12, 0x34, 0x56, 0x78}; // 待写入数据

    uint8_t readData[4]; // 读取数据缓冲区

    // 写数据到EVASH Ultra EEPROM

    EEPROM_Write(0x0000, writeData, 4);

    // 延时以确保写入完成

    delay(100);

    // 读数据从EVASH Ultra EEPROM

    EEPROM_Read(0x0000, readData, 4);

    // 输出读取的数据到串口

    Serial.print("Read Data: ");

    for (int i = 0; i < 4; i++) {

        Serial.print(readData[i], HEX);

        Serial.print(" ");

    }

    Serial.println();

    // 循环延时

    delay(2000);

}

三、详细说明

I2C初始化: 使用Wire.begin()初始化I2C接口,确保Arduino能够通过I2C正确与EVASH Ultra EEPROM通信。

写入操作: EEPROM_Write函数通过I2C接口将数据写入EVASH Ultra EEPROM的指定地址。首先发送内存地址,然后发送数据。

读取操作: EEPROM_Read函数从EVASH Ultra EEPROM的指定地址读取数据。首先发送内存地址,然后请求数据。

主循环: 在主循环中,演示了如何写入和读取数据,并通过串口监视器输出读取的数据。

经典代码示例:EVASH Ultra系列EEPROMSTM32的集成

硬件连接

连接引脚:

STM32的I2C_SCL (时钟) 连接到 EVASH Ultra256 EEPROM 的 SCL。

STM32的I2C_SDA (数据) 连接到 EVASH Ultra256 EEPROM 的 SDA。

电源和地分别连接到 EEPROM 的 Vcc 和 GND。

上拉电阻: I2C总线上的SCL和SDA线需要通过上拉电阻连接到电源,一般使用4.7kΩ的电阻。

软件实现

2C初始化和错误处理

c

复制代码

#include "stm32f4xx_hal.h"

// I2C句柄

I2C_HandleTypeDef hi2c1;

// EVASH Ultra256 EEPROM地址

#define EVASH_ULTRA256_ADDRESS 0xA0 

// 初始化I2C

void I2C_Init(void) {

    hi2c1.Instance = I2C1;

    hi2c1.Init.ClockSpeed = 100000; // 100kHz

    hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;

    hi2c1.Init.OwnAddress1 = 0;

    hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;

    hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;

    hi2c1.Init.OwnAddress2 = 0;

    hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;

    hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

    if (HAL_I2C_Init(&hi2c1) != HAL_OK) {

        // 初始化错误处理

        Error_Handler();

    }

}

// 错误处理函数

void Error_Handler(void) {

    // 用户可以在这里定义自己的错误处理代码

    while(1);

}

写入操作c

复制代码

HAL_StatusTypeDef EVASH_Ultra_Write(uint16_t MemAddress, uint8_t *pData, uint16_t Size) {

    return HAL_I2C_Mem_Write(&hi2c1, EVASH_ULTRA256_ADDRESS, MemAddress, I2C_MEMADD_SIZE_16BIT, pData, Size, HAL_MAX_DELAY);

}

读取操作c

复制代码

HAL_StatusTypeDef EVASH_Ultra_Read(uint16_t MemAddress, uint8_t *pData, uint16_t Size) {

    return HAL_I2C_Mem_Read(&hi2c1, EVASH_ULTRA256_ADDRESS, MemAddress, I2C_MEMADD_SIZE_16BIT, pData, Size, HAL_MAX_DELAY);

}

主函数示例c

复制代码

int main(void) {

    HAL_Init();

    SystemClock_Config(); // 配置系统时钟

    I2C_Init();           // 初始化I2C

    uint8_t writeData[4] = {0x12, 0x34, 0x56, 0x78}; // 待写入数据

    uint8_t readData[4];                            // 读取数据缓冲区

    // 写数据到EVASH Ultra EEPROM

    if (EVASH_Ultra_Write(0x0000, writeData, 4) != HAL_OK) {

        // 写入错误处理

        Error_Handler();

    }

    // 读数据从EVASH Ultra EEPROM

    if (EVASH_Ultra_Read(0x0000, readData, 4) != HAL_OK) {

        // 读取错误处理

        Error_Handler();

    }

    while (1) {

        // 主循环

    }

}

I2C初始化: 初始化I2C接口,设置时钟速度、地址模式等参数,确保STM32能够通过I2C正确与EVASH Ultra256 EEPROM通信。

写入操作: EVASH_Ultra_Write函数通过I2C接口将数据写入EVASH Ultra256 EEPROM的指定地址。使用HAL_I2C_Mem_Write函数,指定EEPROM地址、内存地址和数据长度等参数。

读取操作: EVASH_Ultra_Read函数从EVASH Ultra256 EEPROM的指定地址读取数据。使用HAL_I2C_Mem_Read函数,指定EEPROM地址、内存地址和数据长度等参数。

错误处理: 如果在初始化、写入或读取过程中出现错误,Error_Handler函数将处理这些错误。开发者可以根据实际需求修改错误处理逻辑。

系统时钟配置: 在SystemClock_Config函数中,您需要根据具体的系统需求配置系统时钟,这里省略了具体实现。

EVASH 官网
www.evashte.com

EVASH EEPROM 规格书百度云下载
链接: 百度网盘 请输入提取码 提取码: rn3v

EVASH EEPROM 官方淘宝店
https://shop260382949.taobao.com/?spm=pc_detail.29232929/evo365560b447259.shop_block.dentershop.7eb47dd659UOm8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值