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)