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

CC2530: SPI 读取 U1DBUF 错误

Part Number:CC2530Other Parts Discussed in Thread:Z-STACK,

SPI 模式下,读取 U1DBUF始终是255,读取前增加延时直接死机

Nick Sun:

您好,

感谢您的对TI产品的关注!为更加有效地解决您的问题,我需要多一些时间查看这个问题,稍后会为您解答。

,

Nick Sun:

您好,

您是在做什么操作的情况下得到的错误?

是否可以提供一些相关参考?(SDK版本、示例)

,

Yong He:

你好!

我使用的IAR 8.10版本,没有使用Z-Stack

我是将 CC2530 以 SPI 方式接上 BMP280 气压传感器,CC2530为主模式,BMP280为从模式,发送数据正常(用示波器观察了MOSI波形)。

读传感器数据始终出错,程序如下:

变量定义、SPI配置、BMP初始化等忽略;

while(1) { P1_4 = 0; //片选 U1DBUF = 0xD0; //发送BMP280芯片ID寄存器地址,读模式 while( !U1TX_BYTE ); //等待发送结束 U1TX_BYTE = 0; //清标志位 //Delay_us(70); //8个时钟 chip_id = U1DBUF; //读BMP280芯片ID P1_4 = 1; sprintf(strTemp, " id: %d", chip_id); LCD_TextOut(0, 1, strTemp); }

这段程序读出的chip_id始终为255。用示波器观察MISO波形只有一个负脉冲,接着片选P1_4被拉高。显然CC2530没有获得MISO数据。

如果取消“Delay_us(70); //8个时钟“的注释,即加入一段延时,让SPI有足够时间接收MISO数据,则程序锁死,似乎U1DBUF的数据没接收完整,一直在等待。

无论延时加多长,或者判断U1TX_BYTE(接收数据准备好标志),程序都锁死。这种锁死的状态,示波器也无法观看到MISO的波形

谢谢回复!

,

Nick Sun:

您好,

收到您的跟进消息,有结果及时通知您。

,

YiKai Chen:

可以參考LCD driver相關代碼並確認你在讀取U1DBUF (XNV_SPI_RX)有先調用 XNV_SPI_WAIT_RXRDY

/* ----------- XNV ---------- */
#define XNV_SPI_BEGIN()st(P1_3 = 0;)
#define XNV_SPI_TX(x)st(U1CSR &= ~0x02; U1DBUF = (x);)
#define XNV_SPI_RX()U1DBUF
#define XNV_SPI_WAIT_RXRDY()st(while (!(U1CSR & 0x02));)
#define XNV_SPI_END()st(P1_3 = 1;)

,

Nick Sun:

您好,

DELAY_us 是 while / for 循环,还是将 CC2530器件置于低功耗模式?如果处于低功耗模式、则可能不允许 USART 外设访问驱动 SPI 线路所需的时钟。您能否提供示波器图像并确认时序是否符合 BMP280数据表中的预期?此外, CC2530-Software Examples 和  Z-STACK 软件资源都包含 SPI 层,这些层可以根据您的需求进行重用,应进一步审查。您可能需要检查 U1CSR 中的 RX_BYTE 位,并在以读取模式发送 BMP280芯片 ID 寄存器地址后再次驱动 SPI 线路,以便实际使用接收到的数据填充缓冲器。

感谢YiKai给出的建议,您可以参考YiKai的留言进行操作。

希望对您有所帮助。

赞(0)
未经允许不得转载:TI中文支持网 » CC2530: SPI 读取 U1DBUF 错误
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1