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

上海的建设网站制作西安建网站公司

上海的建设网站制作,西安建网站公司,怎样在网站做推广,搭建网站团队计划1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法#xff0c;包含底层时序和读写的代码#xff1b; (2)大部分代码是EEPROM芯片通用的#xff0c;但是其中关于某些时间的要求#xff0c;是和具体芯片相关的#xff0c;和主控芯片和外设芯片都有关系…1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法包含底层时序和读写的代码 (2)大部分代码是EEPROM芯片通用的但是其中关于某些时间的要求是和具体芯片相关的和主控芯片和外设芯片都有关系需要具体分析但是逻辑顺序是不变的 2、EEPROM介绍 (1)在嵌入式开发中EEPROM的实际场景比闪存flash少很多。EEPROM芯片容量小flash容量大并且flash价格便宜 (2)EEPROM的读写速度一般比flash慢 (3)EEPROM大多是I2C接口占用的引脚比flash少 (4)EEPROM比flash掉电保存数据的时间更久总体来说就是更稳定 (5)参考博客《嵌入式开发——EEPROM和FLASH的区别和优劣势》 3、实际产品中EEPROM的使用场景 (1)使用场景在嵌入式设备中添加一块EEPROM用于存放产品型号 (2)使用的原因分析 1首先可以做到一个程序兼容好几种产品所以在程序的早期会需要知道当前的产品型号 2将产品型号保存到EEPROM中程序保存到flash中升级的时候只会去重写flash而不会重写EEPROM这样能保证升级失败也不会导致产品型号的丢失 3EEPROM一般是在产品出厂的时候进行烧录当然在程序正常运行后也会提高重写EEPROM的方式来进行设备的改制读写EEPROM的方式都是研发人员或者设备生产人员才知道不会对客户提高 4、I2C时序分析 参考博客《I2C通信协议详解和通信流程分析》 5、根据I2C时序编写I2C通信代码 5.1、I2C通信开始和结束 /******************************************************************************* * 函 数 名 : I2C_Start() * 函数功能 : 起始信号在I2C_SCL时钟信号在高电平期间I2C_SDA信号产生一个下降沿 * 输 入 : 无 * 输 出 : 无 * 备 注 : 起始之后I2C_SDA和I2C_SCL都为0 *******************************************************************************/ void I2C_Start() {I2C_SDA 1;I2C_Delay10us();I2C_SCL 1;I2C_Delay10us();//建立时间是I2C_SDA保持时间4.7usI2C_SDA 0;I2C_Delay10us();//保持时间是4usI2C_SCL 0; I2C_Delay10us(); } /******************************************************************************* * 函 数 名 : I2C_Stop() * 函数功能 : 终止信号在I2C_SCL时钟信号高电平期间I2C_SDA信号产生一个上升沿 * 输 入 : 无 * 输 出 : 无 * 备 注 : 结束之后保持I2C_SDA和I2C_SCL都为1表示总线空闲 *******************************************************************************/ void I2C_Stop() {I2C_SDA 0;I2C_Delay10us();I2C_SCL 1;I2C_Delay10us();//建立时间大于4.7usI2C_SDA 1;I2C_Delay10us(); }5.2、I2C主设备读从设备函数 /******************************************************************************* * 函 数 名 : I2cSendByte(uchar num) * 函数功能 : 通过I2C发送一个字节。在I2C_SCL时钟信号高电平期间 * * 保持发送信号I2C_SDA保持稳定 * 输 入 : num ,ack * 输 出 : 0或1。发送成功返回0发送失败返回-1 * 备 注 : 发送完一个字节I2C_SCL0, 需要应答则应答设置为1否则为0 ******************************************************************************/ uchar I2C_SendByte(uchar dat, uchar ack) {uchar a 0,b 0I2C_SCL 0; //保证在开始发送数据前时钟线是低电平for(a0; a8; a)//要发送8位从最高位开始{I2C_SDA dat 7; //起始信号之后I2C_SCL0所以可以直接改变I2C_SDA信号dat dat 1;I2C_Delay10us();I2C_SCL 1;I2C_Delay10us();//建立时间4.7usI2C_SCL 0;I2C_Delay10us();//时间大于4us }I2C_SDA 1; // 主设备释放SDA线给从设备去操作I2C_Delay10us();I2C_SCL 1; // 主设备开始了第9个周期while(I2C_SDA (ack 1))//等待应答也就是等待从设备把I2C_SDA拉低{b;if(b 200) //如果超过200us没有应答发送失败或者为非应答表示接收结束{I2C_SCL 0;I2C_Delay10us();return -1;}}I2C_SCL 0;I2C_Delay10us();return 0; }(1)每次向数据线上发送一个bit先发送字节的高位再发送字节的低位 (2)发送的时序时钟线保持低电平时将数据发送到数据线上拉高时钟线一段时间这段时间是从设备从数据线上读数据将时钟线拉低进行下一个周期 5.3、I2C主设备写从设备函数 /******************************************************************************* * 函 数 名 : I2cReadByte() * 函数功能 : 使用I2c读取一个字节 * 输 入 : 无 * 输 出 : dat * 备 注 : 接收完一个字节I2C_SCL0 *******************************************************************************/uchar I2C_ReadByte() {uchar a 0,dat 0;I2C_SDA 1; //主设备释放SDA线给从设备去操作 I2C_Delay10us();// 按道理这里应该有一个SCL 0的I2C_SCL 0;for(a0; a8; a)//接收8个字节{I2C_SCL 1; // 通知从设备我要开始读了可以放1bit数据到SDA了I2C_Delay10us();dat 1; // 读取的时候是高位在前的dat | I2C_SDA;I2C_Delay10us();I2C_SCL 0; // 拉低为下一个bit的周期做准备I2C_Delay10us();}return dat; }(1)从设备已经将数据发送到数据线上 (2)将时钟线由低变成高电平在高电平期间读取数据线上的数据 (3)将时钟线拉低进行写一个读取周期 总结无论是主设备读/写从设备时钟线都是主设备进行控制所以整个I2C通信都是主设备在进行主导 6、单片机和嵌入式设备的I2C通信区别 (1)单片机是利用GPIO模拟I2C协议进行通信。I2C时序的控制是编写单片机程序的人进行控制不仅要考虑逻辑上的I2C协议还需要阅读数据手册关心时序图中高低电平的持续时间 (2)嵌入式设备的Soc中集成了I2C控制器由控制器来产生I2C通信时序编写程序的人配置好I2C控制器调用接口进行收发如果有linux系统则还会提高I2C驱动框架软件开发人员基于I2C驱动框架进行编程 总结单片机开发需要考虑I2C通信的所有细节而嵌入式Soc集成I2C控制器向软件开发人员屏蔽了产生I2C通信时序的细节 7、24c02的原理图分析 7.1、引脚介绍 引脚名称引脚作用SCLI2C的时钟线SDAI2C的数据线E0、E1、E2决定从地址WE写保护引脚当引脚为高电平时不允许写当引脚为低电平时允许写 7.2、从地址确定 (1)在发送从地址的一字节数据中高7bit是从设备地址最后一位表示本次主设备是要读还是写从设备查阅24c02的数据手册可知最低位为1表示读最低位0表示写 (2)7bit的从地址中其中高4bit是固定的最后3bit数据A0、A1、A2对应E0、E1、E2引脚的值可以在硬件上通过接高/低电平来决定低3bit的值 (3)查阅原理图可知E0、E1、E2三个引脚都是接地所以A0、A1、A2的值都是0 总结24c02芯片的从地址是0x1010000读24c02芯片得命令是0xa1写24c02芯片的命令是0xa0 8、24c02的随机读数据操作函数 /******************************************************************************* * 函 数 名 : unsigned char At24c02Read(unsigned char addr) * 函数功能 : 读取24c02的一个地址的一个数据 * 输 入 : 无 * 输 出 : 无 ******************************************************************************/ unsigned char At24c02Read(unsigned char addr) {unsigned char num;I2C_Start();I2C_SendByte(0xa0, 1); //发送写器件地址I2C_SendByte(addr, 1); //发送要读取的地址I2C_Start();I2C_SendByte(0xa1, 1); //发送读器件地址numI2C_ReadByte(); //读取数据I2C_Stop();return num; }9、24c02的字节写数据操作函数 /******************************************************************************* * 函 数 名 : void At24c02Write(unsigned char addr,unsigned char dat) * 函数功能 : 往24c02的一个地址写入一个数据 * 输 入 : 无 * 输 出 : 无 ******************************************************************************/ void At24c02Write(unsigned char addr,unsigned char dat) {I2C_Start();I2C_SendByte(0xa0, 1);//发送写器件地址I2C_SendByte(addr, 1);//发送要写入内存地址I2C_SendByte(dat, 0); //发送数据I2C_Stop(); }推荐 给大家推荐一个学校嵌入式知识的网站博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站网站里有C语言、Linux等等的笔试题、面试常问问题等等知识无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步欢迎留言交流。 链接学习神器跳转
http://www.hkea.cn/news/14371364/

