今天测试SPI读数据,整个数据长度为16字节,读取的数据头是0x55 0xAA 时钟极性为高电平,第二个边沿上升沿采集数据,数据位为8位,在进行16个字节读取时采用一次片选,循环16次读取16个字节发现读取的数据为0x55 0x5D,在示波器上查看时钟和数据对应关系,发现在第1个字节读取和第2个字节读取间隔时间,多了半个时钟周期,加上等待间隔的时间,正好多了一个时钟周期,设备认为是有效的时钟就把数据送出来了,导致主设备在读取第2个字节时候时钟和数据对应错位。应该在第8个时钟位置应该变成高电平,反而又进行了一次拉低操作,然后变高电平这个高电平是两个字节操作的间隔。 //这种操作数据就会出错 for(uint32_t i=0; i<16; i++) { HAL_SPI_Receive(&hspi2,&rx_data[i],1,5); } //这种操作数据就不会出错 HAL_SPI_Receive(&hspi2,rx_data,sizeof(rx_data),5); 有没有人遇到过类是的问题!!! |
示波器抓取的时钟和数据对应关系
这两个完全不是一回事呀
________________________________________
//这种操作数据就会出错
for(uint32_t i=0; i<16; i++)
{
HAL_SPI_Receive(&hspi2,&rx_data,1,5);
}
//这种操作数据就不会出错
HAL_SPI_Receive(&hspi2,rx_data,sizeof(rx_data),5);
_________________________________________
第一种情况是多次片选,第二种是一次片选。
评分
查看全部评分
评分
查看全部评分