Hi Bert, On 10/30/23, Bert Voldenuit <bertvolden...@gmail.com> wrote: > Hi Alan, > Thanks for adding Brennan to the discussion. > > My answers below. > > Le lun. 30 oct. 2023 à 16:09, Alan C. Assis <acas...@gmail.com> a écrit : > >> Hi Bert, >> >> I'm CC Brennan (the original author) and Victor (the author of the >> other driver using ESP32 RMT) they have more experience with WS2812. >> >> On 10/29/23, Bert Voldenuit <bertvolden...@gmail.com> wrote: >> > Hi Alan, >> > >> > Thanks to your advices, I was able to find why >> > board_ws2812_initialize() >> > was not in System.map. >> > Now it mounts and opens ws2812 driver. >> > >> >> Great, what was the issue? > > --> I forgot to activate board_late_initialized > --> By default the ws2812 driver allocate memory for each color (8bits) for > RGBW (4 colors). My leds are RGB only so I had to change 4->3. I will try > to add a parameter instead of a fixed value. > >> >> > Indeed the SPI is not a piece of cake. I think I have it almost right >> > but >> > MOSI pin is idling high which is a problem for the reset which must be >> low >> > and I can' get it to the right timing. >> > >> >> Exactly, using SPI to control the WS2812 seems challenging, you will >> need to fiddling with it a little bit until get things working. >> >> > SPI frequency is set to 6MHz >> > >> > In ws2812.c >> > I had to change WS2812_ONE_BYTE. I added one more 1 to fit the timing >> > for >> > SK6812 >> > Target Measured (see Scope figure 1) >> > T0H 0 0.3μs ±0.15μs 0.34µs >> > T1H 1 0.6μs ±0.15μs 0.68µs >> > T0L 0 0.9μs ±0.15μs 0.86µs >> > T1L 1 0.6μs ±0.15μs 0.52µs >> > Reset 80µs 20µs (Not Good) >> > >> >> I'm not sure you need to change the number of bits, AFAIK it should be >> only the frequency you should play with. SAMD21 (and many others SAM >> chips) has a very advanced clock system (even compared with some >> advanced processor) >> > --> True! I will try to fit the target by changing the clock without > changing the bits > > >> > I Changed WS2812_RST_CYCLES for 80µs but I still get 20µs, so it look >> like >> > it has no effect AND it is idling High (see Scope figure 2). >> > >> > Questions: >> > >> > - On Scope Figure 1, is it normal SPI is idling for 2.2µs between each >> > byte? >> > >> >> It could be caused by the driver itself. Maybe using SPI with DMA will >> reduce this idle time. > > --> Ah! I thought it was already using DMA. Now I understand that the delay > should be the cpu time needed to send the next bit. > --> Yes using the DMA would definitely improve the driver. I checked on > another library that it is possible to loop on DMA so when there is no data > to send, it sends zeros forever at no cpu cost. > --> I have no idea how to handle and allocate DMA. I saw a DMA trigger in > the SPI option, will it be necessary to activate? I will try to add the DMA > option in the driver. >
The SPI driver already supports DMA, you just need to use CONFIG_SAMD2L2_SPI_DMA BR, Alan