ROHM的EEPROM SPI读写编程

2024-01-18 22:10
文章标签 编程 读写 spi eeprom rohm

本文主要是介绍ROHM的EEPROM SPI读写编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

型号为 BR93L56-W SPI接口 4线连接,这里使用GPIO模拟SPI操作。

首先研究Timing

 

然后是代码:

void SPI_Init(void)
{SPI_SCK_0;SPI_CS_0;SPI_MOSI_0;
}void EEPROM_SendADDR(uint8_t send_addr)
{uint8_t i;for(i = 0;i<8;i++){if(send_addr & 0x80){SPI_MOSI_1;}else{SPI_MOSI_0;}send_addr<<=1;delay_us(500);SPI_SCK_1;delay_us(500);SPI_SCK_0;}
}uint16_t EEPROM_Receive(void)
{uint16_t receive_data = 0;uint8_t i;for(i=0;i<16;i++){SPI_SCK_1;delay_us(500);receive_data<<=1;if(SPI_READ_MISO){receive_data ++;}SPI_SCK_0;delay_us(500);}return receive_data;
}uint16_t EEPROM_Read(uint8_t read_addr)
{uint16_t read_data;uint8_t i;uint8_t read_code = 0x06;SPI_MOSI_0;SPI_CS_1;for(i = 0;i<4;i++){if(read_code & 0x08){SPI_MOSI_1;}else{SPI_MOSI_0;}read_code<<=1;delay_us(500);SPI_SCK_1;delay_us(500);SPI_SCK_0;}EEPROM_SendADDR(read_addr);read_data = EEPROM_Receive();SPI_CS_0;return read_data;
}void EEPROM_SendDATA(uint16_t send_data)
{int i;for(i = 0;i<16;i++){if(send_data & 0x8000){SPI_MOSI_1;}else{SPI_MOSI_0;}send_data<<=1;delay_us(500);SPI_SCK_1;delay_us(500);SPI_SCK_0;}
}void EEPROM_WEN(void)
{SPI_MOSI_0;SPI_CS_1;uint8_t i;uint8_t wen_code = 0x13;for(i = 0;i<6;i++){if(wen_code & 0x20){SPI_MOSI_1;}else{SPI_MOSI_0;}wen_code<<=1;delay_us(500);SPI_SCK_1;delay_us(500);SPI_SCK_0;}wen_code = 0x01;for(i = 0;i<6;i++){if(wen_code & 0x20){SPI_MOSI_1;}else{SPI_MOSI_0;}wen_code<<=1;delay_us(500);SPI_SCK_1;delay_us(500);SPI_SCK_0;}SPI_CS_0;
}void EEPROM_Write(uint8_t write_addr,uint16_t write_data)
{uint8_t i;uint8_t write_code = 0x05;EEPROM_WEN();SPI_MOSI_0;SPI_CS_1;for(i = 0;i<4;i++){if(write_code & 0x8){SPI_MOSI_1;}else{SPI_MOSI_0;}write_code<<=1;delay_us(500);SPI_SCK_1;delay_us(500);SPI_SCK_0;}EEPROM_SendADDR(write_addr);EEPROM_SendDATA(write_data);SPI_CS_0;delay_ms(6);}

最后读写测试OK

几个注意点,主要还是得仔细看手册。

1 此EEPROM CS高电平有效 

2 此EEPROM 时钟频率最快支持 2MHz clock,所以SCK延迟不能太小,频率计算要在2MHZ以下

3 此EEPROM SPI发送和接收数据 一次16bit,地址是8bit

4 Write enable (WEN)时,第6个SCK后的时钟也必须输入,也就是10011后的6-11个SCK不能忽略,数据可以任意

这篇关于ROHM的EEPROM SPI读写编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620415

相关文章

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

一文彻底搞懂Java 中的 SPI 是什么

《一文彻底搞懂Java中的SPI是什么》:本文主要介绍Java中的SPI是什么,本篇文章将通过经典题目、实战解析和面试官视角,帮助你从容应对“SPI”相关问题,赢得技术面试的加分项,需要的朋... 目录一、面试主题概述二、高频面试题汇总三、重点题目详解✅ 面试题1:Java 的 SPI 是什么?如何实现一个

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的