某UAES面试题1,,如何在TX2平台下实现can总线收发功能。
TX2是英伟达旗下为嵌入式平台人工智能应用开发出的一个硬件平台,去官网看了一看,TX1好像没有can bus功能,TX2才有,作为汽车零配件商必然选择TX2。
英伟达官方为TX2制作了专门的SDK,即jetPack。网站:https://developer.nvidia.com/embedded/jetpack
肯定是Linux系统,自带各种库,谷歌的TensorFlow,opencv啥的还有一些API比如比较重要的图像获取接口V4L2接口,等等。
好了,正题:如何实现can bus收发功能。
本来的思路是can bus作为外设,和串口还有i2c什么的一样是个字符设备或者平台设备什么的步骤应该是:
(1)找到TX2平台下的canbus驱动,insmod后找到设备文件(英伟达作为大公司应该已经写好了canbus的驱动并集成到了SDK中)。
(2)通常的外设一般有open打开设备,close关闭设备,read用来接收,write用来发送,ioctl用来配置设备,用这些函数进行应用编程即可。
由于没有TX2硬件,因此百度搜索一下看看是不是和我想的一样。。。但是好像并不是这样的。。。
百度搜索:TX2 can总线通讯,第一篇文章:http://blog.csdn.net/lybhit/article/details/78661584
得知:(1)首先canbus确实有驱动,但是用modprobe进行安装,modprobe大体上是一个insmod的升级版也是将模块载入内核,并且其驱动不止一个。同时TX2有两个canbus外设,为can0和can1。
(2)Linux下的canbus好像并不是通过设备文件进行操作的,而是通过socket!
(3)上述文章大体是采用:安装驱动->安装一个开源canbus通信app->将can0和can1的CANH和CANL相接(看出TX2并没有自带canbus收发器)->测试canbus。
由于上述文章内容及少,同时注意到文章中有一段诡异的英文:
因此可以联想到应该有技术文档或者外国文章早已对can总线的通讯已经做过讨论。因此Google搜索:TX2 can bus
果然有,只不过是在英伟达官方论坛中,继续深入查找,在网址:https://devtalk.nvidia.com/default/topic/1006762/jetson-tx2/how-can-i-use-can-bus-in-tx2-/3中,有以为英伟达官方人员给出了正确方法
看看,和之前CSDN中看的英文一模一样,哈哈。
则得出步骤:(1)首先想要使能canbus必须在tegra18_defconfig配置文件中配置CONFIG_MTTCAN = m 之后重新编译内核才能使用。
(2)安装canbus模块(Linux将不常用的模块做成.ko文件,在需要使用时可以将其进行载入内核,降低系统的开销)
modprobe can
modprobe can_raw
modprobe mttcan
(3)配置canbus属性,和串口的波特率设置类似,同驱动编程中的ioctl
ip link set can0 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
ip link set up can0
ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
ip link set up can1
ip link set up can0
ip link set can1 type can bitrate 500000 dbitrate 2000000 berr-reporting on fd on
ip link set up can1
(4)安装第三方开源app can-utils 测试canbus
sudo apt-get install can-utils
(5)使用应用程序进行测试
发送程序:
cansend <can_interface> <can_frame>
e.g. cansend can0 123#abcdabcd
接收程序:
candump can_interface
e.g. candump can1
检测canbus的状态:
ip -details -statistics link show can0
ip -details -statistics link show can1
OK,那么对TX2平台下的canbus通讯初探完成,但是canbus的API,应用开发函数仍然未知,但是之前官方人员给出的测试程序app:can-utils为开源程序,因此下一步:上GIT看代码!
具体接线图:
具体收发详细步骤请看:https://blog.csdn.net/hhlenergystory/article/details/81976069
dbc载入并实现收发源代码及测试:https://blog.csdn.net/hhlenergystory/article/details/81976696