C51 - SPI总线概述读写25AA020A EEPROM
一.SPI硬件原理
- 单主单从的连接方式
如果只有一个从机器件,SS片选型号线,直接接地。 - 单主多从连接模式
二.SPI四种模式
图中以CPOL/CPHA = 1 ,举例 总线空闲状态为高电平,代表第一个时钟沿为下降沿,数据输出在一个时钟周期的第一个沿。== 数据采样==在第二个沿。
当CPHA = 0时,表示数据的采样是在一个时钟周期的第一个沿。
数据输出:总机往从机上写数据
数据采样:从机开始读取数据
三.25AA02A的应用
25AA02A EEPROM
EEPROM包括了一个8位的指令寄存器,可通过sI访问,并在SCK上升沿移入数据,执行此操作时,CS引脚必须保持低电平,HOLD引脚必须保持高电平。
引脚DI:用作于输入数据信号,另一个作用是选择通道控制; 引脚DO:一般作用是输出数据信号,还可以用作转换数据的输出;
三.编程
bsp_spi.c
这里是从机器件手册,说明主机开始数据输入时(sck = 1),从机开始采样。
//完成底层spi操作,读写一字节
/*******************************************************************************
Function : spi_write_byte
Description : 完成底层spi操作,写一字节
Input : byte 写入的字节数据
Output : 无
Return : 无
*******************************************************************************/
void spi_write_byte(unsigned char byte) //
底层操作,不涉及器件
{unsigned char i;for (i=0;i<8;i++){sck = 0;if((dat & 0x80) == 0x80) //高位先行。判断当前输入是1还是0。这时是最高位。{DI = 1;}else{DI = 0;}dat = dat << 1; // dat <<= 1;sck = 1; //之前操作,已经将数据准备好了,当sck = 1时,上升沿时数据开始采样}
}
这里是从机器件手册,说明从机开始数据输出时(sck = 1),主机开始采样。
/*******************************************************************************
Function : spi_read_byte
Description : 使用SPI读取一个字节的数据,sck在从0->1时需要将数据准备好
Input : byte 写入的字节数据
Output : 无
Return : 无
*******************************************************************************/
void spi_read_byte()
{unsigned char i;unsigned char dat; //返回值dat <<= 1; //高位先行,将第一次取得数据移到最高位上for (i=0;i<8;i++){sck = 0; sck = 1; //先数据输出到总线上,然后判断0还是1,主机采样if((D0 == 1) {dat |= 0x01; // (dat = dat |0x01)dat和0x01做“或”的运算,意思是最低位置1,其它位保持不变}else{dat &= ~0x01; // (dat = dat & ~0x01) dat = dat & 1111 1110;将最低位 P1_0 置0,其他位不变 }return dat;
}
msp_25AA020A.c
读序列
/*******************************************************************************
Function : 25AA020A_read
Description : 器件的读写
Input : addr 从哪地址开始读起
Output : 无
Return : 无
*******************************************************************************/
unsigned char 25AA020A_read(unsigned char addr) //从EEPROM哪里开始读起
{unsigned char dat; //返回值CS = 0 ;spi_read_byte(25AA020A_READ); //利用spi读指令spi_read_byte(addr);dat = spi_read_byte();CS = 1 ;return dat;
写序列
写使能 ,控制CS拉低。然后写指令。#define 25AA020A_WREN 0x06
/*******************************************************************************
Function : 25AA020A_write_enable
Description : 写使能函数
Input : 无
Output : 无
Return : 无
*******************************************************************************
void 25AA020A_write_enable(){CS = 0 ;void spi_write_byte(25AA020A_WREN);CS = 1 ;}
/*******************************************************************************
Function : 25AA020A_read
Description : 器件的读写
Input : addr 从哪地址开始读起
Output : 无
Return : 无
*******************************************************************************/
unsigned char 25AA020A_write(unsigned char addr,unsigned char dat)
{unsigned char state;25AA020A_write_enable();CS = 0 ;spi_write_byte(25AA020A_WRITE);spi_write_byte(addr);spi_write_byte(dat);while(1); //写周期时间 TWS为6ms。两种方式,一种延时,一种写状态判断。{CS = 0;spi_write_byte(25AA020A_RDSR );state = spi_read_byte(); //读的是状态寄存器中的最低位。为1还没写完。if((state &=0x01) == 0) //判断最低位是否写完成{break;}CS = 1;}CS = 1 ;
}
msp_25AA020A.h
#define 25AA020A_READ 0x03; //读指令
#define 25AA020A_WRITE 0x02; //写使能指令
#define 25AA020A_WREN 0x06;
#define 25AA020A_WRDI 0x04;
#define 25AA020A_RDSR 0x05; //读状态指令
#define 25AA020A_WRSR 0x01;
C51 - SPI总线概述读写25AA020A EEPROM相关推荐
- linux内核SPI总线驱动分析(一)
下面有两个大的模块: 一个是SPI总线驱动的分析 (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) SPI总线驱动分析 1 SPI概述 ...
- 单片机软件模拟SPI接口—加深理解SPI总线协议
单片机软件模拟SPI接口-加深理解SPI总线协议 SPI(Serial Peripheral Interfacer 串行外设接口)是摩托罗拉公司推出的一种同步串行通讯接口,用于微处理器臌控制器和外 ...
- 学习STM32 Flash存储 W25Q64 SPI总线存储模块进行读写数据
今天学习 Flash 存储芯片进行数据写入和读取方法.了解W25Q64 存储芯片的使用.能够用 STM32 单片机对 W25Q64 进行写入数据,擦除数据,读取数据. w25q64 是什么? W25Q ...
- 51单片机对SPI总线上挂接多个25AA040的读写操作+Proteus仿真
51单片机对SPI总线上挂接多个X5045的读写操作+Proteus仿真 Proteus仿真图 实例代码 //对SPI总线上挂接多个25AA040的读写操作 #include<reg51.h&g ...
- Xilinx-Spartan6-学习笔记(24):通过SPI总线读写FLASH
Xilinx-Spartan6-学习笔记(24):通过SPI总线读写FLASH 利用SPI总线实现对FLASH进行读写,写入255个数据再读出255个数据.(这里为了模拟SDO信号,随机生成了0~1信 ...
- SPI协议、MCP2515裸机驱动详解----主流SPI总线接口原理
最近看到一个介绍SPI接口原理的帖子,看完觉得甚好.特来分析给大家一起学习. SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC6 ...
- 基于I2C/SPI总线的温湿度采集与OLED显示
实验一 实验目的 学习I2C总线通信协议,使用STM32F103完成基于I2C协议的AHT20温湿度传感器的数据采集,并将采集的温度-湿度值通过串口输出.具体任务: 1)解释什么是"软件I2 ...
- 总线概述及常见总线(转)
一. 总线概念 所谓总线(Bus),是指计算机设备和设备之间传输信息的公共数据通道.总线是连接计算机硬件系统内多种设备的通信线路,它的一个重要特征是由总线上的所有设备共享,可以将计算机系统内的多种设备 ...
- SPI总线的原理与Verilog实现
一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...
最新文章
- 为什么分布式一定要有延时任务?
- python 类-python类定义的讲解
- 从GBIP到PXI 的发展简史
- unique离散化用法
- magento effects.js jquery.lazyload.js 冲突
- VUE使用lodop实现前端打印页面指定内容
- 计算机应用基础本科答案排序,计算机应用基础本科操作题
- WPF自定义控件与样式-自定义按钮(Button)
- 解决 微信小程序 滚动 事件穿透 问题
- 基于C#制作的简易代码生成器
- 像素值/DN值/数字量化值
- Python 合并两个或多个pdf文件(获取pdf文件指定页)
- 用Python给弟弟生成1000道算术题
- CTF·Crypto·古典密码大全
- Ubuntu下安装Remix OS双系统
- 400 行 C 代码实现一个虚拟机
- [数学基础知识] Cramér‘s V 相关系数和Python算法实现
- linux下wifi设备的实现逻辑
- git 冲突解决一把梭
- allegro设置差分线
热门文章
- Direct3D 实例
- [C语言]国王的许诺:相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相西萨自己选择何种赏赐。这位聪明的宰相指着8 × 8共64格的象棋盘说:陛下,请您赏给我一些麦子吧。。。
- 淮阴工学院计算机科学与技术宿舍,淮阴工学院宿舍条件,宿舍环境图片(10篇)
- 大數據分析Excel Power BI全方位應用彩色版
- 马来酰亚胺偶联二硒化钨 (WSe2-MAL)|N-羟基琥珀酰亚胺偶联WSe2二硒化钨纳米颗粒 (WSe2-NHS)
- SEP客户端C盘空间被xfer目录占满
- 议程设置理论在公关活动中的应用
- 在北大的BBS上听到的原创歌曲不错
- 【动态烟花】动态烟花HTML网页源码分享
- 手机python3.8.5软件_Python|Python v3.8.7 for Linux下载_网站源码_站长下载