你好,CC2500的SO脚返回的数据,单片机读出来是0xFF,这个数据是错误的,应该是0x80,SO脚信号见下图:
调试程序见附件CC2500_test.rar
Viki Shi:
能否提供更详细的问题描述?是否测试过TI例程【】?
TI 诚邀您参加全新设计的产品页面测试,参加测试即可享有 TI 购物 9 折优惠码,点击加入 EP产品页面测试报名,名额有限。感谢您的参与!
user6351137:
回复 Viki Shi:
上电后,串口,CC2500初始化,CC2500 reset,读CC2500 ID,如果不是0x80,读出的是0xFF,所以一直读ID。
调试程序是基于TI例swrc021f
user6351137:
回复 Viki Shi:
这个是主函数,读出的read_id不对,后面的程序就没有执行
int main(void)
{uint8_t read_id;uint8_t txBuffer[4]; /* 配置系统时钟为 72M */SystemInit();
USART1_Config();NVIC_Configuration();
printf("USART1_Config \r\n");CC2500_Init(); TI_CC_PowerupResetCCxxxx();// Reset CCxxxxDelay(0xEF);read_id = TI_CC_SPIReadReg(0x30);printf("ID:%x\n\r",read_id);while(read_id!= 0x80){TI_CC_PowerupResetCCxxxx();// Reset CCxxxxDelay(0xEF);read_id = TI_CC_SPIReadReg(0x30);printf("ID:%x\n\r",read_id);}
writeRFSettings();// Write RF settings to config regTI_CC_SPIWriteBurstReg(TI_CCxxx0_PATABLE, paTable, paTableLen);//Write PATABLETI_CC_SPIStrobe(TI_CCxxx0_SRX); txBuffer[0] = 2;// Packet lengthtxBuffer[1] = 0x26;// Packet addresstxBuffer[2] = 0xe7; // Load switch inputswhile (1){TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);RFSendPacket(txBuffer, 3);// Send value over RFprintf("send over\n\r");Delay(0xFFF);}
}把下面这段屏蔽while(read_id!= 0x80){TI_CC_PowerupResetCCxxxx();// Reset CCxxxxDelay(0xEF);read_id = TI_CC_SPIReadReg(0x30);printf("ID:%x\n\r",read_id);}
CC2500发送数据时,GPO0没有出现高电平
Viki Shi:
回复 user6351137:
你是keil生成的吗?目前电脑上只有IAR/CCS,打不开你的文件
user6351137:
回复 Viki Shi:
rar里面的是keil工程,打开c和h文件,可以不用keil
user6351137:
把read_id = TI_CC_SPIReadReg(0x30);
改为read_id = TI_CC_SPIReadStatus(0x30);
读出来的数据是0xff
user6351137:
回复 user6351137:
数据一致不对
TI_CCxxx0_IOCFG2,TI_CCxxx0_IOCFG1,TI_CCxxx0_IOCFG0,TI_CCxxx0_FIFOTHR,TI_CCxxx0_SYNC1,TI_CCxxx0_CHANNR,这些寄存器读出来的值都是0xf,也不对
user6351137:
回复 user6351137:
请Ti的工程师分析一下
Viki Shi:
回复 user6351137:
我手边暂时没这个芯片的板子,我去咨询下同事,有消息再来更新
Viki Shi:
回复 Viki Shi:
你提供的那个图看不出来什么,建议用逻辑分析仪追踪一下4条SPI线,看通过SPI发送的时候是什么情况
读出0xff说明芯片运行不正常,SPI总线(MISO)上状态字节返回的MSB位是CHIP_RDYn。 如果该位不是0 ,不要启动SPI时钟。CHIP_RDYn必须在SCLK的第一个上升沿之前变低,这才表明晶振正在运行。 如果晶体未正常运行(CHIP_RDYn = 1),那当然通信不成功。