It is not a secret, the SPI interface of the RPi3 has some issues and from time to time the MP Packet Forwarder from @kersing is is not too happy and spits out the infamous “failed to start the concentrator” message.
I have now 2 RPi3/IC880A and I was observing different behaviour: one of them could almost never start the Packet Forwarder from the first time, while the other had usually no problem.
The funny thing is that the one having more problem was the one with the frequency locked at 250MHz (core_freq=250
)!
So I decided to look more in detail on what was happening with the SPI interface.
The Packet Forwarder set the SPI speed to 8MHz.
By default, the RPi3 runs at 250MHz, but the SPI speed is calculated for the full speed of the processor. When you ask 8MHz, you actually get 8/400*250 = 5MHz!
If the RPi suddenly decides to go in “Turbo” mode to 400MHz, then you get variable SPI Speed, which is why it is recommended to lock the speed at 250MHz with core_freq=250
.
But when you have core_freq=250
, the SPI speed is set correctly: you ask 8MHz, you get 8MHz.
So to make this long story short: when you ask to get a slower CPU, your SPI speed will be higher! (at least most of the time)
That’s what gave me the idea to run at 250MHz (core_freq=250
) but with a SPI speed kept at 5MHz (using the -s
option of the Packet Forwarder).
I have now restarted the Packet Forwarder on my gateways dozens of time, without a single error.
So far my conclusion is that 8MHz is to fast to get a stable communication between the RPi3 and the IC880A.
Hope this can help somebody else – if you have “failed to start the concentrator” when you restart the packets forwarder, try to lower the SPI speed.
(I have added a speed parameter on my docker/resin configs)