搜索
bottom↓
回复: 28

串口协议转换器之S64篇

[复制链接]

出0入0汤圆

发表于 2006-3-8 12:37:57 | 显示全部楼层 |阅读模式
各位大虾:下面的方案虽然没有经过实际检验,但是因为是我深思熟虑的结果。所以个人认为可行性很高、性价比很高、科技含量比较高,如果工程进行的话,并不需要很多时间和金钱。



基于ATMEL的SAM7S64和ATMEL的M8作为整个硬件的基础。我的方案是:使用SAM7S64的三个串口作为基本串口,即一个RS232/422两个RS232/自动RS485/RS422;如果需要更多地串口参与那么就额外增加 N个M8 作为串口缓冲器(类似于16C550,但是缓冲区更大)。



扩充串口,与M8通信,使用SPI接口。利用ATMEL的SAM7S64的SPI接口可以扩充到15个设备的便利和接口本身速度非常快的特点。但是要注意ATMEL的SAM7S64的PIO与外围设备复用IO口。(读者可以自己根据数据资料来分配)。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2006-3-8 12:43:59 | 显示全部楼层
方案一:



一个RS232/422/485串口(调试串口),两个RS232/自动RS485/RS422串口(S64的串口具有485功能);利用SPI接口扩充15个RS232/RS485/RS422串口。唯一缺点是:没有后备存储器,例如EEPROM或DATAFLASH等,如果数据不能及时上报服务器的话,可能丢数据。不过可以去掉个扩充串口,加挂ATMEL出品的串行的DATAFLASH作为后备存储器。

出0入0汤圆

 楼主| 发表于 2006-3-8 12:47:17 | 显示全部楼层
方案二:



一个RS232/422/485串口(调试串口),两个RS232/自动RS485/RS422串口(S64的串口具有485功能);利用SPI接口扩充6个RS232/RS485/RS422串口;另外用I2C总线扩充串行EEPROM作为后备数据存储器。缺点是:因为S64的I2C总线没有PDC,所以在数据存储读取上效率不高。

出0入0汤圆

 楼主| 发表于 2006-3-8 12:51:20 | 显示全部楼层
方案三:



大致内容同方案一,区别是扩充15个MCP2515的CAN总线收发器。



方案四:



大致内容同方案二,区别是扩充6个MCP2515的CAN总线收发器。



所有的方案都有USB接口。

出0入0汤圆

 楼主| 发表于 2006-3-8 13:03:07 | 显示全部楼层
现在,我谈谈软件构架设想。



在这个几个方案中,都可以使用U/COS系统。因为所有的设备,不管是基本串口还是用SPI扩充的串口都有PDC与S64片内的RAM相连,对于系统来说,就是应用代码对消息处理的过程。因为编程者主要处理消息内容的翻译工作,如果只是数据的搬移那就更简单了!

出0入0汤圆

 楼主| 发表于 2006-3-8 13:10:05 | 显示全部楼层
SPI工作在PDC的中断方式方式上,用来交换S64内存与M8的内存的数据,不管是否有数据交换。这个中断由系统维护,用户程序不直接与SPI接口PDC中断响应程序打交道。

出0入0汤圆

 楼主| 发表于 2006-3-8 13:14:53 | 显示全部楼层
为每个串口都建立一个消息队列,用户维护消息队列内的数据包。

出0入0汤圆

 楼主| 发表于 2006-3-8 13:17:03 | 显示全部楼层
所有接口都是中断收发

出0入0汤圆

 楼主| 发表于 2006-3-8 13:21:29 | 显示全部楼层
这个东西,测试很方便。可以自发自收,因为u/cos提供系统自测试功能,利用一个基本串口输出结果。

出0入0汤圆

 楼主| 发表于 2006-3-8 13:41:28 | 显示全部楼层
这么做可比用什么串口扩展芯片扩出来的串口多,而且因为操作是内存到内存,不必要占用定时器(使用嵌入式系统最大的忌讳)。



欢迎各位同仁丰富这个话题,同时我们也鄙视在arm7上不使用系统的工程师(除了需要高速和使用算法的方案)。

出0入0汤圆

 楼主| 发表于 2006-3-8 13:45:45 | 显示全部楼层
另外,串行dataflash中因为其内部结构特点,也适合使用文件存储系统。实时操作系统 + 文件存储系统,难道这个不是一个很好的嵌入式系统的应用例子吗?!

出0入0汤圆

 楼主| 发表于 2006-3-10 09:19:00 | 显示全部楼层
如果比较介意成本,可将S64换成MEGA128,MEGA8515等较低端的芯片。

出0入0汤圆

发表于 2006-8-10 14:02:19 | 显示全部楼层
昏到!楼主的方案感觉不爽呀!

