-
Notifications
You must be signed in to change notification settings - Fork 214
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[DMA 8/8] Burst configuration #2543
base: main
Are you sure you want to change the base?
Conversation
f2fae81
to
9b608fe
Compare
Easier said than done. Before this can happen, the work to remove Why? Enabling extmem support in Another nice thing about |
Note that length is always unconstrained, alignment requirements are for address and size only. For reads, the DMA will pad the received data to 128 bytes, using zeroes. Then the DMA sets the length to the actually received amount. For writes, |
Yes but how do you tell the SPI to only read 120 bytes, instead of the 128 that |
Ah okay I understand your issue, it's not a hardware-related one. Yeah this is a consequence of the design right now 🤷♂️ I'm guessing we could add a read_length (in spirit, not necessarily in name) field to DmaRxBuf, that we'd use to set up the peripherals. That value wouldn't affect the descriptors, but users could use it to set an upper limit to how much data they want to read. |
Indeed
Yeah that would work but supporting that on other infinite-length descriptors would be awkward. |
Please explain this a bit |
Oops typo. I meant buffers not descriptors. (I need to read my comments more)
|
This comment was marked as outdated.
This comment was marked as outdated.
81286d6
to
4ea6b19
Compare
Yes! I'm proposing that the peripheral takes the length. I.e. The use case I'm thinking of is the user wants to send (or read) 30000 bytes to an spi device but doesn't want to allocate a 30,000 byte buffer. They could make do with 4000 bytes only and stream the data with a stream buf. SPI and parl io have special interrupts to let the user know when they were too slow. |
Alright, that sounds to me like a problem for later. For now, if someone is fine with block aligned reads, they are free to allocate the RX buffer in PSRAM. |
@@ -122,27 +122,27 @@ mod test { | |||
let mut spi = Spi::new_with_config( | |||
peripherals.SPI2, | |||
Config { | |||
frequency: 100.kHz(), | |||
frequency: 10000.kHz(), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Had to speed these (well, one but I didn't bother figuring out which one, probably SPI3) up, otherwise this test failed (but only with generic-queue). I think it's a setup time regression, and we ran out of the 1ms tick used by the interrupt task, thereby starving the main task. Considering we were transferring 64 bits at 100kHz, we were already close anyway.
Moved this PR back a spot, as this is probably the bigger and more complex change. |
Thank you for your contribution!
We appreciate the time and effort you've put into this pull request.
To help us review it efficiently, please ensure you've gone through the following checklist:
Submission Checklist 📝
cargo xtask fmt-packages
command to ensure that all changed code is formatted correctly.CHANGELOG.md
in the proper section.Extra:
Pull Request Details 📖
Description
This PR adds burst mode configuration to the DMA buffers. The PR also describes burst mode constraints for both internal and PSRAM accesses, where applicable.