|
Si4432是高度集成度单芯片无线ISM收发器件。其包括了发射机、接收机和射频收发器,让设计工程师可以有选择的设计利用里面的无线部分。Si4432提供了先进的无线功能,包括连续频率范围从240到930MHz和可调输出功率高达+20dBm。Si4432的高度集成降低了BOM,同时简化了整体设计。极低的接收灵敏度(-118dBm),加上业界领先的+20dBm输出功率,保证传输范围和穿透能力。内置天线多样化和支持调频。
原理图:
SI4432中文资料pdf文件预览:
部分源代码预览(完整版本请下载附件):
- #include<reg52.h>
- #include<intrins.h>
- #include<TypeDef.h>
- #include "IA443x_rf.h"
- sbit RF_SDN=P2^5;// 芯片关断(高电平)
- sbit RF_MISO=P2^3;// SPI串口数据输入
- sbit RF_MOSI=P2^2; //SPI串口数据输出
- sbit RF_SCLK=P3^2;//SPI串口时钟输入
- sbit RF_SEL=P3^3; // SPI片选输入(低电平有效)
- sbit RF_nIRQ=P3^5; //中断请求输出(低电平有效) //横向短接
- sbit key0=P0^0;
- sbit key1=P0^1;
- sbit key2=P0^2;
- sbit key3=P0^3;
- sbit led=P0^4;
- sbit led1=P0^5;
- sbit led2=P0^6;
- sbit led3=P0^7;
- unsigned char tt[16]={0x01 ,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09,0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10};
- unsigned char RF_TX_Buffer[16]={0x01 ,0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
- 0x09,0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10};
- unsigned char RF_RX_Buffer[16];
- void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单位12us
- {
- i=i/10;
- while(--i);
- }
- void delay_nms(unsigned int n) //延时n ms
- {
- n=n+1;
- while(--n)
- delay_nus(900); //延时 1ms,同时进行补偿
- }
- //function Inituart();
- /*******************************************************************************************/
- void Inituart(void)
- {
- TMOD = 0x20; //timer1 working mode 1
- TL1 = 0xfd; //f7=9600 for 16mhz Fosc,and ...
- TH1 = 0xfd; //...fd=19200 for 11.0592mhz Fosc
- SCON = 0xd8; //uart mode 3,ren==1
- PCON = 0x80; //smod=0
- TR1 = 1; //start timer1
- }
- void TxData (unsigned char *p)
- {
- SBUF=*p;
- while(TI==0);
- TI=0;
- }
- /*
- #define SCLK_L PORTB &= ~(1<<SLK) //发出时钟
- #define SCLK_H PORTB |= (1<<SLK) //结束时钟
- #define CSN_L PORTB &= ~(1<<CSN)
- #define CSN_H PORTB |= (1<<CSN)
- #define MOSI_L PORTB &= ~(1<<MOSI) //低位数据
- #define MOSI_H PORTB |= (1<<MOSI) //高位数据
- #define MISO_L (!(MISO_H)) //输入低位
- #define MISO_H (PINB &= (1<<MISO)) //输入高位
- */
- unsigned char SPITxRx_Byte(unsigned char dat)
- {
- unsigned char i, temp = 0;
- for (i=0; i<8; i++) //读写八位
- {
- if (dat & 0x80)
- {
- RF_MOSI=1; //MOSI_H; //写出高位
- }
- else
- {
- RF_MOSI=0; //MOSI_L; //写出低位
- }
- RF_SCLK=1;//SCLK_H; //发出时钟
- _nop_();
- _nop_();
- dat <<= 1;
- temp <<= 1; //数据左移
-
- if(RF_MISO==1)//if (MISO_H)
- {
- temp += 1 ; //记录高位
- }
- else
- {
- temp += 0; //记录低位
- }
- RF_SCLK=0;//SCLK_L; //结束时钟
- _nop_();
- _nop_();
- }
- return temp; //返回数据
- }
- unsigned char SpiWriteAddressData(unsigned char addr,unsigned char value)
- {
- unsigned char temp=0;
-
- RF_SEL=0;//CSN_L; //片选使能
- //while (MISO_H); //等待响应
- SPITxRx_Byte(addr); //送出地址
- temp = SPITxRx_Byte(value); //写入配置
- RF_SEL=1;//CSN_H; //结束使能
-
- return temp;
- }
- void RfInitHw()
- {
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x80); //REST REG
- SpiWriteAddressData((REG_WRITE | FrequencyBandSelect), 0x57); //set frequency //75
- SpiWriteAddressData((REG_WRITE | NominalCarrierFrequency1), 0x4a); //470HZ //76
- SpiWriteAddressData((REG_WRITE | NominalCarrierFrequency0), 0x00); //77
- SpiWriteAddressData((REG_WRITE | TXDataRate1), 0x09); //1200BPS //6E
- SpiWriteAddressData((REG_WRITE | TXDataRate0), 0xD5); //6F
- SpiWriteAddressData((REG_WRITE | ModulationModeControl1), 0x2c); //0x00//21 //70
- SpiWriteAddressData((REG_WRITE | ChargepumpCurrentTrimming_Override), 0x80); //58
- SpiWriteAddressData((REG_WRITE | FrequencyDeviation), 0x3A); //72
- SpiWriteAddressData((REG_WRITE | ModulationModeControl2), 0x23); //71
- SpiWriteAddressData((REG_WRITE | IFFilterBandwidth), 0x1B); //BW=kHZ //1C
- SpiWriteAddressData((REG_WRITE | ClockRecoveryOversamplingRatio), 0x83); //20
- SpiWriteAddressData((REG_WRITE | ClockRecoveryOffset2), 0xC0); //21
- SpiWriteAddressData((REG_WRITE | ClockRecoveryOffset1), 0x13); //22
- SpiWriteAddressData((REG_WRITE | ClockRecoveryOffset0), 0xA9); //23
- SpiWriteAddressData((REG_WRITE | ClockRecoveryTimingLoopGain1), 0x00); //24
- SpiWriteAddressData((REG_WRITE | ClockRecoveryTimingLoopGain0), 0x03); //25
- SpiWriteAddressData((REG_WRITE | AFCLoopGearshiftOverride), 0x40); //1D
- SpiWriteAddressData((REG_WRITE | AFCTimingControl), 0x0a); //1E
- SpiWriteAddressData((REG_WRITE | 0x2A), 0x18); //2A
- SpiWriteAddressData((REG_WRITE | ClockRecoveryGearshiftOverride), 0x03); //1F
- SpiWriteAddressData((REG_WRITE | AGCOverride1), 0x60); //69
- SpiWriteAddressData((REG_WRITE | PreambleLength), 0x1a); // 5byte //34
- SpiWriteAddressData((REG_WRITE | PreambleDetectionControl), 0x2a); //20bit //35
- SpiWriteAddressData((REG_WRITE | HeaderControl2), 0x02); //33
- SpiWriteAddressData((REG_WRITE | SyncWord3), 0x2d); //36
- SpiWriteAddressData((REG_WRITE | SyncWord2), 0xd4); //37
- SpiWriteAddressData((REG_WRITE | DataAccessControl), 0x8d);//enable TX handling //30
- SpiWriteAddressData((REG_WRITE | HeaderControl1), 0x00); //32
- SpiWriteAddressData((REG_WRITE | GPIO1Configuration), 0x15); //GPIO_1 TX state //0c
- SpiWriteAddressData((REG_WRITE | GPIO2Configuration), 0x12); //GPIO_2 RX state //0d
- SpiWriteAddressData((REG_WRITE | CrystalOscillatorLoadCapacitance), 0xd7); // //09
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x02); //05
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00); //06
- //SpiWriteAddressData((REG_WRITE | TXRampControl), 0x7F); //发射斜率控制
- SpiWriteAddressData((REG_WRITE | TXPower), 0x07); //transmit power 091205
- //SpiWriteAddressData((REG_WRITE | 0x29), 0x1e);
- //SpiWriteAddressData((REG_WRITE | TransmitPacketLength), 0x40);
- SpiWriteAddressData((REG_WRITE | GPIO0Configuration), 0x1f);
- SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05); //into manual receive mode
- }
- void RF_T(unsigned char *d,unsigned char l)
- {
- unsigned char i;
- SpiWriteAddressData((REG_WRITE | TXPower), 0x07);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x01);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
- SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
- SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
- SpiWriteAddressData((REG_WRITE | TransmitPacketLength),l);
-
- for(i=0;i<l;i++)
- {
- SpiWriteAddressData((REG_WRITE | FIFOAccess),*d);
- d++;
- }
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09); //TX
- SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断
- while((SpiWriteAddressData((REG_READ | InterruptStatus1), 0x00)&0x04)==0);
- //delay_nms(30);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05); //into manual receive mode
-
- }
- void RF_R(unsigned char *d)
- {
- unsigned char index,ttt;
- SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x22);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x02); //clear FIFO content
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x01); //clear FIFO content
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01); //TXRX XX
- while(1)
- {
- if (key0==0) //按键检测
- {
- delay_nms(25); //防误处理
- if (key0==0)
- {
- led=0;
- RF_T(tt,16);
- TxData (0x01);
- delay_nms(25);
- while(key0==0); //等待弹起
- // delay_nms(25);
- led=1;
- SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x22);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05); //into manual receive mode
- }
- }
- if(RF_nIRQ)
- {
- break;
- }
-
- }
- delay_nms(2);
- SpiWriteAddressData((REG_READ | InterruptStatus1),0x00); //valid package received
- delay_nms(5);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01); //xtal on,exit rx mode
- ttt = SpiWriteAddressData((REG_READ | ReceivedPacketLength), 0x00); //read rx package number
-
- for(index=0;index<16;index++)
- {
- d[index]=SpiWriteAddressData((REG_READ | FIFOAccess),0x00);
- }
- }
- void main()
- {
- RF_SDN=0;//使能芯片
- Inituart();
- EA=0;
- RfInitHw(); //Initialize the radio //set the radio into IDLE mode: only the crystal oscillator is running
- EA=1;
- while(1)
- {
- RF_R(RF_RX_Buffer);
- if(RF_RX_Buffer[0]==0x01)
- {
- led3=0;
- }
- else
- {
- led3=1;
- led2=0;
- }
- }
- /*while(1)
- {
- if (key0==0) //按键检测
- {
- delay_nms(10); //防误处理
- if (key0==0)
- {
- led=0;
- TxData (0x01);
- delay_nms(25);
- while(key0==0); //等待弹起
- // delay_nms(25);
- led=1;
-
- }
- }
- }*/
-
-
- }
- /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- +
- + FUNCTION NAME: uint16 SpiReadWriteWord(uint16 data)
- +
- + DESCRIPTION: sends and read 16 length data through the SPI port
- +
- + INPUT: data
- +
- + RETURN: received word
- +
- + NOTES: it controls the nSEL pin
- +
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
- /*unsigned int SpiReadWriteWord(unsigned int mdata) //spi读写字节
- {
- unsigned char i;
- unsigned int temp;
-
- EA=0;
- RF_SCLK = 0;
- RF_SEL = 0;
- for(i=0;i<16;i++)
- {
- RF_SCLK = 0;
- if(mdata & 0x8000)
- {
- RF_MOSI = 1;
- }
- else
- {
- RF_MOSI = 0;
- }
- RF_SCLK = 1;
- mdata <<= 1;
- temp <<= 1;
- if(RF_MISO)
- {
- temp |= 0x0001;
- }
- }
- RF_SCLK = 0;
- RF_SEL = 1;
- EA=1;
- return(temp);
- }*/
- /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- +
- + FUNCTION NAME: void SpiWriteAddressData(uint8 address, uint8 data)
- +
- + DESCRIPTION: sends 16 length data through the SPI port (address and data)
- +
- + INPUT: address - register address
- + data - 8bit data
- +
- + RETURN: None
- +
- + NOTES: It controls the nSEL pin
- +
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
-
- /*unsigned char SpiWriteAddressData(unsigned char address, unsigned char mdata)
- {
- unsigned char i;
- EA = 0;
- RF_SCLK = 0;
- RF_SEL = 0;
-
- for(i=0;i<8;i++)
- {
- RF_SCLK = 0;
- if(address & 0x80) RF_MOSI = 1;
- else RF_MOSI = 0;
- RF_SCLK = 1;
- address <<= 1;
- }
- for(i=0;i<8;i++)
- {
- RF_SCLK = 0;
- if(mdata & 0x80) RF_MOSI = 1;
- else RF_MOSI = 0;
- RF_SCLK = 1;
- mdata <<= 1;
- }
- RF_SCLK = 0;
- RF_SEL = 1;
- EA = 1;
- return 0;
- }
- void RF_R(unsigned char *d) //接受数据
- {
- unsigned char index,yyy,ttt;
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x02);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x05);
- while(1)
- {
- yyy=SpiWriteAddressData((REG_READ | InterruptStatus1),0x00);
- if(yyy&0x02) break;
- }
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
- ttt = SpiWriteAddressData((REG_WRITE | ReceivedPacketLength), 0x00);
- for(index=0;index<ttt;index++)
- {
- d[index]=SpiWriteAddressData((REG_READ | FIFOAccess),0x00);
- }
- }
- void RF_T(unsigned char *d,unsigned char l) //发射数据
- {
- unsigned char i;
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x01);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x01);
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl2), 0x00);
- SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x00);
- SpiWriteAddressData((REG_WRITE | InterruptEnable2), 0x00);
- SpiWriteAddressData((REG_WRITE | TransmitPacketLength),l);
- for(i=0;i<l;i++)
- {
- SpiWriteAddressData((REG_WRITE | FIFOAccess),*d);
- d++;
- }
- SpiWriteAddressData((REG_WRITE | OperatingFunctionControl1), 0x09);
- SpiWriteAddressData((REG_WRITE | InterruptEnable1), 0x04); //使能发送有效包中断
- while((SpiWriteAddressData((REG_READ | InterruptStatus1), 0x00)&0x04)==0);
- }*/
复制代码 BOM:
2 | C0, C2 | 100pF | Ceramic Chip Capacitor | +/-5% | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H101J | DIGIKEY | 490-3458-2-ND | 1 | C1 | 33pF | Ceramic Chip Capacitor | +/-5% | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H330J | DIGIKEY | 490-3220-2-ND | 1 | C3 | 100nF | Ceramic Chip Capacitor | +/-10% | 16V |
|
| X7R | SMD 0402 | RoHS Compliant | Murata | GRM155R71C104K | DIGIKEY | 490-3261-2-ND | 1 | C4 | 2.2uF | Ceramic Chip Capacitor | +/-10% | 10V |
|
| X5R | SMD 0603 | RoHS Compliant | Murata | GRM188R61A225K | DIGIKEY | 490-1545-2-ND | 1 | C5 | N.F. | Ceramic Chip Capacitor |
|
|
|
|
| SMD 0603 | RoHS Compliant | Murata | GRM18 series |
|
| 2 | C12, C14 | 100pF | Ceramic Chip Capacitor | +/-5% | 100V |
|
| C0G | SMD 0603 | RoHS Compliant | Murata | GRM1885C2A101J | DIGIKEY | 490-1351-2-ND | 1 | C13 | 1uF | Ceramic Chip Capacitor | +/-10% | 16V |
|
| X5R | SMD 0603 | RoHS Compliant | Murata | GRM188R61C105K | DIGIKEY | 490-1536-2-ND | 2 | C16, C23 | 100nF | Ceramic Chip Capacitor | +/-10% | 25V |
|
| X7R | SMD 0603 | RoHS Compliant | Murata | GRM188R71E104K | DIGIKEY | 490-1524-2-ND | 2 | CC1, CC2 | 220pF | Ceramic Chip Capacitor | +/-5% | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H221J | DIGIKEY | 490-1293-2-ND | 1 | CH | 11pF | Ceramic Chip Capacitor | +/-5% | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H110J | DIGIKEY | 490-3216-2-ND | 1 | CM | 5.6pF | Ceramic Chip Capacitor | +/-0.5pF | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H5R6D | DIGIKEY | 490-1275-2-ND | 2 | CM2, CM3 | 9.1pF | Ceramic Chip Capacitor | +/-0.5pF | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1885C1H9R1D | DIGIKEY | 490-1402-2-ND | 1 | CR1 | 4.7pF | Ceramic Chip Capacitor | +/-0.25pF | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H4R7C | DIGIKEY | 490-1273-2-ND | 1 | CR2 | 12pF | Ceramic Chip Capacitor | +/-5% | 50V |
|
| C0G | SMD 0402 | RoHS Compliant | Murata | GRM1555C1H120J | DIGIKEY | 490-1279-2-ND | 1 | CS1 | CON40R | 2X20 Pin Header | Male Pin |
|
|
|
|
| 2.54mm (100"), Dual Row, Right Angle | RoHS Compliant | Molex | 702474051 | DIGIKEY | 70247-4051-ND | 1 | IC1 | Si4432 RevB1 | ISM TRANSCEIVER; +20dBm | 1.8V - 3.6V |
|
| QFN-20 | RoHS Compliant | Silicon Labs | Si4432-B1-FM |
|
| 1 | IC2 | 25AA080C | 8K SPI Bus Serial EEPROM | 1.8V-5.5V |
|
| TSSOP-8 | RoHS Compliant | Microchip | 25AA080C | DIGIKEY | 25AA080C-I/ST-ND | 1 | IC3 | uPG2214TB | L, S-Band SPDT Switch |
| 1.8-5.3V |
|
|
| 6-pin super minimold | RoHS Compliant | NEC/CEL | UPG2214TB-A | DIGIKEY | UPG2214TB-A-ND | 2 | L0, LM | 22nH | Wirewound Ceramic Chip Inductor | +/-5% |
| 800mA |
|
| SMD 0402 | RoHS Compliant | CoilCraft | 0402HP-22NXJL |
|
| 1 | LC | 270nH | Wirewound Ceramic Chip Inductor | +/-5% |
| 360mA |
|
| SMD 0402 | RoHS Compliant | CoilCraft | 0402AF-271XJL |
|
| 1 | LH | 10nH | Wirewound Ceramic Chip Inductor | +/-5% |
| 1300mA |
|
| SMD 0402 | RoHS Compliant | CoilCraft | 0402HP-10NXJL |
|
| 1 | LM2 | 15nH | Wirewound Ceramic Chip Inductor | +/-5% |
| 1100mA |
|
| SMD 0402 | RoHS Compliant | CoilCraft | 0402HP-15NXJL |
|
| 1 | LR | 27nH | Wirewound Ceramic Chip Inductor | +/-5% |
| 450mA |
|
| SMD 0402 | RoHS Compliant | CoilCraft | 0402HP-27NXJL |
|
| 1 | Q1 | 30MHz | Crystal, 30MHz, 10pF | 10ppm |
|
|
|
| Ceramic SMD; 2.5X2X0.6mm | RoHS Compliant | Tai-Saw Technology | TZ1430A |
|
| 1 | Q2 | 32.768kHz | Crystal, 32.768kHz, 12.5pF | Tuning Fork | +/-20ppm |
|
|
|
| SMD 8.0mm x 3.8mm | RoHS Compliant | ECS | ECS-.327-12.5-17X-TR | DIGIKEY | XC1195CT-ND | 4 | R1, R4, R10, R13 | 100k | Chip Resistor |
| +/-5% |
|
| 1/10W |
| SMD 0603 | RoHS Compliant | Yageo | RC0603JR-07100KL | DIGIKEY | 311-100KGRTR-ND | 2 | R2, R9 | 10k | Chip Resistor |
| +/-5% |
|
| 1/10W |
| SMD 0603 | RoHS Compliant | Yageo | RC0603JR-0710KL | DIGIKEY | 311-10KGRTR-ND | 1 | R5 | N.F. | Chip Resistor |
|
|
|
|
|
| SMD 0603 | RoHS Compliant | Yageo | RC0603 series |
|
| 1 | RDC | 0R | Chip Resistor |
| +/-5% |
|
| 1/16W |
| SMD 0402 | RoHS Compliant | Yageo | RC0402JR-070RL | DIGIKEY | 311-0.0JRTR-ND | 1 | RH | 50R | Chip Resistor |
| +/-1% |
|
| 1/16W |
| SMD 0402 | RoHS Compliant | Yageo | RC0402FR-0749R9L | DIGIKEY | 311-49.9LRTR-ND | 1 | TRX | SMA-RA | Female SMA Connector | Threaded |
|
|
|
|
| Through Hole; Right Angle | RoHS Compliant | Tyco Electronics | 5-1814400-1 | DIGIKEY | A97593-ND |
全部资料(压缩包)下载:
|
|