Receive sai multichannel data into multiple buffs using sdma

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Receive sai multichannel data into multiple buffs using sdma

Jump to solution
1,992 Views
tongt
Contributor I

使用sdma接收sai多通道数据到多个buff中

Receive sai multichannel data into multiple buffs using sdma

在使用sai及sdma接收数据的时候,如果使用multififo等机制,接收到的数据会在一个buff中,能不能使用sdma的多通道功能,使接收到的数据按照通道分散到各执的buff中?

When using sai and sdma to receive data, if you use such as multififo, the received data will be in a buff, can you use the multi-channel function of sdma so that the received data is dispersed according to the channel in the buff of each execution?

_1-1715928528878.png

以上图为例子,第一组4字节为第一个通道,连续的第二组4字节为第二个通道,总共4个通道,实际使用的时候需要对某一个通道的数据进行拷贝,拷贝出一个完整通道的数据
The above figure as an example, the first group of 4 bytes for the first channel, the second consecutive group of 4 bytes for the second channel, a total of 4 channels, the actual use of the time you need to copy the data of a channel, copy out a complete channel data

我尝试使用如下代码,但是回调函数总是不能被调用

I tried to use the following code, but the callback function always fails to be called

_0-1715927543295.png

这种方案有没有问题,能不能实现,如果要实现需要关注哪些呢?

Are there any problems with this option, can it be achieved, and what needs to be focused on if it is to be achieved?

0 Kudos
Reply
1 Solution
1,817 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

在未对SDK大幅改动的情况下,不行,而且目前的sdma脚本只支持交错存储,不支持自定义的多个buffer地址。

View solution in original post

0 Kudos
Reply
7 Replies
1,901 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi @tongt 

你的这个想法已经在SDK里集成了,但是用法不对。smda script里有针对SAI multi-fifo的脚本,详细参数请看手册的 A.3.2.8 mcu_2_sai 

Zhiming_Liu_0-1716268355591.png

Zhiming_Liu_1-1716268459452.png

SDK里的SAI_TransferSendSDMA  API也支持script里的这个功能,如果配置的通道数大于1,SAI_TransferSendSDMA 里会使用milti-fifo这个功能读取数据,然后返回第一个buffer,对于其余的buffer,是在这个buffer基础上+offset(默认是4U)。callback应该是一个就行,然后指定通道的时候用或逻辑试试。然后设置saiConfig里的channelNums和channelMask

Zhiming_Liu_2-1716269676812.png

Zhiming_Liu_3-1716270334737.png

 

0 Kudos
Reply
1,825 Views
tongt
Contributor I

@Zhiming_Liu 下午好

目前接收是使用了multi fifo的。offset的类型为uint8_t,也就是最大为255,如果需要buff的偏移更大,有没有办法呢(目前每次接收64K数据,包含4个通道,每4个字节交错),如果不使用offset,如之前说的,4个通道能不能对应到sdma的4个通道上,这4个sdma的通道对应4个不同的buff地址,能不能实现呢

0 Kudos
Reply
1,818 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

在未对SDK大幅改动的情况下,不行,而且目前的sdma脚本只支持交错存储,不支持自定义的多个buffer地址。

0 Kudos
Reply
1,814 Views
tongt
Contributor I
谢谢
0 Kudos
Reply
1,927 Views
Zhiming_Liu
NXP TechSupport
NXP TechSupport

Hi @tongt 

你用的是哪颗芯片?

0 Kudos
Reply
1,913 Views
tongt
Contributor I
imx8mp
0 Kudos
Reply
1,909 Views
tongt
Contributor I

另外我还修改了 SAI_TransferRxCreateHandleSDMA以及

/*<! Private handle only used for internally. */
static sai_sdma_private_handle_t s_sdmaPrivateHandle[ARRAY_SIZE(s_saiBases)][16];

tongt_0-1716261721673.png

@Zhiming_Liu 感谢回复