一般的协议转换都是 RAM中进行的,哪里需要外部的FLASH,这样只会降低处理速度,需要写一次还要读一次!!

哪里比得上RAM了????



协议的转换需要为接收的数据开辟双缓冲区或者更多,按照乒乓方式进行处理!



多串口时可以用UART 16C550等来处理!!



技术需要多实践呀!!!

出0入0汤圆

 楼主| 发表于 2006-8-14 17:32:40 | 显示全部楼层
一片16c550是20元,必须使用带外扩总线的cpu,一个mega8只要7元。我这里不是考虑多人协作开发。mega8的程序在双龙电子可以得到(要张光盘),只需要做atarm的程序。而且你考虑过板的面积吗?还有在一定范围内灵活的扩展能力吗?这些16c550是不具备的。另外用mega8扩展串口,本身还可以利用mega的16M的指令流协助处理。这样不是很好吗?



外部flash只是用于如果失去主机的通信,只好暂时存储在flash中。



如果用16c550,那么处理它的输入输出数据只好借助于cpu了。假设9600波特率,那么每个串口所损耗的指令流是可以估计的,例如200k条指令,那么16个串口就是已经是接近3.2M条指令了。这里不包括系统的开销和太多的串口数据的处理。那么你又如何面对如此大的需要处理的数据量呢?



到底是谁没有工程经验呢?提出这个方案之前,我曾经看过一些设备,他们扩展串口的方法是at89s2051的i2c总线。一般是扩出4到5个串口。我换用mega8就是为了降低成本和提高开发速度和实际应用速度。况且,at的产品在接口互通性上,理论上,是做过试验的,内部电子模块也是通用的,兼容性会更好!



你讲的双缓冲区的用法在mega8中的就使用,不用在atarm上使用。一是分担atarm的数据缓冲区的压力(即使是atarm也只有16kB的ram)。



楼上的兄台如果能够提出更好的方案,我愿听其祥。如果还是照抄前人的方案,那就不用灌水了。你是在浪费“阿莫”的服务器的存储空间,我们也应该为“阿莫”想想。

出0入0汤圆

发表于 2006-8-19 15:38:04 | 显示全部楼层
帅哥你用FLASH的测试速度如何?在115200下测试过没有???

我的RS232/485已经在制作中!准备采用PINGPANG方式切换RAM!

楼主有测试的平台吗?



另外串口的协议转换最主要的是性能,楼主的独创令人钦佩,但是能否就你的理论作个试验的平台并做完整的测试了????

在此抛砖引玉,希望楼主验证自己的理论!!!



关于老兄的

楼上的兄台如果能够提出更好的方案,我愿听其祥。如果还是照抄前人的方案,那就不用灌水了。你是在浪费“阿莫”的服务器的存储空间,我们也应该为“阿莫”想想。



希望老兄以德服人,"讽刺挖苦"对贵兄的成长不利亚!!

出0入0汤圆

 楼主| 发表于 2006-8-23 12:44:15 | 显示全部楼层
在这里,是思想火花的撞击。这个方法不是个新鲜的方案,只能成为改良的东西。

至于你提到的平台,我已经制做好了并且已经测试了。老板始终不同意,只好自己出钱制作了!



硬件连接的参数是:每个扩展的串口(mega8)工作在从设备模式spi总线模式0;串口的速度随便你设置(我曾经将波特率设置到1MHz多),主机(sam7s64)spi的波特率设置成2MHz/8位,利用4-16地址译码器扩出15个mega8(因为Y15不能用),每个字节传输耗时10多个微妙。效果很好,下一步是将15个mega8的管理权集中在一个进程中,其他进程利用消息队列对数据串管理。



因为mega8本身有1024字节的ram,做pingpong缓冲区很容易。因为我用的14.7456MHz晶振,那么15个mega8的指令流量就是220MIPS,加上主机(sam7s64)的30MIPS(保守的利用),一共是250MIPS的指令流量,这已经相当于1个ARM9了!



至于5V与3.3V电平转换,也很简单。3.3V到5V用74HCTXXX类LSI片子就可以解决,5V到3.3V用分压电阻处理不就解决了嘛。



温馨提示:4-16地址译码器是74HCT154。



16C550的扩展模式,不仅价格昂贵,而且它的管理权都必须由主机管理。即使它有16字节的FIFO,也需要一个ARM9的指令流量。而且扩展不灵活,这是因为它是并行总线扩展所决定的。在这个需求变化巨大的前提下,有什么比方案灵活、性价比高更重要的事情?!



我现在开发模式是:IAR + MULTI-ICE + SAM7S64顶板 + 底板 + 串口扩展板。需要SAM7S64顶板空板的可以与我联系。我的电话是13241737692,发短信给我。我会基本上免费快递给你(邮费得自理!)。

出0入0汤圆

