PS2手柄SPI调试踩坑经验

问题描述

在刚使用PS2手柄进行SPI通讯时,我看了一下官方给的例程,已经网上的教程,基本超过90%是使用软件SPI进行通讯的,我当时就想为什么不试试硬件SPI,说做就做,通过CubeMX配置好引脚和时钟和速率

可以看到,我这里把通讯速率调到了45MBIts/s,然后将代码烧录,通过示波器测试引脚,发现MOSI引脚波形正确,对应的CLK也是45MBIts/s这个速率,用PS2手柄能正确进行联机,此时绿灯常亮,也说明联机命令0x01,0x42能正确发送,但是按下手柄按键同时测量MISO引脚波形,发现一直处于高电平(因为初始进行了上拉)说明SPI通讯没法接收到数据

解决思路1:查看硬件接线问题

我打开PS2的手册看引脚是否接错,MOSI接CMD引脚 MISO接DAT引脚 并且用万用表检测会不会接线不牢固,最终排除了上述两种问题。

解决思路2:对比测试源码

为此我打开官方的测试源码(前面说过了官方是使用软件SPI)通过对比,官方使用delay()函数进行延时模拟SPI时序,并且延时时间为5-10us,通过计算速率差不多在100KBits/s左右,但是我的通讯速率却高达45MBIts/s,所以有可能是因为通信速率过高导致接受出问题,因此我把通讯速率也设置到100KBits/s左右进行测试,但是发现还是未能解决。

解决思路3:查看PS2的SPI通信协议

通过查看通信协议才发现,原来默认状态CLK是处于高电平,并且DI、DO是在时钟下降延读取数据,所以需要修改SPI的时钟极性和相位极性

 

 此时使用示波器查看CLK波形,符合默认状态CLK是处于高电平

 示波器查看MOSI波形,能正确发送MOSI命令

最后按下手柄按键,看到有MISO数据波形产生,说明SPI已经能正常通讯了!问题解决!

此时通过编写代码就可以读取对应按键信息

最终控制效果:

智能分类垃圾桶控制效果

总结

遇到相类似这种通讯问题,首先应该排查硬件问题,比如是否接线或者焊接问题,再查看通讯速率是否匹配,如果是串口通讯,则需要保证相同波特率,如果是SPI IIC则需要考虑是否过高或者过低,最后还要根据不同的通讯设备查看其通信协议,这是重中之重!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值