SPI

求个SPI上挂两个或多个设备的使用例子

发布于 2014-12-03 11:17:38
RT,或者能在这里大概给我说说如何使用,我用的平台是STM32

查看更多

关注者
0
被浏览
2.7k
6 个回答
修行墨者
修行墨者 2014-12-07
我试了两三天也搞不定,没明白。用片选cs挂在spi_bus上,系统会出错。可能是总线驱动注册自己没有搞明白。
现在用一个折中的办法,注册多个用SPI的设备,用bus的设备锁住bus,现在个人觉得还方便点,因为要控制的不止一个CS脚,以后深入了解了再搞片选挂SPI_bus上。
Zitral
Zitral 2014-12-16
我试了两三天也搞不定,没明白。用片选cs挂在spi_bus上,系统会出错。可能是总线驱动注册自己没有搞明白。
现在用一个折中的办法,注册多个用SPI的设备,用bus的设备锁住bus,现在个人觉得还方便点,因为要控制的不止一个CS脚,以后深入了解了再搞片选挂SPI_bus上。
可否观摩一下代码?
bernard
bernard 2014-12-16
SPI控制器是一个SPI bus设备,上面挂的一个SPI设备是一个SPI device。

所以多个SPI设备应该是多个SPI device。关键是在驱动上面,上层相当于使用不同的SPI device。
Zitral
Zitral 2014-12-16
SPI控制器是一个SPI bus设备,上面挂的一个SPI设备是一个SPI device。

所以多个SPI设备应该是多个SPI device。关键是在驱动上面,上层相当于使用不同的SPI device。

void rt_hw_spi_init(void)
{
static struct stm32_spi_bus stm32_spi2;
static struct stm32_spi_bus stm32_spi3;
/* register spi bus */
stm32_spi_register(SPI2,&stm32_spi2,"spi2");
/* attach cs */
/*spi_oled : PC8*/
{
static struct rt_spi_device spi2_device1;
static struct stm32_spi_cs spi2_cs1;
spi2_cs1.GPIOx = GPIOC;
spi2_cs1.GPIO_Pin = GPIO_Pin_8;
rt_spi_bus_attach_device(&spi2_device1, "spi21", "spi2", (void*)&spi2_cs1);
}
/*spi_FONT : PB12*/
{
static struct rt_spi_device spi2_device2;
static struct stm32_spi_cs spi2_cs2;
spi2_cs2.GPIOx = GPIOB;
spi2_cs2.GPIO_Pin = GPIO_Pin_12;
rt_spi_bus_attach_device(&spi2_device2, "spi22", "spi2", (void*)&spi2_cs2);
}

/* register spi bus */
stm32_spi_register(SPI3,&stm32_spi3,"spi3");
/* attach cs */
/*spi_fc8080 : PC8*/
{
static struct rt_spi_device spi3_device1;
static struct stm32_spi_cs spi3_cs1;
spi3_cs1.GPIOx = GPIOA;
spi3_cs1.GPIO_Pin = GPIO_Pin_15;
rt_spi_bus_attach_device(&spi3_device1, "spi31", "spi3", (void*)&spi3_cs1);
}
}

在SPI2上有两个device,然后使用的时候,我调用的是rt_spi_take,然后rt_spi_release,是否正确?
aozima
aozima 2014-12-16
>>我调用的是rt_spi_take,然后rt_spi_release,是否正确?

一般使用 rt_spi_send/recv 等API就足够了。
只有很复杂的情况下,如SD卡,才用 rt_spi_take/release + xfer 完成功能。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友