Implementing rng


I would like to use the hardware RNG from my samr1-xpro board. It should be available by reading out a certain register, according to the AT86RF233 documentation. My problem is, that I don't how to do that (I am pretty new to this stuff). Is there some documentation available for this kind of task, or could you point me in the right direction?

cheers Mathias

OK, I have managed the first step myself and wrote the code which reads out the random values from the RNG. What would be the next step, that would allow me to set the periph_random feature for the samr21-xpro board?

cheers Mathias

Hi Mathias,

I think the way to go here is to implement the drivers/include/periph/hwrng.h interface. For this I think it makes sense to add a function that reads the random data from the radio to the at86rf2xx driver and call this function from the hwrng driver.

Cheers, Hauke

I am a bit confused, where to put that code. As far as I can tell, all current implementations of the hwrng functions are implemented on the cpu and not on the board level. While my rng is on the at86rf2xx chip, which is a driver. Can I put the feature in the driver?

Hi Mathias,

[1] is the interface that should be implemented by your driver. The driver is CPU specific and should be placed in RIOT/cpu/*/periph/hwrng.c like e.g. here [2].

Does that reduce your confusion or did I get you wrong :slight_smile: ?

Best Peter

[1] [2]

Hi Mathias, I think (but I never implemented any device drivers so take this with a grain of salt) the most sensible solution would be to add a function to the at86rf2xx driver that returns a result from the RNG and then wrap it with periph_hwrng on all boards that come with this device.

Hope this was helpful, Martine