打印
[Cortex-M0技术交流]

M0做下载工具遇到的问题,求助帖。

[复制链接]
1761|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dsoyy|  楼主 | 2012-9-5 22:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件架构:
PC端用串口助手发送文件 -》M0516 接收串口数据-》 IO模拟I2C链接AT24C512

功能描述:
PC串口发送的BIN文件,M0接收到串口数据,将数据写到外扩的EEPROM,采用IO模拟的方式,写入的文件为64K大小。

目前思路:
串口设置为接收中断,接收满16byte(eeprom的一个page大小),在中断将该16byte转存给一个EEbuf,同步置一个标志位。
主循环检测到标志后,开始写一个page.
目前问题:
主频设置12M,波特率9600,串口接收的BIN文件小(不足1K)的时候,可以正常写入。串口数据大于1K的时候,数据会出错。
本人猜测,因为写入eeprom动作执行之后需要等待一段时间,这就导致写EEPROM的速度小于串口接收的速度,导致前面的数据被后面接收的数据覆盖,出现了写错误。但是降低了波特率到4800,问题依旧存在。

解决办法只想到了将主频倍频到50M,也没有其他好的办法,请高手指点。


附上关键代码:

串口接收中断部分:
char length = 128;   //1page的大小
void UART0_IRQHandler(void)
{
    char i ;


    if(UA0_ISR & RDA_INT)//检查是否接收中断
   {
      RevBuf[RevIndex ++] = UA0_RBR;
     
      if(RevIndex == length)
      {
         for(i = 0; i < length; i ++)
        {
            EeBuf = RevBuf; //转存一page数据
            RevBuf = 0;        //清空buf  
         }

         RevIndex = 0;//指针归零
         Rcv_flag = 1;//置位标志位   
       }
    }

}
主循环部分:

while(1)
{
  if(Rcv_flag)
  {
   EepromSequentialWrite(addr,EeBuf,length);// 写1 page
   addr += length;    //地址偏移量
   Rcv_flag = 0;      清除标志位
   //这里应该加适量的延时时间,保证写eeprom完成
  }
}


,再说一下问题:接收的文件很小的时候可以写如eeprom,接收文件大的时候写入的数据是错的。

相关帖子

沙发
dsoyy|  楼主 | 2012-9-5 23:14 | 只看该作者
难道是I2C模拟的时候IO操作调用了库的关系??

使用特权

评论回复
板凳
plc_avr| | 2012-9-6 08:32 | 只看该作者
你这样子玩,不出错才怪了。

使用特权

评论回复
地板
plc_avr| | 2012-9-6 08:35 | 只看该作者
首先没有协议,直接发这么多数据,你也没有用到多个缓存,这边没存储完新数据又来了。可以考虑,发送一页上位机等待下位机完成才发新一页数据,有问有答,才好玩,呵呵。

使用特权

评论回复
5
dsoyy|  楼主 | 2012-9-6 12:33 | 只看该作者
目前。
发送文件大于48*128第一个128写的数据也是错误数据
小于这个数值,数据正确。

使用特权

评论回复
6
dsoyy|  楼主 | 2012-9-6 12:36 | 只看该作者
手动发送字符串,一次数据大于48*128,写的数据也是错误数据

如一次长度为128,手动触发连续发送,没有问题。

写eeprom要这么长时间啊

使用特权

评论回复
7
plc_avr| | 2012-9-6 13:12 | 只看该作者
你还没明白我的意思,你的数据被覆盖了。当然出错。

使用特权

评论回复
8
dsoyy|  楼主 | 2012-9-6 13:15 | 只看该作者
如股票我写eeprom的速度小于串口的速度,是不会产生覆盖的。
计算下应该不覆盖才对

使用特权

评论回复
9
mcu5i51| | 2012-9-6 18:51 | 只看该作者
自己弄个简单的协议吧,最好返回校验字节,免得出了错都不知道

使用特权

评论回复
10
dsoyy|  楼主 | 2012-9-6 21:57 | 只看该作者
总体速度满了

使用特权

评论回复
11
dsoyy|  楼主 | 2012-9-7 09:41 | 只看该作者
写eeprom时来了中断,中断时间若是偏长就出问题了吧

使用特权

评论回复
12
dsoyy|  楼主 | 2012-9-15 23:38 | 只看该作者
结贴,写eeprom的高低地址写反了。

使用特权

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

本版积分规则

144

主题

566

帖子

3

粉丝