串口读取问题

lifewing   2010-3-8 19:55 楼主
PowerPC的板子,现成的评估板,内核是MPC8260。板子上没有标准的串口,只有一个2X5(10针)的接口,集成了两个SMC(串行管理控制器),针脚定义跟普通串口差不多,使用时只用一个。硬件就是这样,嵌入式系统是VxWorks。
编了一个读串口的小程序,用Select阻塞在板子的串口处,一旦接收到数据就读取并显示出来,主机这边用串口调试助手向串口发数据。按说点了发送之后数据就到板子的串口了,select函数应该有反应,然后触发读取和显示。但是目前的状况是,发送时必须在数据后附一个回车,否则程序没反应。如果连续发送数据都不带回车,那么直到附带回车后之前发送的数据才会被程序读取和显示。
这是什么情况,怎么感觉跟字符串读取似的呢?

PS:板子上的SMC口在手册里是按Monitor Port定义的,也就是对外显示的通道。我需要它只是一个纯粹的数据传输串口,有这方面的影响么?

读取部分的程序如下:
  1.         ioctl(fd,FIOFLUSH,0);

  2.         FD_ZERO(&saveFds);                  /* 初始化Set,所以位置零 */
  3.         FD_SET(fd,&saveFds);                /* 设置fd对应的位 */

  4.         while(GoOn)
  5.         {
  6.                 readFds = saveFds;
  7.                 if ((Fdsnum = select(fd+1,&readFds,NULL,NULL,&tv)) == ERROR)
  8.                         printf("Error in select.\n");
  9.                 else
  10.                         printf("Number of file descriptors ready for reading = %d\n",Fdsnum);
  11.                 if (FD_ISSET(fd,&readFds))       /* fd读数据就绪 */
  12.                 {
  13.                         bzero(Rbuff,512);
  14.                         /*ioctl(fd,FIONREAD,(int) &readCnt);                 /* 判断接收数据缓冲区是否有数据到来 */
  15.                         if ((readCnt = read(fd,Rbuff,512)) > 0)
  16.                                 printf("Read : %s .\n",(char *)Rbuff);
  17.                         if (strcmp(Rbuff,QUIT) == 0)
  18.                                 GoOn = FALSE;
  19.                 }
  20.         }

回复评论 (9)

PowerPC本来就是SMC(串行管理控制器),实现UART功能,

帮顶下。
MARK.
点赞  2010-3-8 20:35
引用: 引用 1 楼 kyzf 的回复:
PowerPC本来就是SMC(串行管理控制器),实现UART功能,

帮顶下。
MARK.

手册上写还有四个SCC,也提到了UART,不是一回事吧?
小白,完全不明白。
点赞  2010-3-8 21:17
SMC\SCC都是串行控制器,根据不同的配置方式可以用来实现HDLC、UART、以太等功能。
不过大多数的BSP给出的方式都是用SMC来实现UART的。
点赞  2010-3-8 21:36
引用: 引用 3 楼 heaven_redsky 的回复:
SMC\SCC都是串行控制器,根据不同的配置方式可以用来实现HDLC、UART、以太等功能。
不过大多数的BSP给出的方式都是用SMC来实现UART的。

手册里就是这么说的。
关于Monitor Port的问题你有什么见解么?
点赞  2010-3-8 21:51
scc是高速接口,支持的协议多一些,
smc是低速接口,通常用作uart,但是速率也够用的,
点赞  2010-3-9 07:15
引用: 引用 5 楼 yangb_soso 的回复:
scc是高速接口,支持的协议多一些,
smc是低速接口,通常用作uart,但是速率也够用的,

MPC8260提供了4个SCC和两个SMC,但是板子的上串口接口是从SMC出来的,所以只考虑SMC就可以了是吧?
点赞  2010-3-9 09:28
如果只是看UART的话,指考虑SMC就可以了。
SCC比较典型的是HDLC之类的高速通信信号,感兴趣可以看看。
实际上860、8260这些通信模型都是BD表为核心的,从低速的学起比较利于对其通信方式的理解,I2C之类的总线也可以比较好的促进理解。
点赞  2010-3-11 21:06

9楼 wtf 

通过IO重定向的方式将Monitor Port从SMC上剥离,终于得到了一个纯粹的数据串口。谢谢各位的回复!
点赞  2010-3-12 10:40
你的情况是:从pc的串口向板子发送数据 后加回车。也就是 应用发送数据--》驱动 只有加回车才可以实现发送功能。

如果是 从板子驱动向 串口发送的数据 要被上面的应用程序接收,怎么办啊?
即 :驱动--》发送数据到 串口---》应用程序接收,    这个时候也要按 回车键 才会被接收,怎么样做到不按回车键 就被接收呢??
http://topic.eeworld.net/u/20100621/22/fff82a57-b8c6-4fcd-a092-ccbe944f99fb.html
这是我遇到的问题。欢迎交流
点赞  2010-6-22 16:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复