-
Notifications
You must be signed in to change notification settings - Fork 7.6k
drivers: serial: nrfx_uarte: Add extension that uses TIMER byte counting on nrf54x devices #92767
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
Open
nordic-krch
wants to merge
9
commits into
zephyrproject-rtos:main
Choose a base branch
from
nordic-krch:uart_byte_count
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+1,426
−300
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
b1deffa
to
ae68327
Compare
The following west manifest projects have changed revision in this Pull Request:
⛔ DNM label due to: 1 project with PR revision Note: This message is automatically posted and updated by the Manifest GitHub Action. |
ae68327
to
62843b5
Compare
Update hal_nordic with nrf_uarte change. Add functions for setting PTR and MAXCNT separately. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Timer property indicates which TIMER instance should be used for byte counting. If timer property is present then given instance is using TIMER to count received bytes. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Rearrange code to prepare for upcoming extension that adds special receive mode. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
07a11f1
to
c4cd989
Compare
Add mode to be used on UARTE with frame timeout which is using a bounce buffers and TIMER to count bytes. This mode shall be used to reliably receive data without HWFC as frame timeout approach is not 100% reliable because it can loose or corrupt a byte when new byte arrives after frame timeout is detected but before it is fully handled. This mode is similar to the one enabled with CONFIG_UART_x_NRF_HW_ASYNC but additional bounce buffers are used and UARTE is receiving data to internal buffers and copies data to the user buffer. Legacy apporach cannot be used because in new SoC DMA attempts to copy data in words so when byte is received it stays in the DMA internal buffer until 4 bytes are received or end of transfer happens then internal DMA buffer is flushed. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Add reporting about the test progress. Test lasts few seconds and progress report helps to see if test stuck or how it is progressing. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Extend test with a mode where HWFC is off and receiver is providing buffers on time. In that case receiver should be able to continuously receive data without losing any byte (even without HWFC). Additionally, TX data is chopped to verify that receiver does not loose bytes when new TX data collides with detected RX timeout. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Add timer property to the uart device under test. Add zephyr,pm-device-runtime-auto to the uart device under test. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Add workaround timer to instances that are used for reception in the test. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
Stress test is executed on CPUs with slow clock (16MHz). Handling of test data in UART_RX_RDY event is optimized to reduce time spent in the interrupt context. Since payload is always a decrementing sequence, fixed array is used to compare memory which allows to use standard memcmp instead of byte by byte comparison. Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
c4cd989
to
50c48b9
Compare
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area: UART
Universal Asynchronous Receiver-Transmitter
DNM (manifest)
This PR should not be merged (controlled by action-manifest)
manifest
manifest-hal_nordic
platform: nRF
Nordic nRFx
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Extend uart_nrfx_uarte driver to support a mode of operation that is using bounce buffers and TIMER to count bytes (only applies to Asynchronous API). UARTE may lose or get a corrupted byte if new data appears on the line when RX timeout expired. In that case receiver is restarted and if there is a byte on the line when that restart happens then that byte will be lost or corrupted. This is relevant only to reception without HWFC.
Mode is using a TIMER instance and DPPI to count bytes using UARTE RXDRDY event. There is already a similar mode that is enabled using
CONFIG_UART_x_NRF_HW_ASYNC
for legacy platforms but it cannot be used on newer SoCs due to different DMA behavior.New mode is enabled by specifying a
timer
property which points to the TIMER instance (e.g..timer = <&timer21>
). Timer node that is used for that should be reserved.Overlay example:
PR extends
uart_async_dual
stress test with a case which validates that the receiver is able to received chopped data (data sent in chunks with random gaps between).