CMWX1ZZABZ-078 TxTimeout error

Hello,

I have built a custom PCB which contains a few sensors and CMWX1ZZABZ-078 Murata chip. I also have a B-L072Z-LRWAN1 development board, on which I have been testing my code based on the projects provided by ST website (STM-CUBE PingPong project for example).

My project runs very well on the development board, but it does not send any data when run on 078 chip on my PCB. I debugged the project using SystemWorkbench and STLINK-V2 and found that after every Radio.Send() call, RadioEvents.TxTimeout is called. Ideally if the data is sent, TxDone should be called, which I guess is happening on the development board but not on my PCB.

Can someone help me figure out why this TxTimeout occurs? I have deciphered from the code that DIO0 pin should trigger a TxDone callback, and I am guessing that pin is internally connected to the mapped pin on STM32, but I don’t see it anywhere in documentation. Is this because of using 078 chip vs 091 chip which is on the development board?

Thanks for your help!

A wild guess … How did you hook up TCXO_VDD ?

Connected to PA12 and I have changed the define statement in mlm32l0xx_hw_conf.h file too. The error is still there.

@GrumpyOldPizza I debugged a bit more and found out that the RegOpMode register never changes value from Sleep-mode (0x00) hence never goes into Tx mode or even Standby mode. Any idea why this might be happening?

Naive question, can you read the chipID of SX1276, just to exclude SPI communication problems ?

I am asking, because out of reset RegOpMode should return 0x08. And all the code that you are dealing with would not touch this bit (no matter whether FSK or LoRa modem).

@GrumpyOldPizza I am sorry for being unclear, the RegOpMode content is 0x88, of which last 3 bits are 000 which denote sleep state. I tried reading chipID and a few other registers and reading and writing registers via SPI is working fine.

Ok, when do you read RegOpMode ? In TxTimeout, or where ?

@GrumpyOldPizza I added a read statement in SX1276Send function, right after it calls SX1276SetStby. I also added a while loop which reads RegOpMode and keeps setting it to standby until it leaves sleep mode. The code is then stuck in the while loop.

I think there may be an issue with the VDD_TCXO connection (not soldered correctly perhaps). Would one be able to read and write to registers in that case (TXCO is 0 case)? And would the write to RegOpMode get reflected?

SLEEP mode does not need the TCXO (or OSC), but STANDBY does (and any other mode but SLEEP). So that’s why the TCXO is a good candidate.

I can think about a bazillion other things that normally could go wrong, but those are all hardwired on the Murata module …

@GrumpyOldPizza can we read if clock is being enabled using PH0 pin, connected to TCXO_OUT (Murata datasheet says that connection is optional, but I have added it on my board)?

Also, I checked multiple boards and all are facing the same issue hence I dont think this is an error in soldering. What other register settings could possibly affect this?

On which GPIO did you put VDD_TCXO ? PA12 ? Did you check that it’s actually driven properly ? Or is PA12 by chance also used for USB ?