一,前言
还记得10年前我调试1145收发器配置spi后无法进行can通信搞了3天才发现问题。没想到10年后换了工具链,又遇到要配置1145了。预计半小时完成的,结果搞了3小时,所以值得记录。
二,需求
基于MCAL的demo进行spi配置项修改即可,至于Autosar工具链中1145的配置不需要改。
三,遇到的问题
- 首先can无法通信,则读取1145的deviceID。通过0x7E地址期望读取值为0x74。那么怎么读取,要调用哪些函数呢?
答:看了静态代码,直接有读取deviceID到变量中的。 -
读取的deviceID不正确,接着怎么办呢?
答:直接用逻辑分析仪去看吧。结果很明显CS片选不正确。
image.png -
CS片选在MCAL要怎么配置?
答:光MCAL配置中没看出问题,为了先解决问题,那么CS就用IO口直接设置为一直为低电平吧,把IO口配置了下。看了源码code调用,用的是spi异步读取,没什么问题。
image.png - CS改成在spi配置中改成用port口配置了,看了代码,最后是会调用gpio设置pin脚的,怎么波形没变化?
答:port口中虽然设置了输出一直为低,但是port口忘记设置为GPIO了。所以就算有控制也不起作用。把port口的cs pin脚改成gpio口后,CS终于正常了。 -
但是解析出来的发送数据值不是预期的?
答:在PC逻辑分析中,将下降沿读数改成上升沿读数,那么数据值和代码赋值到spi job的一致。看来spi中此处我配置错误,修改切换数据在上升沿(即读取数据在下降沿)后,解析正常。读取1145的deviceID也正常咯,1145初始化成功,can通信也正常了~
image.png - 5/15日补充
之前为了解决问题先用了gpio来控制CS脚,但是我得找到原因呢~
解决cs使用接口方式不能控制的方法如下
通过看原理及代码发现无问题,那么很大概率就是硬件PIN脚连接错误了。
通过看datasheet发现P22.2为QSPI4_SLSO(3),后面的3是什么意思。UM中我没看到描述,于是我猜测这是和ECON0-7对应的,所以要用ECON3。那么我现在用的是ECON0,在datasheet中搜索QSPI4_SLSO(0)为P33.10脚,设置P33.10位CS功能脚后,结果P33.10果然有作用,证明我的理解是正确的。那么对于P22.2的SLSO(3)脚我需要CS选择channel3(等于用ECON3,才能通过spi接口来控制SLSO片选脚了)。
image.png
image.png
四,小结
遇到些问题也蛮好的,否则我代码可能都不会去看了,哈哈~
网友评论