TI中文支持网
TI专业的中文技术问题搜集分享网站

CC1310的SPI问题

我们采用TI的CC1310读取ADI的加速度传感器ADXL362的数据,时而操作可以,时而不行。如果上电的时候可以就一直可以,如果上电的时候不行就一直不行。不行的情况,一般是SPI发送没问题,而SPI接收到的数据全部是0.,这是通过示波器看到的。该代码使用了TI提供的contiki的移植,在contiki操作系统上实现的。下面是SPI的初始化代码:

/* First, make sure the SERIAL PD is on */
ti_lib_prcm_power_domain_on(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL);
while((ti_lib_prcm_power_domain_status(PRCM_DOMAIN_PERIPH | PRCM_DOMAIN_SERIAL)
!= PRCM_DOMAIN_POWER_ON));
/* Enable clock in active mode */
ti_lib_rom_prcm_peripheral_run_enable(PRCM_PERIPH_GPIO);
ti_lib_prcm_load_set();
while(!ti_lib_prcm_load_get());

clock_delay(50000000);
/* Enable clock in active mode */
ti_lib_rom_prcm_peripheral_run_enable(PRCM_PERIPH_SSI0);
ti_lib_prcm_load_set();
while(!ti_lib_prcm_load_get());

ti_lib_rom_ioc_pin_type_ssi_master(SSI0_BASE, ADXL362_IOID_SPI_MISO,ADXL362_IOID_SPI_MOSI,IOID_UNUSED, ADXL362_IOID_SPI_SCK);

/* SPI configuration */
ti_lib_ssi_int_disable(SSI0_BASE, SSI_RXOR | SSI_RXFF | SSI_RXTO | SSI_TXFF);
ti_lib_ssi_int_clear(SSI0_BASE, SSI_RXOR | SSI_RXTO);
ti_lib_rom_ssi_config_set_exp_clk(SSI0_BASE, ti_lib_sys_ctrl_clock_get(),
SSI_FRF_MOTO_MODE_0,
SSI_MODE_MASTER, 4000000, 8);
ti_lib_ssi_enable(SSI0_BASE);

/* Get rid of residual data from SSI port */
while(ti_lib_ssi_data_get_non_blocking(SSI0_BASE, &buf));
// 配置SSI的片选
ti_lib_ioc_pin_type_gpio_output(ADXL362_IOID_SPI_CS);
// 默认片选为高
ti_lib_gpio_set_dio(ADXL362_IOID_SPI_CS);

下面是SPI的读写代码:

static uint8_t accelerometer_ssi_op(uint8_t u8Data)
{
uint32_t u32Rtn;

ti_lib_ssi_data_put(SSI0_BASE, u8Data);
ti_lib_rom_ssi_data_get(SSI0_BASE, &u32Rtn);

return u32Rtn;
}

下面是读写一个ADXL寄存器的例子代码:

void adxl362_register_value_set(uint8_t *pu8Value, uint8_t address, uint8_t bytesNumber)
{
uint8_t i;
ti_lib_gpio_clear_dio(ADXL362_IOID_SPI_CS);
accelerometer_ssi_op(ADXL362_WRITE_REG);
accelerometer_ssi_op(address);
for(i=0;i<bytesNumber; i++) {
accelerometer_ssi_op(pu8Value[i]);
}
ti_lib_gpio_set_dio(ADXL362_IOID_SPI_CS);
}

具体代码就这些了,请TI的工程师看看,1310是否哪里还有坑没有注意到。同样的的代码使用其他的 MCU是没有问题的。1310就时而可以,时而不行。如果长时间不用,第一次上电一定可以用,然后断电上电 断电上电就不行了。

Viki Shi:

根据你的描述,我觉得应该跟代码关系不大,怀疑CC1310上电不稳。重点排查一下上下电的代码

haibo ren:

回复 Viki Shi:

请问下CC1310上电有什么特殊要求吗?我先上电, 在用镊子短接复位引脚都不行。用电池供电或者用直流稳压电源都一样。

WH HUANG:

回复 haibo ren:

可以软件里复位试一下,你可以尝试精简代码,不要用RTOS,测试一下。 就是难度有点大,IC资料过于简化。

haibo ren:

回复 WH HUANG:

 同样的代码,我用CC1310 LaunchPad这个板子没问题。我用TI的评估板CC1310 LaunchPad,通过杜邦线和ADXL362连接,工作很正常,没有问题。因此,怀疑是硬件问题,又仔细对比了电路硬件的参数,现在已经将参数改换的一模一样,仍然不行。CC1310 LaunchPad上 即使用我们自己板子的元器件,仍然可以。两者用同样的电源供电,CC1310 LaunchPad可以,我们自己的板子仍然不行。难道CC1310和PCB Layout还有关系吗?目前,除了Layout ,应该没其它区别了。

赞(0)
未经允许不得转载:TI中文支持网 » CC1310的SPI问题
分享到: 更多 (0)