矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 5835|回复: 15

请教电脑,单片机,eeprom之间的数据读取的思路

[复制链接]
     
发表于 2019-5-20 13:12:13 | 显示全部楼层 |阅读模式
我想用单片机diy一个工具,类似那种用51单片机对epprom 复制数据,再拷贝的另一块eeprom中的复写仪。
实际应用是:
1,电脑串口连接单片机的串口,单片机通过普通io用IIC协议和eeprom通讯,电脑和epprom数据的数据进行读写。
2,单片机可以(通过按键和液晶屏)对eeprom的数据读写。
这是diy工具的最底层,现在不知该怎样对eeprom中的地址数据进行操作,比如电脑通过单片机往eeprom中存储很多74系列门电路的型号,引脚参数,真值表,结果等,,然后单片机怎样找出eeprm中对应门电路的型号等相关参数,再进行下一步操作呢!
想了好久,不知怎样才能实现,
     
发表于 2019-5-20 14:00:00 | 显示全部楼层
IIC 版本的 EEPROM (24CXX系列),无非就是个 IIC 通信时序,手册上很详细的;
分“当前位置读取”、“随机读取”、“随机写入”这么几种动作。

会读写了以后,存什么数据,何时存都是软件高层的事情了。

话说一只10多块钱的 CH341A 编程器就能解决你的忧愁
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 14:09:30 | 显示全部楼层
好像问题的要点不是I2C读写,是数据结构的设计吧要做出一个自己的数据结构标准,写好以后要反复读出查询?
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 14:25:02 | 显示全部楼层
先搞清楚要操作的对象有多少类型,各类型又有什么共通的特性,等等。在这些基础上设计一套索引方案,然后匡算需要多少存储空间,这样才好确定你要读写的存储器容量。至于设计电路则是最后一步了。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-5-20 16:18:33 | 显示全部楼层
t3486784401 发表于 2019-5-20 14:00
IIC 版本的 EEPROM (24CXX系列),无非就是个 IIC 通信时序,手册上很详细的;
分“当前位置读取”、“随 ...

iic通讯不是难点,要8个16进数为一组,并且有很多组存进eeprom中,但电脑传进eeprom中不确定每组数的首地址,单片机读写时不知怎样处理
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-5-20 16:22:41 | 显示全部楼层
未成之佛 发表于 2019-5-20 14:09
好像问题的要点不是I2C读写,是数据结构的设计吧要做出一个自己的数据结构标准,写好以后要反复读出查 ...

对这些概念比较迷糊,是要搞一个对数据快速准确存储的架构出来。这个有固定的结构的吗,还是可以自定义
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 16:48:16 来自手机 | 显示全部楼层
本帖最后由 壹法拉 于 2019-5-20 18:19 编辑

单片机读取EEPROM的数据,只能一个个字节地读取。对于51单片机,每个字节8位,超过8位的,需要自己另行处理。比如int类型的数据是16位的,需要自己把这个字节分成2个8位的数据分别存入。读取时,同样要分别读取2个8位的,再合并成一个16位的。
如果你自信地存入一个int字节,读取它时,你会发现,缺了8位。
每个8位字节,都是有具体地址的,这点跟PC机编程不一样(有操作系统管理地址)。而且,不能简单的重写字节,需要先刷新字节才能写,直接写入会出现意外的结果。EEPROM的刷新方式是有约定的,有的是一次刷新一个扇区。也就是说,你只写了一个字节,那么要改写这个字节前,要刷新整个扇区的512字节;而刷新的次数是有限制的;这就需要根据具体情况,发挥自己的智慧了。
PC机和单片机读写EEPROM中的数据时,必须针对确定地址的逐个字节地读写。特殊的数据类型,需要自己编写专用的读或写函数。这也许就是你说的“架构”吧。

另一个值得注意的是:EEPROM呗刷新后,每个字节的每一位都是1;也就是每个字节都是0XFF; 而PC编程时,默认的新字节都是0;
EEPROM中的数据一旦被写成0;再往这个字节里写什么都是0;必须刷新之后再写入才是正确的数据;一般来说刷新的次数是十万次吧;厂家有说明的;

单片机编程,你会感到,自己说了算,自己可以控制单片机的每一个字节的每一位。这叫“独立自主”;而PC机编程是有操作系统在帮你管理。自动帮你分配管理地址,也不可能让你胡乱读写。这有点像“有个爹”;