发表于 2006-8-23 19:06:35 | 显示全部楼层
不太明白意图,瞎设想一下,飞利浦的16c554可以扩4个串口1m的¥35,用个带usb2.0和并行扩展口的mcu。不知道合适不合适。

不合适只当我瞎说。

出0入0汤圆

发表于 2006-8-23 20:40:52 | 显示全部楼层
请上传制作的内容,测试的项目比如SPI .RS232等具体测试的图片和视频!



如果有SCH/PCB,和原代码等不妨公布给大家,以便把贵兄的创新高论给大家醍壶灌顶!!!!!

出0入0汤圆

 楼主| 发表于 2006-8-24 09:16:33 | 显示全部楼层
怎么上传东西?我还没有上传过呢。哪位高人告诉我。



楼上的兄弟,不必总是用一种“过于恭敬”的语气讲话。第一,没有必要;第二,好像我把你怎么着了;第三,什么“醍壶灌顶”粗人的我不太懂这种词语。不知道是应该理解为褒义词呢还是贬义词?如果你想骂人就直接出口,这样也能体现你的爱憎分明、光明磊落嘛的个性,或者激烈的争论也可以给大家一些起始。

出0入0汤圆

 楼主| 发表于 2006-8-24 17:34:43 | 显示全部楼层
16c554大概多少钱?35元?我认为不可能。应该是35X4差不多。35元应该是16c550的不含税的价格。

出0入0汤圆

发表于 2006-8-25 12:16:39 | 显示全部楼层
在回复帖子的下方

有下面的文字!



上传文件(10M以内)  加入表情 上传巨大文件(无限大的文件)



根据内容的大小选择 “上传文件(10M以内)”或者“上传巨大文件(无限大的文件)”

出0入0汤圆

 楼主| 发表于 2006-8-26 14:50:16 | 显示全部楼层
上传了实物的情景短片

出0入0汤圆

 楼主| 发表于 2006-8-26 14:51:21 | 显示全部楼层
名字是aa.rar

出0入0汤圆

 楼主| 发表于 2006-8-26 14:56:39 | 显示全部楼层
点击此处下载armok01127215.rar

sam7s64核心板的实物片断

出0入0汤圆

 楼主| 发表于 2006-8-26 15:00:56 | 显示全部楼层
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_SPI );

      AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, AT91C_PA11_NPCS0 | AT91C_PA12_MISO | AT91C_PA13_MOSI | AT91C_PA14_SPCK | AT91C_PA31_NPCS1, 0);

      AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA30_NPCS2 | AT91C_PA3_NPCS3);

      AT91F_SPI_Enable(pSPI);

      AT91F_SPI_CfgMode(pSPI, AT91C_SPI_MSTR | AT91C_SPI_PS_VARIABLE | AT91C_SPI_PCSDEC | (AT91C_SPI_PCS & 0x1) | (AT91C_SPI_DLYBCS & 0xff) );      

      pSPI->SPI_CSR[0] = AT91C_SPI_BITS_8 | AT91C_SPI_NCPHA | 0x0f0f1800; // mode 0 波特率2MHz

      pSPI->SPI_CSR[1] = AT91C_SPI_BITS_8 | AT91C_SPI_NCPHA | 0x0f0f1800; // mode 0 波特率2MHz

  

      kk = 0x00055;     //初始化发送数据:0设备,数据8位0x55







      pSPI->SPI_TDR = kk;//发送





      kk = pSPI->SPI_RDR;//返回数据

出0入0汤圆

 楼主| 发表于 2006-8-26 15:04:32 | 显示全部楼层
因为我现在用的3-8译码器所以只用了npcs0 npcs1 npcs2,只初始化了SPI_CSR[0]和SPI_CSR[1]。

发送一个字节的数据花费2us多的时间,前后间隔时间比较大(故意的),防止飞线上的波形延迟现象。等到制版后,需要仔细调整其参数。

出0入0汤圆

 楼主| 发表于 2006-8-26 15:12:15 | 显示全部楼层
曾经有人告诉我,sam7系列的spi接口有问题。可是,到现在为止,我还没有发现它的问题。我猜想大概问题出现在spi在使用pdc的状况下。但这也是可以避免的,方法很简单,就是在打开pdc使能,dma通道开始工作后,先别忙着作别的事情,先随便空闲4个指令周期,例如作些无用的动作比如随便自己++等,然后再接着作被的东西。



另外,不要随便打开多个pdc设备,否则发生争抢总线的几率会很大。譬如,你打开了三个串口的pdc了,那你就别打开spi的pdc设备了,可以用中断方式等。

出0入0汤圆

发表于 2006-9-29 11:41:57 | 显示全部楼层
我也考虑过用m8扩展串口,只是没做。支持一下。

出0入0汤圆

发表于 2010-11-23 11:07:07 | 显示全部楼层
MARK
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 10:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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