embedded - CAN BUS 协议栈
问题描述
有人可以向我解释什么是 CAN BUS 协议栈吗?是 CAN BUS+ 更高层,比如 7 层的 CANopen 还是其他什么,有人可以解释我如何使用 CAN 堆栈,如何将它与 CAN 总线连接,以及为什么需要它?
谢谢
解决方案
是的,它是具有更高层协议的 CAN 硬件,例如 CANopen、J1939 或 DeviceNet。
就“OSI 模型”而言,仅谈论第 1-3 层和第 7 层才真正有意义,其中 CAN 是第 1 层和第 2 层,而 CANopen 之类的协议大致提供第 3 层和第 7 层。粗略地说,由于 CAN-open 也附带硬件规格,例如波特率、同步点和存根长度建议。
所谓的“协议栈”实际上只是一个具有独立于平台的 API 的库,通常与特定于硬件的驱动程序一起交付。如果供应商声称他们支持特定的 MCU,则通常意味着您从供应商处获得驱动程序。
所以基本上你购买这个预制库并将你的程序与它集成,然后在 CAN 总线上获得标准化的协议行为,这是与实现相同协议的其他节点通信所必需的。自己编写这样的库并非易事,尤其是对于作为一个大标准的 CANopen,您可能只会使用大约 10% 的可用功能。
推荐阅读
- angular - 过滤器方法中的未定义属性
- ibm-midrange - as400 RPGLE 以 UNIX 纪元格式获取 UTC 时间
- ansible - Ansible:安装包后无法启动 httpd 服务
- angular - Angular 9+ PWA 指纹/faceid 集成
- python - 当我们已经匹配关键点时,为什么我们需要使用 RANSAC?
- java - Spring-Boot:用于重定向的 Web 过滤器
- python - Django最快的方法来查询从表中获取行中的项目列表
- django - Django:显示数据库信息以匹配表单?ValueError: .. 没有返回 HttpResponse 对象。它返回 None 而不是
- linux - 设置 Windows Pycharm 以在我的 linux 服务器上使用 Git
- react-native - 在 React Native Web 上编译失败