【一兮】nrf52840的SPI一主多从,关于CS片选自动选中的解决方法

在尝试使用nrf52840进行一主多从SPI通信时,遇到硬件SPI自动选中某一从设备的问题。初始尝试通过MCUIO控制片选信号失败。最终解决方案是每次通信前重新初始化硬件SPI,配置相应的CS引脚,通信完成后进行反初始化,以切换到其他从设备。这种方法虽消耗一定MCU资源,但对整体影响微小。

1.问题背景

答:笔者需要用nrf52840的SPI进行一主多从的SPI通信,主机用nrf52840,通过片选选中从芯片通过SPI进行通信,开始我的想法是,就简单的MCU IO输出高低电平控制CS的高低,加在SPI发送函数前面便能实现自己想要的效果。发现并没有解决问题,在多次验证的时候发现nrf52840的硬件SPI的初始化我即使不配置CS引脚,通信的时候CS也会自动选中其中的一片,其中一片pin为0 0,另一片pin为 0 8,每次默认选中的都是pin 0 0。

2.解决方案

答:简单的在SPI的发送函数前面加入CS IO口输出电平无法选中,那么换一个思路。每次在SPI发送函数的前面都进行一次初始化硬件SPI,这里的初始化硬件SPI配置相应的CS引脚即可,虽然初始化耗费了MCU资源,但是这点资源对于MCU来说凤毛麟角。初始化完一个对于的CS脚硬件SPI的时候,发送完毕,应当使用下面的反初始化函数执行后。例如下次选中pin0 8的cs,再用下面的初始化函数初始化,下一个要发送给另一片,例如pin 0 0的cs,反初始化后再进行。以此类推,笔者使用的是SPI3

nrfx_err_t nrfx_spim_init(nrfx_spim_t  const * const p_instance,
                          nrfx_spim_config_t const * p_config,
                          nrfx_spim_evt_handler_t    handler,
                          void                     * p_context)



void nrfx_spim_uninit(nrfx_spim_t const * const p_instance)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值