Si4432无线芯片调试经验分享
和19h中的值),在确认没有数据/收完数据后再返回到原来的idle子状态。
用普通51单片机 IO 口模拟SPI:
SPI读操作函数:
unsigned char SPI_Read(void){unsigned char i,rxdata;rxdata = 0x00;for (i = 0;i 8;i++){rxdata = rxdata1;RF4432_SCLK=0;if (RF4432_SDO==1) //读取最高位,保存至最末尾,通过左移位完成整个字节{rxdata |= 0x01;}delay_10us(2); RF4432_SCLK=1;delay_10us(2); }return rxdata;}SPI写操作函数:void SPI_Write(unsigned char txdata){unsigned char i;for (i = 0;i 8;i++){RF4432_SCLK=0;if ((txdata0x80)==0x80) //总是发送最高位{RF4432_SDI=1;}else{RF4432_SDI=0;}txdata = txdata1;delay_10us(2); RF4432_SCLK=1;delay_10us(2); }}RF4432 寄存器读操作函数:unsigned char RF4432_ReadReg(unsigned char addr){unsigned char value;RF4432_SEL=0; SPI_Write(addr|RR); value = SPI_Read(); RF4432_SEL=1; return value;}RF4432 寄存器写操作函数:void RF4432_WriteReg(unsigned char addr, unsigned char value){RF4432_SEL=0; SPI_Write(addr|WR); SPI_Write(value); RF4432_SEL=1; }SI4432寄存器定义:#define DEVICE_TYPE 0x00#define DEVICE_VERSION 0x01 //版本号……参考附件。
RF4432 射频芯片初始化函数,RF4432 设置接收模式函数, RF4432 数据包接收函数, RF4432 数据包发送函数等。参考文档:si4432模块使用手册.pdf。这些附件我整理了一个压缩包http://www.51hei.com/f/452de.rar大家可以去下载.
网上搜到的程序代码以及官方提供的代码大都是基于Silicon Labs的c8051f单片机的,虽然都是51核的,但编程环境以及运行速度都是不一样的,不能直接拿来在普通51上运行,得稍作修改。目前完成了基于普通51单片机的三份代码修改。一份是官方的,一份是买模块时送的,一份是网上找来的。网上还有一份基于pic单片机的源码,但看了后感觉跟官方的差不多,没去修改。修改后在51开发板上可以运行了。但是其中一个模块不能工作,没法看到效果。具体能否接收还不确定。因此,也就停留在了这个地方。可以通过串口观察到一些信息,比如初始化完成后产生低电平的NIRQ中断,以及发送完成后也产生低电平的NIRQ中断,程序片段
RF4432_Init()
{
……
while ( RF4432_IRQ== 1); //等待软复位完成,当软复位完成后有中断发生
…….
}
UART_Send_Str("RF芯片si4432初始化完毕....\n");//串口发送调试信息
正常初始化完毕后通过串口会看到语句“RF芯片si4432初始化完毕....”,否则停留在while ( RF4432_IRQ== 1); 看不到串口输出的信息。但只有一个模块发送,一个模块接收,观察到接收模块收到了数据才能证明调试是没问题的。
- 基于LPC2103和SI4432的无线通信系统设计(04-21)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)