I’m developing a radio receiver using a Si4455 radio and a PIC24 microcontroller. I’m trying to build a custom RX interface. Before designing the board, I played around with the Si4455 development kit. By means of WDS I created a project for Keil, which I took as a reference to create the project for the PIC24. I used the very same functions and software routines.
The SPI communication is OK, I can issue a PART_INFO command and get a meaningful response, i.e.
CHIPREV = 0x22
PART[15:8] = 0x44
PART[7:0] = 0x55
PBUILD = 0x00
ID[15:8] = 0x86
ID[7:0] = 0x00
CUSTOMER = 0x00
ROMID = 0x06
which confirms that that my chip is a Si4455 radio with C2 revision number (ROMID=0x06 as I found in this post http://community.silabs.com/t5/Proprietary/Si4455-set-up-problem/m-p/168498).
That is the response that I get if I issue the PART_INFO command after the power-up and before initializing the radio, i.e after having released the shutdown pin and before sending all the API commands. The radio apparently gets configured, because every time a command is sent, the CTS is acknowledged, but if I issue the PART_INFO command after the configuration process, I get only zeros. I found that as soon as I send the first configuration command, which is the first line of the SI446X_PATCH_CMDS contained in the configuration header created by the WDS software, if I send another PART_INFO command, the radio replies with all zeros. After sending the first command also the interrupt pin nIRQ goes low and it doesn’t get high anymore, no matter if continuously sends a GET_INT_STATUS command. Every time I issue a GET_INT_STATUS command, the radio replies with all zeros. If I probe a pin of the 30MHz crystal, it is not oscillating. The configuration commands are sent only after the GPIO0 (POR) and GPIO1 (CTS) go high.
At the beginning, I thought it was a problem of the patch, therefore I simply removed it from the RADIO_CONFIGURATION_DATA_ARRAY in the configuration header. If I don’t send the patch, I get the proper response from the PART_INFO command even at the end of the configuration process, but the radio is not working. The nIRQ pin goes low after the very first command being sent and it doesn’t get high anymore. When I issue a GET_INT_STATUS command I get always zeros. Also this time the crystal is not oscillating.
Nevertheless I think that the patch is not the problem, since in the post I’ve cited above, an employee from Silabs stated that the patch must be sent also to Si4455 radios. Therefore, I think I should send it.
Does someone have any hints? I feel like I’m forgetting to do some basic steps during initialization.
If you are sending the patch, send the entire patch without sending other commands between the patch lines and before the POWER_UP command. See section "9.6. Patching the Radio" of http://www.silabs.com/documents/public/application-notes/AN633.pdf . Follow the startup sequence in section "4.4. Radio Chip Waking Up" of http://www.silabs.com/documents/public/application-notes/AN692.pdf . For testing your startup sequence sw you can try not to send the patch, but it is recommended to include it finally. Remember to set the PATCH bit in the POWER_UP command accordingly. XO has to start during POWER_UP but avoid loading it with your scope probe by inserting a series capacitor.
Problem solved. It was an issue with the PIC24 SPI communication. I wasn't waiting enough time between command sending and buffer polling. Therefore, some commands were overwritten.
I am looking for any code example or library for Si4455 for PIC18.
Have you wrote your own library?
Would you be able to share your library, please?