0 Kudos
Reply
%3CLINGO-SUB%20id%3D%22lingo-sub-1867768%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EReceive%20sai%20multichannel%20data%20into%20multiple%20buffs%20using%20sdma%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1867768%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%BF%E7%94%A8sdma%E6%8E%A5%E6%94%B6sai%E5%A4%9A%E9%80%9A%E9%81%93%E6%95%B0%E6%8D%AE%E5%88%B0%E5%A4%9A%E4%B8%AAbuff%E4%B8%AD%3C%2FP%3E%3CP%3EReceive%20sai%20multichannel%20data%20into%20multiple%20buffs%20using%20sdma%3C%2FP%3E%3CP%3E%E5%9C%A8%E4%BD%BF%E7%94%A8sai%E5%8F%8Asdma%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E5%A6%82%E6%9E%9C%E4%BD%BF%E7%94%A8multififo%E7%AD%89%E6%9C%BA%E5%88%B6%EF%BC%8C%E6%8E%A5%E6%94%B6%E5%88%B0%E7%9A%84%E6%95%B0%E6%8D%AE%E4%BC%9A%E5%9C%A8%E4%B8%80%E4%B8%AAbuff%E4%B8%AD%EF%BC%8C%E8%83%BD%E4%B8%8D%E8%83%BD%E4%BD%BF%E7%94%A8sdma%E7%9A%84%E5%A4%9A%E9%80%9A%E9%81%93%E5%8A%9F%E8%83%BD%EF%BC%8C%E4%BD%BF%E6%8E%A5%E6%94%B6%E5%88%B0%E7%9A%84%E6%95%B0%E6%8D%AE%E6%8C%89%E7%85%A7%E9%80%9A%E9%81%93%E5%88%86%E6%95%A3%E5%88%B0%E5%90%84%E6%89%A7%E7%9A%84buff%E4%B8%AD%EF%BC%9F%3C%2FP%3E%3CP%3EWhen%20using%20sai%20and%20sdma%20to%20receive%20data%2C%20if%20you%20use%20such%20as%20multififo%2C%20the%20received%20data%20will%20be%20in%20a%20buff%2C%20can%20you%20use%20the%20multi-channel%20function%20of%20sdma%20so%20that%20the%20received%20data%20is%20dispersed%20according%20to%20the%20channel%20in%20the%20buff%20of%20each%20execution%3F%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22_1-1715928528878.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22_1-1715928528878.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F279308i84F4FBCEC71C3D4D%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22_1-1715928528878.png%22%20alt%3D%22_1-1715928528878.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%E4%BB%A5%E4%B8%8A%E5%9B%BE%E4%B8%BA%E4%BE%8B%E5%AD%90%EF%BC%8C%E7%AC%AC%E4%B8%80%E7%BB%844%E5%AD%97%E8%8A%82%E4%B8%BA%E7%AC%AC%E4%B8%80%E4%B8%AA%E9%80%9A%E9%81%93%EF%BC%8C%E8%BF%9E%E7%BB%AD%E7%9A%84%E7%AC%AC%E4%BA%8C%E7%BB%844%E5%AD%97%E8%8A%82%E4%B8%BA%E7%AC%AC%E4%BA%8C%E4%B8%AA%E9%80%9A%E9%81%93%EF%BC%8C%E6%80%BB%E5%85%B14%E4%B8%AA%E9%80%9A%E9%81%93%EF%BC%8C%E5%AE%9E%E9%99%85%E4%BD%BF%E7%94%A8%E7%9A%84%E6%97%B6%E5%80%99%E9%9C%80%E8%A6%81%E5%AF%B9%E6%9F%90%E4%B8%80%E4%B8%AA%E9%80%9A%E9%81%93%E7%9A%84%E6%95%B0%E6%8D%AE%E8%BF%9B%E8%A1%8C%E6%8B%B7%E8%B4%9D%EF%BC%8C%E6%8B%B7%E8%B4%9D%E5%87%BA%E4%B8%80%E4%B8%AA%E5%AE%8C%E6%95%B4%E9%80%9A%E9%81%93%E7%9A%84%E6%95%B0%E6%8D%AE%3CBR%20%2F%3EThe%20above%20figure%20as%20an%20example%2C%20the%20first%20group%20of%204%20bytes%20for%20the%20first%20channel%2C%20the%20second%20consecutive%20group%20of%204%20bytes%20for%20the%20second%20channel%2C%20a%20total%20of%204%20channels%2C%20the%20actual%20use%20of%20the%20time%20you%20need%20to%20copy%20the%20data%20of%20a%20channel%2C%20copy%20out%20a%20complete%20channel%20data%3C%2FP%3E%3CP%3E%E6%88%91%E5%B0%9D%E8%AF%95%E4%BD%BF%E7%94%A8%E5%A6%82%E4%B8%8B%E4%BB%A3%E7%A0%81%EF%BC%8C%E4%BD%86%E6%98%AF%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E6%80%BB%E6%98%AF%E4%B8%8D%E8%83%BD%E8%A2%AB%E8%B0%83%E7%94%A8%3C%2FP%3E%3CP%3EI%20tried%20to%20use%20the%20following%20code%2C%20but%20the%20callback%20function%20always%20fails%20to%20be%20called%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22_0-1715927543295.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22_0-1715927543295.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F279303iE1455EC5A29B4937%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22_0-1715927543295.png%22%20alt%3D%22_0-1715927543295.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%E8%BF%99%E7%A7%8D%E6%96%B9%E6%A1%88%E6%9C%89%E6%B2%A1%E6%9C%89%E9%97%AE%E9%A2%98%EF%BC%8C%E8%83%BD%E4%B8%8D%E8%83%BD%E5%AE%9E%E7%8E%B0%EF%BC%8C%E5%A6%82%E6%9E%9C%E8%A6%81%E5%AE%9E%E7%8E%B0%E9%9C%80%E8%A6%81%E5%85%B3%E6%B3%A8%E5%93%AA%E4%BA%9B%E5%91%A2%EF%BC%9F%3C%2FP%3E%3CP%3EAre%20there%20any%20problems%20with%20this%20option%2C%20can%20it%20be%20achieved%2C%20and%20what%20needs%20to%20be%20focused%20on%20if%20it%20is%20to%20be%20achieved%3F%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1867768%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CLINGO-LABEL%3Ei.MX%208%20Family%20%7C%20i.MX%208QuadMax%20(8QM)%20%7C%208QuadPlus%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E