【研发问题】atlas 200移植mcp2515

mcp2515是spi接入的模块
淘宝买的can小板子,直接通过spi飞线到atlas 200的单板

在这里插入图片描述

1、首先需要配置spi复用
在这里插入图片描述

2、配置内核
在这里插入图片描述
3、配置设备树
在这里插入图片描述

调试问题:

第一个问题

重新编译dtb文件、内核镜像和驱动,启动之后mcp2515驱动probe报错
在这里插入图片描述

网上有类似的问题 https://www.jianshu.com/p/b056cf35eab9
在这里插入图片描述
以上点排除之后,还是有问题,即我们的问题和他们不一样。

反复修改配置设备树也无法解决,伤脑筋!

没办法分析内核报错
在这里插入图片描述
通过跟踪日志,发现是主控通过spi发送消息,没有响应失败

没办法必须要抓波形了,以确认
1、主控有发送spi消息,且消息正确
2、板子有回复消息,且回复正确

小公司没有示波器,搞了个在这里插入图片描述小巧的分析仪器,低速的总线还是可以分析的

发送波形是每次通过insmod ko/rmmod ko文件的不常规方式实现的,因为当前can没有通,无法正常工作,无法通过用户程序发波形了

抓到的波形发现mosi和miso反了!!!怪不得mcp2515没有响应,给人家输出发消息,哪里会有响应

调整线序解决了! 坑爹的硬件

通常情况下,我们只需要对上图所描述的四个管脚(pin) 进行编程即可控制整个 SPI 设备之间的数据通信:

  • SCK:主要的作用是 Master(主)设备往 Slave(从)设备传输时钟信号, 控制数据交换的时机以及速率;
  • SS/CS:用于 Master(主)设备片选 Slave (从)设备,使被选中的 Slave(从)设备能够被 Master(主)设备所访问;
  • SDO/MOSI:在 Master(主)上面也被称为 Tx-Channel,作为数据的出口,主要用于 SPI 设备发送数据;
  • SDI/MISO:在 Master(主)上面也被称为 Rx-Channel,作为数据的入口,主要用于SPI 设备接收数据;

当时MOSI和MISO在主控引到板子的mcp2515的时候反序了,导致从atlas从接收信号的地方发送信号,实际信号根本不会发出,所以mcp2515没有应答

第二个问题
mcp的open函数,内核can的中断初始化报错:atlas 200 can相关的设备树配置,和内核mcp2515驱动代码修改

初始化的时候,发现中断配置报错
ip link set can0 up type can bitrate 250000会失败,提示中断打不开

报错有两种:
中断类型和原始的不一致:修改mcp251x_open代码里面flags和can dts的中断描述,都改为下降沿触发
中断的dts无法解析正确:中断写法不对,要按照下面的dts截图来写 https://blog.csdn.net/thisway_diy/article/details/105394053
在这里插入图片描述
在这里插入图片描述

设备树中的interrupts属性解析
interrupts属性会有两种不同的参数:

  1. 带两个参数的情形

示例:

interrupt-parent = <&gpio2>;
    interrupts = <5 1>;
  表示中断控制器是GPIO2,使用GPIO2的第5号中断,这里的第5号中断指的是5号引脚,1是指中断触发的方式为上升沿触发,详见内核代码中的头文件include/dt-bindings/interrupt-controller/irq.h

  1. 带三个参数的情形

示例:

interrupts = <GIC_SPI 66 1>;
  2.1 先了解一下中断的类型

IPI:inter-processer interrupt 中断号0~15
    PPI:per processor interrupts 中断号16~31
    SPI:shared processor interrupts 中断号 32 ~32+224
    SGI:software generated interrupts (SGI).

所以上述示例表示中断类型为共享处理器中断(SPI),中断号为SPI中断类型中的第66号中断号,计算出来的实际中断号即为32+66=98号中断,1表示上升沿触发中断

原文地址:https://www.cnblogs.com/dakewei/p/11395426.html
在这里插入图片描述

1表示上升沿触发
2表示下降沿
我们是采用下降沿触发中断,
在这里插入图片描述

第三个问题
can的回环测试ok,但是无法接收雷达数据(雷达接到mcp251x的can,cpu通过spi1接到mcp251x):最后发现是时钟配置问题,与小板子有关

我们的mcp小板是8M的工作晶振,开始在dts配置了25M的时钟,这个时钟是要和mcp小板的晶振一致才行
解决方案是dts配置8M时钟,参考上图dts的截图里面的配置,有注释说明

https://zhuanlan.zhihu.com/p/376755248

can通问题
1、内核can的中断初始化报错:atlas 200 can相关的设备树配置,和内核mcp2515驱动代码修改
2、can的回环测试ok,但是无法接收雷达数据:最后发现是时钟配置问题,与小板子有关

回环测试指令如下:

ip link set can0 down

ip link set can0 type can bitrate 50000 loopback on

ip link set can0 up

candump can0 &

cansend can0 123#11223344556677

参考
https://blog.csdn.net/thisway_diy/article/details/105394053 很重要的中断设备树写法与spi i2c的源码有关系,代码接口规定好了写法
http://t.zoukankan.com/shulianghe-p-3724131.html mcp2515驱动程序详解
https://blog.csdn.net/liteblue/article/details/123049660 mcp2510的can使用
https://blog.csdn.net/Sangedianzi/article/details/121286102 mcp2515协议解析
https://blog.csdn.net/feidayekuangkuang/article/details/122682586
https://blog.csdn.net/ch122633/article/details/125857730
https://blog.csdn.net/liteblue/article/details/123049660
https://blog.csdn.net/star871016/article/details/108485868?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-108485868-blog-104152226.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-14-108485868-blog-104152226.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=24
https://blog.csdn.net/qq845699/article/details/104152226
https://blog.csdn.net/lushengchu_luis/article/details/77099239
https://blog.csdn.net/weixin_38387929/article/details/114927127
http://t.zoukankan.com/shulianghe-p-3724131.html
https://blog.csdn.net/weixin_35551678/article/details/116838373
https://blog.csdn.net/jklinux/article/details/78701702

SPI协议详解
https://zhuanlan.zhihu.com/p/150121520?utm_source=wechat_session
https://zhuanlan.zhihu.com/p/503777954

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值