打印

选型选中STM32F103CBT6,USB与CAN可否可以同时共用!

[复制链接]
5802|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
endlessss|  楼主 | 2008-1-22 15:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前产品选型,选中STM32F103CBT6。
产品需求是MCU要小,在支持CAN,USB的情况小封装越小越好。48只脚的正好。
但是现在得到咨询为此MCU USB和CAN不能同时使用。
因此特来请教版主,对于此MCU是否有其他方法可以做到CAN和USB同时共用。
谢谢,或者推荐一颗符合我需求的MCU。谢谢。
沙发
endlessss|  楼主 | 2008-1-22 16:13 | 只看该作者

香帮主,救火啊!

香帮主,各路大侠快来江湖救急啊!
谢谢。

使用特权

评论回复
板凳
香水城| | 2008-1-22 17:01 | 只看该作者

USB和CAN不能同时使用,但可以在同一个应用中分时使用

这是因为USB和CAN使用了相同的RAM区,同时使用将导致RAM区数据冲突。

使用特权

评论回复
地板
endlessss|  楼主 | 2008-1-22 17:17 | 只看该作者

分时使用,是否可以保证CAN,USB都不丢失数据。

如果分时使用,是否可以保证CAN,USB都不丢失数据。
或者是否可以帮我评估一下在CAN在1Mbps,USB在全速批量传输下,用软件分时使用CAN和USB,是否可以保证CAN和USB的数据都不丢失。
目前我自己的看法是没办法做到。不知各位大侠高见?或者有更好的办法解决这个问题。

谢谢。

使用特权

评论回复
5
香水城| | 2008-1-22 17:58 | 只看该作者

要回答这个问题,需要首先请教楼主一个问题

我对CAN的协议不很清楚,想请教楼主一个问题,在CAN的协议中是否有握手机制,保证在接受设备繁忙时发送设备能够推迟数据报的发送;在USB协议中有NAK的机制可以保证这一点。

我的理解是,任何通信协议都应该有这样的机制,如果是这样的话,4楼的要求应该可以满足,但需要一些软件的控制。

基本原理就是在CAN通信时,把USB的部分置于NAK状态;在USB通信时,把CAN的部分置于对应的NAK状态。具体到你的软件,要根据你的应用环境量身定做了。

使用特权

评论回复
6
starm| | 2008-1-22 19:27 | 只看该作者

这是因为USB和CAN使用了相同的RAM区

对于这样的设计, 不知道优点在哪里?

使用特权

评论回复
7
香水城| | 2008-1-22 20:55 | 只看该作者

坛子中曾经讨论过这个问题,这个与对这两个接口的定位有

请看以前的一个帖子:STM32F103 中的 USB 和 CAN 能不能同时使用?;我在5楼回答了这个问题,我们会重视大家的建议。

使用特权

评论回复
8
grant_jx| | 2008-1-23 00:20 | 只看该作者

CAN没有延时等待发送的机制

CAN是多主,广播方式传输数据,一个节点发出数据要求另一个节点接受,另一个节点的验收滤波器会过滤数据的ID,如果匹配,放入邮箱,同时给出应答信号。如果发出的数据没有应答,超时后发送数据的节点会记录错误到它的发送错误寄存器,虽可通过软件来做是重发数据还是放弃,但这个操作也与协议层的定义有关。

CAN虽然可以通过发送“远程帧”来请求数据,但这样的做法由于是主动方式,会失去实时的优势。

使用特权

评论回复
9
香水城| | 2008-1-23 08:31 | 只看该作者

谢谢8楼的科普介绍,再问一个问题

如果接受方的接收缓冲器满了,如果发送方又有数据来,如何处理呢?

使用特权

评论回复
10
endlessss|  楼主 | 2008-1-23 12:59 | 只看该作者

谢谢各位的回复

感谢8楼回复:
回复9楼:在以往的MCU中,如果接受缓冲区数据满了,又有新的数据接收到,这时就会有写覆盖产生,并且特殊寄存器的MSGLST位被set,表明有一笔报文丢失。

感謝香幫主在5樓的建議。但是CAN沒有類似于USB的NAK的模式。并且對于CAN數據的處理MCU要始終保持Ready狀態。因此分時應該是不可以的了。

如果能將公用的SRAM分割成兩部分,以部分CAN使用一部分USB使用就好了。

使用特权

评论回复
11
香水城| | 2008-1-23 14:52 | 只看该作者

我们正在分析,可能可以通过减小USB的RAM使用量达到共用的

楼主如果方便,可以通过mcu.china@st.com联络,我们详细谈一下可以更深入地讨论。如果我没有错的话,这几天一直在与你们做硬件的同事电话讨论这个问题,但我不确定那一定是你公司的同事。

使用特权

评论回复
12
Endlessss| | 2008-1-23 16:19 | 只看该作者

感謝各位

正如版主所说!由于最近都没时间详细看DATASHEET,所以偷懒来这里请教版主和各位大侠.
如果有相同应用需求的可以大家一起讨论解决之道.
我的MAIL:alexqiuok@yahoo.com
谢谢


使用特权

评论回复
13
香水城| | 2008-1-23 18:48 | 只看该作者

12楼提供的email是错的

我按照这个地址发email被退回,原因是yahoo.com没有这个用户。

这个问题比较复杂,最好在电话中讨论比较清楚。当然我们需要详细了解你的项目和项目背景。 

请通过mcu.china@st.com联络。

使用特权

评论回复
14
endlessss|  楼主 | 2008-1-24 13:06 | 只看该作者

抱歉!

mail:alexqiuok@yahoo.com.cn
我有发mail给版主。请查收!
再次感谢您的关注和支持

使用特权

评论回复
15
香水城| | 2008-1-24 13:25 | 只看该作者

收到了,已经回复

我们在电话中继续保持沟通。谢谢!

使用特权

评论回复
16
香水城| | 2008-1-24 14:15 | 只看该作者

今天恶补了一下CAN的协议最基本的部分,对数据帧格式略有

CAN的数据帧大体分为两种格式:标准格式和扩展格式。

  | SOF(帧起始) | 仲裁域 | 控制域 | 数据域 | CRC域 | 应答域 | 帧结尾 |

- SOF(帧起始):1位;标准格式和扩展格式一样。
- 仲裁域:
    标准格式为12位 = 11位标识符 + RTR位
    扩展格式为32位 = 11位标识符 + SRR位 + IDE位 + 18位标识符 + RTR位
  RTR = Remote Transmission Request Bit (远程发送请求位)
  SRR = Substitute Remote Request Bit (替代远程请求位)
  IDE = Identifier Extension Bit (标识符扩展位)
- 控制域:6位,= IDE/r1 + r0 + 数据长度代码,标准格式和扩展格式一样。
    数据长度代码 = (DLC3 + DLC2 + DLC1 + DLC0)
    r1、r0 为保留位
- 数据域:0~8个字节,先发送MSB。
- CRC域:共16位 = 15位CRC序列 + 1位CRC界定符;标准格式和扩展格式一样。
- 应答域:2位;标准格式和扩展格式一样。
- 帧结尾:7位;标准格式和扩展格式一样。

标准格式时共44~108位的长度;扩展格式时共64~128位的长度。


俺还是CAN的菜鸟,请各位大侠指正。

使用特权

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

本版积分规则

12

主题

62

帖子

0

粉丝