相关文章:

  • 景泰做网站动漫网页设计模板素材
  • 淄博高端网站下载软件推广
  • 小型企业的网站建设论文青岛做网站定制
  • 定制网站开发价格汕头做网站
  • 专业网站定制平台网站开发报价 知乎
  • 山西城乡建设学校报名网站外贸公司建网站一般多少钱
  • 优秀学校网站模板网站模板是怎么制作
  • 宁夏网站建设一条龙一个服务器可以建几个网站
  • 网站网页制作公司1+x网店运营推广
  • wordpress 模板森林安卓优化清理大师
  • 网站建设总体上可划分为两个阶段高档网站建
  • 建立公司网站流程品牌设计策划
  • 扬州有什么做网站的公司网站平台设计费用
  • 北京上地网站建设wordpress扒站工具
  • 郑州新密网站建设建网站学什么
  • 360购物网站怎么做的网络营销常用的方法包括
  • 制作网站网络科技公司做淘宝可以在别的网站发信息吗
  • 阿里巴巴网站广告怎么做node有类似Wordpress
  • 查询备案网站百度搜索推广多少钱
  • 人工做流量的网站电子商务网站体系结构有哪些
  • 做名片模板网站工商查询系统
  • 做网站全包网站高质量链群怎么做
  • 做毕业网站的周记做网站硬件工程是什么
  • 做百度推广首先要做网站吗佛山建站
  • 苏州市市政建设管理处网站31省本土新增今天
  • 如何注册一个免费域名长沙seo排名扣费
  • 景点旅游网站开发与设计无锡网站建设专业极速信息
  • 在墙外的优质网站个人怎么做影视网站
  • 网站建站建设价格哪个公司的app开发
  • 什么网站可以做任务领赏金营销手段有哪些方式