共2条
1/1 1 跳转至页
问
各位大虾:下面的方案虽然没有经过实际检验,但是因为是我深思熟虑的结果。所以个人认为可行性很高、性价比很高、科技含量比较高,如果工程进行的话,并不需要很多时间和金钱。
基于ATMEL的SAM7S64和ATMEL的M8作为整个硬件的基础。我的方案是:使用SAM7S64的三个串口作为基本串口,即一个RS232/422两个RS232/自动RS485/RS422;如果需要更多地串口参与那么就额外增加 N个M8 作为串口缓冲器(类似于16C550,但是缓冲区更大)。
扩充串口,与M8通信,使用SPI接口。利用ATMEL的SAM7S64的SPI接口可以扩充到15个设备的便利和接口本身速度非常快的特点。但是要注意ATMEL的SAM7S64的PIO与外围设备复用IO口。(读者可以自己根据数据资料来分配)。
方案一:
一个RS232/422/485串口(调试串口),两个RS232/自动RS485/RS422串口(S64的串口具有485功能);利用SPI接口扩充15个RS232/RS485/RS422串口。唯一缺点是:没有后备存储器,例如EEPROM或DATAFLASH等,如果数据不能及时上报服务器的话,可能丢数据。不过可以去掉个扩充串口,加挂ATMEL出品的串行的DATAFLASH作为后备存储器
方案二:
一个RS232/422/485串口(调试串口),两个RS232/自动RS485/RS422串口(S64的串口具有485功能);利用SPI接口扩充6个RS232/RS485/RS422串口;另外用I2C总线扩充串行EEPROM作为后备数据存储器。缺点是:因为S64的I2C总线没有PDC,所以在数据存储读取上效率不高。
方案三:
大致内容同方案一,区别是扩充15个MCP2515的CAN总线收发器。
方案四:
大致内容同方案二,区别是扩充6个MCP2515的CAN总线收发器。
所有的方案都有USB接口。
现在,我谈谈软件构架设想。
在这个几个方案中,都可以使用U/COS系统。因为所有的设备,不管是基本串口还是用SPI扩充的串口都有PDC与S64片内的RAM相连,对于系统来说,就是应用代码对消息处理的过程。因为编程者主要处理消息内容的翻译工作,如果只是数据的搬移那就更简单了!
SPI工作在PDC的中断方式方式上,用来交换S64内存与M8的内存的数据,不管是否有数据交换。这个中断由系统维护,用户程序不直接与SPI接口PDC中断响应程序打交道。 为每个串口都建立一个消息队列,用户维护消息队列内的数据包。
另外,串行dataflash中因为其内部结构特点,也适合使用文件存储系统。实时操作系统 + 文件存储系统,难道这个不是一个很好的嵌入式系统的应用例子吗?!
这么做可比用什么串口扩展芯片扩出来的串口多,而且因为操作是内存到内存,不必要占用定时器(使用嵌入式系统最大的忌讳)。
欢迎各位同仁丰富这个话题。
答 1: good 答 2: atmel有现成的芯片可以作这个有网络,CAN,USB device等接口,去atmel网站看看.就是片子比较贵.
现在需要扩展的是USB-host,你的也是device.
比较合适的可能是winbond的710,但是我不知道哪里买. 答 3: 就是啊做这种东西,如果成本太高的话会被CUT掉的。再者,不考虑成本的设计是没有市场前景的。 答 4: re我觉得有ARM做这些,成本不会高的...
相比之下用其它的单片机成本会高些...
只要量大,,,,成本算啥... 答 5: 俺知道串口协议转换器在环境动力监控上使用,还有其它用途嘛?市场上的同类产品的售价如何?
答 6: 算一下这样对么?如下计算:
假设通过SPI扩展RS232,15个,假设最大波特率115200,全双工.
115200bps*2向*15个=3456000bps=3.4Mbps,M8作为SPI从机的时候SPCK最快也就Fosc/4,FoscMax=16M,也就是4Mbps最快了,扣除中断等软件消耗,可能实现起来有速度瓶颈啊.更不要说CAN和USB了. 答 7: 计算没错事实上,监控针对波特率为19.2K, 9600, 4800等低速廉价设备,根本不可能使用115.2K。
9600 * 15 = 144000,完全可以达到,由S64主动访问M8,定数据缓冲区交换数据的方法,不存在双向的问题。PDC的存在使得中断开销降为最低(定大小缓冲区的目的,延长中断间隔时间),那么SPI的速率有个2MHz即可。因为M8存在4分主频的选项,可以使用8M的主频。
我也不主张使用CAN总线,速度高不高低不低的,没有什么意思。所以只是备选方案。
如果使用USB口必须减少扩充串口的数量,否则会有问题的。
以上扩充数量只是根据理论计算,与实际情况略有出入(可能减少一部分)。这与标称通信速度和实际通信速度不能等同是一个道理,请谅解。 答 8: 哦,这样啊,对这个有兴趣,希望跟你继续探讨你说的M8是Mega8么?如果是mega8的话,mega8在这里就类似串口协处理器的意思了,那ARM跟Mega8是如何交换数据?除了SPI还用别的接口么?双口RAM? 答 9: 如果使用双口RAM成本增加30元。理论上也可以使用I2C总线,但是理论上扩展的数量受限制最多10个,理论可以双向通信的数量是最多8个。 答 10: 继续使用SPI接口足矣!因为使能SPI的PDC后,SPI接口会自己将缓冲区内的数据通过AHB连接SPI单元发送到各个M8的缓冲区中,与此同时将M8中的数据写入S64指定缓冲区内,完成这个任务后中断。在中断响应函数中,选通另一个设备继续重复上面的任务。
如果使用I2C总线,就没有PDC的帮助了。必须自己将数据挪移到内存中,每次数据来都必须中断一次,太频繁地中断只会打乱U/COS处理消息,容易导致系统崩溃!这不是使用U/COS时能够想象得到的。 答 11: 顶我认为MEGA8 + MAX232的使用可比带SPI接口的RS232接口芯片便宜,而且也好采购。
另外,增加多少字节的数据缓冲啊? 答 12: 顶对于各个串口间数据包的传输,如果不是很限制传输延时的话,可以等数据包完全收到后将其以消息的方式挂到对应串口的消息队列上;如果延时限制严格,那么就是将数据包分成几部分接收然后加上说明文字挂到对应串口的消息队列上,然后等对应的串口处理应用进程上再组包发出。 答 13: 继续对于破碎的命令包的处理只有通过基本的调试串口报告给上位机了。没办法了!这个地方要注意。
基于ATMEL的SAM7S64和ATMEL的M8作为整个硬件的基础。我的方案是:使用SAM7S64的三个串口作为基本串口,即一个RS232/422两个RS232/自动RS485/RS422;如果需要更多地串口参与那么就额外增加 N个M8 作为串口缓冲器(类似于16C550,但是缓冲区更大)。
扩充串口,与M8通信,使用SPI接口。利用ATMEL的SAM7S64的SPI接口可以扩充到15个设备的便利和接口本身速度非常快的特点。但是要注意ATMEL的SAM7S64的PIO与外围设备复用IO口。(读者可以自己根据数据资料来分配)。
方案一:
一个RS232/422/485串口(调试串口),两个RS232/自动RS485/RS422串口(S64的串口具有485功能);利用SPI接口扩充15个RS232/RS485/RS422串口。唯一缺点是:没有后备存储器,例如EEPROM或DATAFLASH等,如果数据不能及时上报服务器的话,可能丢数据。不过可以去掉个扩充串口,加挂ATMEL出品的串行的DATAFLASH作为后备存储器
方案二:
一个RS232/422/485串口(调试串口),两个RS232/自动RS485/RS422串口(S64的串口具有485功能);利用SPI接口扩充6个RS232/RS485/RS422串口;另外用I2C总线扩充串行EEPROM作为后备数据存储器。缺点是:因为S64的I2C总线没有PDC,所以在数据存储读取上效率不高。
方案三:
大致内容同方案一,区别是扩充15个MCP2515的CAN总线收发器。
方案四:
大致内容同方案二,区别是扩充6个MCP2515的CAN总线收发器。
所有的方案都有USB接口。
现在,我谈谈软件构架设想。
在这个几个方案中,都可以使用U/COS系统。因为所有的设备,不管是基本串口还是用SPI扩充的串口都有PDC与S64片内的RAM相连,对于系统来说,就是应用代码对消息处理的过程。因为编程者主要处理消息内容的翻译工作,如果只是数据的搬移那就更简单了!
SPI工作在PDC的中断方式方式上,用来交换S64内存与M8的内存的数据,不管是否有数据交换。这个中断由系统维护,用户程序不直接与SPI接口PDC中断响应程序打交道。 为每个串口都建立一个消息队列,用户维护消息队列内的数据包。
另外,串行dataflash中因为其内部结构特点,也适合使用文件存储系统。实时操作系统 + 文件存储系统,难道这个不是一个很好的嵌入式系统的应用例子吗?!
这么做可比用什么串口扩展芯片扩出来的串口多,而且因为操作是内存到内存,不必要占用定时器(使用嵌入式系统最大的忌讳)。
欢迎各位同仁丰富这个话题。
答 1: good 答 2: atmel有现成的芯片可以作这个有网络,CAN,USB device等接口,去atmel网站看看.就是片子比较贵.
现在需要扩展的是USB-host,你的也是device.
比较合适的可能是winbond的710,但是我不知道哪里买. 答 3: 就是啊做这种东西,如果成本太高的话会被CUT掉的。再者,不考虑成本的设计是没有市场前景的。 答 4: re我觉得有ARM做这些,成本不会高的...
相比之下用其它的单片机成本会高些...
只要量大,,,,成本算啥... 答 5: 俺知道串口协议转换器在环境动力监控上使用,还有其它用途嘛?市场上的同类产品的售价如何?
答 6: 算一下这样对么?如下计算:
假设通过SPI扩展RS232,15个,假设最大波特率115200,全双工.
115200bps*2向*15个=3456000bps=3.4Mbps,M8作为SPI从机的时候SPCK最快也就Fosc/4,FoscMax=16M,也就是4Mbps最快了,扣除中断等软件消耗,可能实现起来有速度瓶颈啊.更不要说CAN和USB了. 答 7: 计算没错事实上,监控针对波特率为19.2K, 9600, 4800等低速廉价设备,根本不可能使用115.2K。
9600 * 15 = 144000,完全可以达到,由S64主动访问M8,定数据缓冲区交换数据的方法,不存在双向的问题。PDC的存在使得中断开销降为最低(定大小缓冲区的目的,延长中断间隔时间),那么SPI的速率有个2MHz即可。因为M8存在4分主频的选项,可以使用8M的主频。
我也不主张使用CAN总线,速度高不高低不低的,没有什么意思。所以只是备选方案。
如果使用USB口必须减少扩充串口的数量,否则会有问题的。
以上扩充数量只是根据理论计算,与实际情况略有出入(可能减少一部分)。这与标称通信速度和实际通信速度不能等同是一个道理,请谅解。 答 8: 哦,这样啊,对这个有兴趣,希望跟你继续探讨你说的M8是Mega8么?如果是mega8的话,mega8在这里就类似串口协处理器的意思了,那ARM跟Mega8是如何交换数据?除了SPI还用别的接口么?双口RAM? 答 9: 如果使用双口RAM成本增加30元。理论上也可以使用I2C总线,但是理论上扩展的数量受限制最多10个,理论可以双向通信的数量是最多8个。 答 10: 继续使用SPI接口足矣!因为使能SPI的PDC后,SPI接口会自己将缓冲区内的数据通过AHB连接SPI单元发送到各个M8的缓冲区中,与此同时将M8中的数据写入S64指定缓冲区内,完成这个任务后中断。在中断响应函数中,选通另一个设备继续重复上面的任务。
如果使用I2C总线,就没有PDC的帮助了。必须自己将数据挪移到内存中,每次数据来都必须中断一次,太频繁地中断只会打乱U/COS处理消息,容易导致系统崩溃!这不是使用U/COS时能够想象得到的。 答 11: 顶我认为MEGA8 + MAX232的使用可比带SPI接口的RS232接口芯片便宜,而且也好采购。
另外,增加多少字节的数据缓冲啊? 答 12: 顶对于各个串口间数据包的传输,如果不是很限制传输延时的话,可以等数据包完全收到后将其以消息的方式挂到对应串口的消息队列上;如果延时限制严格,那么就是将数据包分成几部分接收然后加上说明文字挂到对应串口的消息队列上,然后等对应的串口处理应用进程上再组包发出。 答 13: 继续对于破碎的命令包的处理只有通过基本的调试串口报告给上位机了。没办法了!这个地方要注意。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |