微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机将故障信息存入EEPROM

单片机将故障信息存入EEPROM

时间:10-02 整理:3721RD 点击:
最近在做一个单片机系统,系统根据外部条件触发故障,然后将故障发生时的时间和故障类型保存在EEPROM中,上位机端可以通过命令读取历史的故障信息,关于存储信息有没有好的方法,以前没有做过关于这方面,在网上搜也没有搜到,目前一点头绪都没有,求大神给个思路!

感觉打开了新思路

讨论下,思路大概是:
1、程序正常运行-外部触发-启动故障信息记录-操作E2PROM-将信息写入E2PROM;
   上位机读取的顺序是:发送一个指令给单片机,告诉它我要读故障信息;单片机收到后,读取E2PROM,读取故障信息,再通过通信接口给上位机。
小编没头绪,可以一步步来。
1、E2PROM的驱动做好了吗,能正常读写E2PROM吗,这是首先要实现的。
2、E2PROM搞定了,处理故障触发。外部什么条件输入,会触发故障,建议用标志位来做,在循环中查询这个标志位,一旦置位,就去写故障信息。
3、上位机与单片机的通信接口定了吗?是RS232/485/USB/RJ45/无线?选择一种通信接口,然后就是搞定这个通信接口的驱动,对上位机能正常收发数据。
4、制定通信协议。上位机发什么指令给单片机,单片机会认为这是要读故障信息呢;再具体点,故障信息很多条,上位机发送什么指令表明是读哪一条故障信息;单片机每发一次故障信息,上位机是否要进行确认反馈,以提高可靠性。这就是所谓的通信协议,也要先制定好。
做完以上,大概就能出来了。

目前EEPROM驱动OK、通信接口OK、通信协议OK。
主要是存储的结构,还有存储的方式,故障信息存储形式故障码+时间,当上位机接入后,通过上位机的读取命令可以读到EEPROM中存储的最近100条数据,因为EEPROM毕竟容量小,如果一直存会很快就满了,所以只存最近的100条。
但是这样就会有个问题,存储的时候,使用固定大小的EEPROM空间该怎样实现一个先进先出的结构,还是说在系统上电的时候做一个数据结构存储故障信息,在系统下电的时候,将这个结构直接存入EEPROM,在下次上电时在读取出来。
目前我的两种思路(不知道是不是正确):
1.在出现故障时,将标志位置位,存贮时间+故障码,记录存储单元的首地址和结束地址,通过地址确定存入数据条数,如果超出就将下条数据存入首地址,类似一个循环队列
2.在系统中做这样一个结构,在系统上电运行中存储,下电写入EEPROM,上电是读出
不知道对不对,水平有点渣,还望多多指正,谢谢
还有就是有没有一些常用的存储和读取历史数据的方法或结构,推荐参考下

恩,后来我回复完了,也觉得不在于驱动、通信了,应该就是存储结构和数据结构的设计问题。
存储结构都是按照实际应用来设计的。
1、我感觉第一条思路好。就是存时间+故障代码。每个故障代码对应的故障详情可以在上位机中查询。E2PROM只能保存100条,那每到90条或者95条,可以由单片机设备主动上送一条命令,请求上位机读取故障信息。全部读完后,全部清掉,接着写后续的故障信息。
      或者就每天都主动读一回故障信息,也不用考虑结束地址、第多少条了,这样更简单点。
这是我的理解,因为不知道小编是不是单片机设备具体什么功能,所以根据感觉讨论下。

儿科的知识了哦,

i2c的接口eeprom吗?

实时存储即可啊,

没有那么复杂的啊,

如果存储数据100条,如何保证这100条数据是最新的记录呢?

循环存储啊,很简单的

搞几个记录序号的变量即可

简单到不能再简单了

侬说是不是这样啊

兄弟,加油啊,自己好好搞

多总结,多分析即可,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top