打印

52通信的问题

[复制链接]
2243|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wkatt1002|  楼主 | 2009-8-17 09:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近做一个串口通信接受用iic通信存储到512中的设备。主要部分是89c52+24c512.
一次要传送接近64k的数据,从开始通信到全部存储完成要10几分钟的时间。
那位大虾能推荐一款其他的片子或者存储芯片,考虑过用39sf020,由于需要很少字节反复擦写,可能这个速度上也不会太快。最好能推荐个其他类型单片机,想借这个机会了解下其他类型单片机。。谢谢

相关帖子

沙发
殷华| | 2009-8-18 19:54 | 只看该作者
用到iic的通讯,我之前没用过,希望高手指点

使用特权

评论回复
板凳
ningling_21| | 2009-8-18 20:29 | 只看该作者
avr的MEGA系列的型号带有IIC接口,内部有EEP,速度快,可以考虑...

使用特权

评论回复
地板
chunyang| | 2009-8-18 22:02 | 只看该作者
速度的瓶颈在于串口波特率和存储器写入速度二者中的小值,I2C可以用普通IO模拟,只要编程工艺合适,MCU就不是速度的瓶颈,提高MCU的处理速度也就没有本质意义。当然,如果你的I2C模拟程序及串口通讯、存储器写入程序的工艺性不佳导致速度反而低于前述“小值”,这时换用更快的MCU才有意义,但优化程序也是解决之道,只是对程序编制者的要求更高而已。

使用特权

评论回复
5
wkatt1002|  楼主 | 2009-8-19 10:13 | 只看该作者
本帖最后由 wkatt1002 于 2009-8-19 10:21 编辑

谢谢大家
4# chunyang
chunyang大哥,我看我的程序里面通信应该已经没问题了,主要就是iic通信的问题,我在网上还有很多书上看到结束iic总线后总是用延时10ms释放总线。我感觉大部分时间都用在这个上面了,我一次写6000*8个字节,每个字节延时10ms的话,算下来要好长时间,有没有其他方法可以不用延时10ms?这个10ms是在总线结束程序后用的,如果不用的话,连续写入就会出错。iic里面SCL为高,SDL由低变好的结束程序不是真正意义上的结束么??能给我解释下么??

使用特权

评论回复
6
冷漠| | 2009-8-19 15:02 | 只看该作者
10ms是写一页的时间,24C512一页=128字节。也就是按照标准RAM的写入速度写入128字节必须等待5—10ms内部固化时间。EEROM写入是需要时间的。算下来512K全部写满需要5分多钟。不算慢。

使用特权

评论回复
7
wkatt1002|  楼主 | 2009-8-19 23:06 | 只看该作者
本帖最后由 wkatt1002 于 2009-8-19 23:10 编辑

6# 冷漠 十分感谢冷漠大哥,终于明白了怎么一会事,我找了好久没有找到要等待延时的原因。
假如我如果连续写入而不是每次启动iic总线只写一个字节的话就最多写入128个字节就要等待一次时间吗》?

使用特权

评论回复
8
zcl_l| | 2009-8-19 23:20 | 只看该作者
用SPI接口单片机和SPI FLASH,会速度快,容量大。

使用特权

评论回复
9
wkatt1002|  楼主 | 2009-8-20 12:36 | 只看该作者
本帖最后由 wkatt1002 于 2009-8-20 12:38 编辑

4# chunyang 谢谢chunyang大哥
还有个问题,iic通信有一个检测信号ack,这个检测信号不是在512写完一个字节而且固化完返回的嘛?还是iic总线已经结束之后才进行的固化?

使用特权

评论回复
10
wkatt1002|  楼主 | 2009-8-20 12:40 | 只看该作者
3# ningling_21
谢谢,avr有个spi总线,如果用spi总线是不是快些?

使用特权

评论回复
11
wkatt1002|  楼主 | 2009-8-20 12:46 | 只看该作者
8# zcl_l
avr和c68系列好像很多都有,能给我推荐款片子和存储器么?存储器要64k或者更大的,谢谢,,

使用特权

评论回复
12
yewuyi| | 2009-8-20 12:51 | 只看该作者
再快也没有用,EEPROM的写时间就限制住了啊,除非是铁电拉,那个东西写起来基本上不需要再考虑什么时间延迟拉。


39sf020应该是FLASH,这个东西也一样是慢啊,而且寿命比EEPROM短。

使用特权

评论回复
13
冷漠| | 2009-8-20 12:59 | 只看该作者
本帖最后由 冷漠 于 2009-8-20 13:01 编辑

很简单的道理:512内部有128字节的缓冲区,当你写入第一个字节的时候,512内部已经并行开始固化工作。由于写入速度总是大于固化速度,所以即使你写入完毕一页128个字节,也用不了5ms吧,那么512内部固化一个字节需要5ms(手册上说明的),第一个字节5ms,并行重叠最后一个字节5ms。传输128字节算最大时间5ms,加起来一共最大10ms。也就是说,从每页最后一个字节传输完毕算起,延时5ms 就可以继续写如下一页了。可靠点,延时10ms吧。

512应该写入完成后有一个信号传出来,还是外部用读最后一个字节来验证是否写入完成,没研究过。

使用特权

评论回复
14
mohanwei| | 2009-8-20 13:27 | 只看该作者
页写等待10ms足够了(部分手册写的是最小5ms最大15ms……atmel的eeprom改得很频繁,我都怀疑电脑里有超过10种datasheet了,有一次还买到了一盘打着"ATMLH"字样的512,兴冲冲的让芯片商退货,把人家也吓了一大跳),全部写完也就五六分钟。合理设计数据结构,增加一个校验单元就行了,CRC32比较适合。

使用特权

评论回复
15
wkatt1002|  楼主 | 2009-8-20 14:25 | 只看该作者
12# yewuyi
谢谢,,能说下什么是铁电拉么??还有能给我推荐个存储器么?、占用管脚不要太多,,

使用特权

评论回复
16
wkatt1002|  楼主 | 2009-8-20 14:37 | 只看该作者
14# mohanwei
谢谢,校验单元要怎么加呢?能给个思路么?是想冷漠大哥提到的,存完以后读取一个字节来进行检验?

使用特权

评论回复
17
wkatt1002|  楼主 | 2009-8-20 14:41 | 只看该作者
本帖最后由 wkatt1002 于 2009-8-20 14:55 编辑

13# 冷漠
谢谢,那是不是就意味着我连续写入字节只要不超过一页,,写入每个之间就不需要延时,超过一页,就要延时一次,等待他固化完成?

使用特权

评论回复
18
mohanwei| | 2009-8-20 16:02 | 只看该作者
例如把校验单元放到数据区后面,存储数据结构:
typedef struct
{
       unsigned char Dat[_Pa_Len];
       unsigned long CRC32;
}PaStruct;
读取的时候(一般是开机),把读到的数据校验一下看是否正确。

使用特权

评论回复
19
yewuyi| | 2009-8-23 10:47 | 只看该作者
1、你使用GOOGLE搜索一下就可以看到铁电存储器的大把信息,推荐深圳华胄或者广州周立功或者杭州利尔达这三个供应商。
2、校验的方法有很多种,但需要你自己的应用软件的配合,例如和校验,例如CRC校验等均可。
3、一个页之内的数据连续发送,发送完成后延迟规定的时间完毕即可。

使用特权

评论回复
20
wkatt1002|  楼主 | 2009-8-25 12:39 | 只看该作者
再此感谢各位大虾

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

57

帖子

0

粉丝