DMA and W5500 ethernet chip #18566
Replies: 3 comments 2 replies
-
|
As of now you don't have any DMA code at all in your program. |
Beta Was this translation helpful? Give feedback.
-
|
Can't help with the DMA query, but you could get better performance by simply adding the INTerrupt pin. |
Beta Was this translation helpful? Give feedback.
-
|
I'm not familiar with the W5500, so I can't really comment on the specifics of sending data on a socket that way, but in general trying to use DMA to send data directly into chips that are otherwise managed by device drivers is usually dangerous and error prone, since the state in the device driver will get out of sync with the chip. You will likely be better off writing a patch to the W5500 driver than trying to drive the DMA code from Python. If you did that then sending data to the hardware RP2 SPI engine using DMA is fairly easy. In fact the existing SPI transfer code already uses DMA for large blocks, it just doesn't offer a "fire and forget" mode and will always idle until the transfer completes. Why specifically do you want to do this with zero CPU utilisation? If what you want to be doing the rest of the time can be done by just one of the two CPU cores you might find it a great deal easier to use the standard code but run it on the second CPU core using the Micropython |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi,
I have a development board that features a W5500 Ethernet chip and communicates with an RP2350 over SPI.
I would like to pass a variable (150 kB fixed memory size, which is continuously updated and always holds the latest data) to the W5500 chip without CPU involvement, using DMA. The W5500 communicates over SPI, and I cannot figure out how to transfer memory to the SPI peripheral using DMA.
This is my current code (reduced to the bare minimum). The memory is filled with random data, and after each HTTP request, a random byte is changed to 0xAF.
By using DMA, I would like to serve at least 30 requests per second.
Beta Was this translation helpful? Give feedback.
All reactions