Dear all,
I need to interface Silicon Labs Si4432 v1.0 Module with PIC16F1938 thru' SPI module. I could not able to receive signal from Si4432.
The settings are follows:
Si4432 V1.0 RF MODULE: SILICON LABS
MCU - PIC16F1938 - 8 BIT MCU
HARDW(A)IRES CONNECTION:
GND - GND
GPIO_0 - 0 V - UNCONNECTED TO MCU
GPIO_1 - 2.90 V - UNCONNECTED TO MCU
GPIO_2 - 1.42 V - UNCONNECTED TO MCU
VDD - 2.90V (
2 AA BATTERY)
SDO - 0V - CONNECTED TO MCU'S SDI
SDI - 0V - CONNECTED TO MCU'S SDO
SCLK - 0V - CONNECTED TO MCU'S SCLK
nSEL - 0V - CONNECTED TO MCU'S DIG I/O PIN
nIRQ - 0V - CONNECTED TO MCU'S INTERRUPT PIN
SDN - GND - Always ON
GND - GND
MCU:
1. RB0 - SET AS INPUT (TRISB0 = 1) for nIRQ interrupt
2. RC4 - SET AS INPUT (TRISC4 = 1) for SDI
3. MCU internal clock - 4 MHz
4. INTIE and SSPIE interrupts enabled and GIE set
SW CODE:
init SPI Module:
Code C - [expand] |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| void init_SSP_Module(){
SSPIE = 1;
SSPIF = 0;
// SSP STATUS Register
SSPSTAT = 10000000; // 8 - SMP -> SPI data input sample bit - 1 = Input data sampled at end of
//data output time
// 7 - CKE: SPI Clock Edge Select bit - 0 = Transmit occurs on transition from
// Idle to active clock state
// 6-0 - USED FOR I2C ONLY
// SSP CONTROL 1 Register
SSPCON1 = 00100000; // 76 - READ ONLY
// 5 - SSPEN: Synchronous Serial Port Enable bit
// 4 - CKP: Clock Polarity Select bit - 0 = Idle state for clock is a low level
// SSPM<3:0>: Synchronous Serial Port Mode Select bits
// 0000 = SPI Master mode, clock = FOSC/4
SSPCON3 = 00000000; // 765 - READ ONLY
// 4 - BOEN: Buffer Overwrite Enable bit
// 0123 - READ ONLY
RC2 = 1; // pull nSEL (Si4432) pin High
} |
Reading Si4432:
1. char ItStatus1;
2. ItStatus1 = SpiReadRegister(0x03); //read the Interrupt Status1 register
Code C - [expand] |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| char SpiReadRegister (char reg)
{
RC2 = 0; // set nSEL low
SSPBUF = reg; //write data into the SPI register;
while(SSPIF == 0);
SSPIF = 0;
SSPBUF = 0xFF; //write dummy data into the SPI register
while(SSPIF == 0);
SSPIF = 0;
RC2 = 1;
return SSPBUF;
} |
Si4432 - Serial Peripheral Interface (SPI)
The Si4430/31/32 communicates with the host MCU over a standard 3-wire SPI interface: SCLK, SDI, and nSEL. The host MCU can read data from the device on the SDO output pin. A SPI transaction is a 16-bit sequence which consists of a Read-Write (R/W) select bit, followed by a 7-bit address field (ADDR), and an 8-bit data field (DATA) as demonstrated in Figure 3. The 7-bit address field is used to select one of the 128, 8-bit control registers. The R/W select bit determines whether the SPI transaction is a read or write transaction. If R/W = 1 it signifies a WRITE transaction, while R/W = 0 signifies a READ transaction. The contents (ADDR or DATA) are latched into the Si4430/31/32 every eight clock cycles. The timing parameters for the SPI interface are shown in Table 10. The SCLK rate is flexible with a maximum rate of 10 MHz.
any help?
thanks
pmk