本帖最后由 airwill 于 2015-1-17 13:14 编辑
上面两条均来自数据手册.
下面进行 PK, 希望有不同意见的朋友批评指正, 谢谢!
共同点: 均兼容 CAN 协议版本 2.0B, 均支持高达 1Mbps 的数据速率; 支持收发邮箱; 支持报文过滤器; 支持回环的调试方式. 支持时间戳.
差异:
1. eCAN 的时间戳寄存器为 32 位, 而 bxCAN 的时间戳只有 16 位(后者略逊, 记录报文时刻, 软件需要扩展计时位长).
2. eCAN 的数据包可以设置数据的存储顺序 (高字节先保存, 还是低字节先保存) 这个功能 bxCAN 是没有的.
3. 过滤器功能. 两者有较大的差别, eCAN 使用全局接受屏蔽(过滤器), 和每个邮箱的标识符去匹配检查, 而 bxCAN 则完全将过滤器的 MASK 和标识符成组使用. 这点差别说不上孰优孰劣, 但 bxCAN 可以将过滤器设置成标识符列表模式 (这一点 eCAN 这是在邮箱的标识符寄存器中禁止接受屏蔽来实现的), 这样一个过滤器可以接受两个标识符, 此外如果是标准的 11 位标识符, 还可以进一步拆分成两条标识符, 高效地利用了过滤器的内存 (内存使用效率高于 eCAN, 不过给程序员的理解带来些困惑). 当然这也带来了一个缺点, 过滤器被强制规定是否标准格式标识符, 而 eCAN 的一个过滤器则可能两者标识符都能接受 (不过这种情况在应用中并不遇到).
4. eCAN 支持 32 个邮箱. 可自由分配为收发模式; bxCAN 固定的 3个发送邮箱, 并使用 2 个3级 FIFO 接受报文.
这一点上, 在发送情况下, 在应付比较多的包发送的时候, eCAN 是有优势的. 而接受上面, 表面看, eCAN 凭借 32 个邮箱, 大容量的方式, 可暂存多个数据包, 似乎可以降低CPU软件负荷, 降低 CAN 处理模块响应的实时性要求. 但从应用中看, 其实 CAN 总线中大量存在同标识符数据包连线多包发送, 那么这个时候, bxCAN 的 FIFO 技术可以保存同标识符的多个数据包而不至于数据包溢出, 其对 CPU 的 CAN 处理模块响应的实时性要求会反而低于 eCAN. 可见: bxCAN 采用了好的技术来高效使用有限的邮箱内存, 弥补其内存少的弱点.
5. 对于远程帧的响应, eCAN 的发送邮箱, 可以设置自动应答模式来自动回应远程帧的请求; 这也是 bxCAN 所不具有的功能 (不过这个功能本人尚未曾实际用过). |