你的脑子里要有想象力,知道怎样操作才能达到自己想要的结果;清楚每一位数据的变化;
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 17:10:48 | 显示全部楼层
依依不舍 发表于 2019-5-20 16:18
iic通讯不是难点,要8个16进数为一组,并且有很多组存进eeprom中,但电脑传进eeprom中不确定每组数的首地 ...

以一维(或多维)数组形式将数据存入eeprom,存入顺序格式可以自定义。
PC与单片机通信,必须建立握手协议。
在单片机串口中断程序里,根据协议码(自定义)获得读取eeprom数组所需内容的地址。
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 17:37:16 来自手机 | 显示全部楼层
这么个思路看行不:单片机开串口,或者模拟串口。pc通过串口给单片机数据。数据结构如下:第一字节,功能位,比如aa触发写入命令,mcu收到后回复00,表明就绪。再次下发2字节地址码,在mcu中合成16位地址码。再次下发一个字节,是要写入eeprom的数据。muc写完后,读出刚才写入数据,与收到数据一致,则返回到pc上这个数据。如果不一致,则发送错误代码01.这样流程。  关于数据多次写入这种,上位机要先编码2字节地址码,一字节数据码。这样罗列下去,顺序阀就可以写入了。mcu处理相对简单了。收到启动命令后,准备写入eeprom.收到两位地址码合成int.第三位数据码存入。这样
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 17:51:46 来自手机 | 显示全部楼层
其实我也想搞这么个设备。单片机的eeprom毕竟空间不小。不使用毕竟浪费。靠mcu写入,占资源不说,代码也很多。最好方式就是一次性写入,完事程序按照需求调用即可。比如文字图形显示用的数组等。虽然是静态不占用rom,但是占用程序空间的。之前做法是mcu程序先把数据写入eeprom.完事在重新下载应用程序这样。在在正新应用程序中调用eeprom的数据。巨麻烦
回复 支持 反对

使用道具 举报

     
发表于 2019-5-20 18:48:32 | 显示全部楼层
依依不舍 发表于 2019-5-20 16:18
iic通讯不是难点,要8个16进数为一组,并且有很多组存进eeprom中,但电脑传进eeprom中不确定每组数的首地 ...

这里“不确定每组数地址”是指“之前传递并存储过不确定数量的东西,所以新传的东西不一定放在哪里”对吧?

否则理解不来吧,传进 eeprom 时候需要指定地址的(什么地址写什么数据),怎么会不确定首地址?
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-5-21 10:00:36 | 显示全部楼层
t3486784401 发表于 2019-5-20 18:48
这里“不确定每组数地址”是指“之前传递并存储过不确定数量的东西,所以新传的东西不一定放在哪里”对吧 ...

电脑传到存储器中的数据字节可能长度不一致,每组数据之间的地址没有规律可以应用起来。如果每组数据定义同样的长度,又浪费了存储空间。
回复 支持 反对

使用道具 举报

     
发表于 2019-5-21 11:46:28 | 显示全部楼层
依依不舍 发表于 2019-5-21 10:00
电脑传到存储器中的数据字节可能长度不一致,每组数据之间的地址没有规律可以应用起来。如果每组数据定义 ...

了解了,LZ 这是要自定义文件系统。

方法有很多,例如“链表”,即每个数据块都存储指向下个数据块的指针,这样一来数据块大小可任意。

再复杂了就是类似 FAT 的文件系统,先全局存储文件分配表(很多指针),然后再吧数据放到正确的位置。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-5-22 13:01:20 | 显示全部楼层
zaq 发表于 2019-5-20 17:37
这么个思路看行不:单片机开串口,或者模拟串口。pc通过串口给单片机数据。数据结构如下:第一字节,功能位, ...

如果用modbus协议让电脑和单片机传送数据,然后单片机对数据进行编码存入eeprom中,读rom中数据时单片机又解码出来,这样可行不
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-5-22 13:13:37 | 显示全部楼层
zaq 发表于 2019-5-20 17:51
其实我也想搞这么个设备。单片机的eeprom毕竟空间不小。不使用毕竟浪费。靠mcu写入,占资源不说,代码也很 ...

存到eeprom的数据时预先编好地址的吗?之后单片机读eepromr中的数据直接寻址就行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 08:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表