查看: 4683|回复: 6

[求助] 有偿求助: 用KSDK_1.2.0的接口,使用MK66的spi dma功能失败

[复制链接]

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
34
最后登录
2017-1-23
发表于 2017-1-22 13:13:33 | 显示全部楼层 |阅读模式
本帖最后由 oucaijun 于 2017-1-22 15:38 编辑

有用飞思卡尔 ksdk1.2做过spi dma传输的吗?希望做过的联系一下我。感谢,有红包哦。一定是要真正做过的,不然很难交流

----------
需求: 使用MK66的spi dma功能

----------
BASE ENVIROMENT:
    单片机:nxp的MK66FX1M0VLQ18
    发工具: MDK5.0 + JLINK
    SDK: Freescale KSDK_1.2.0

情况:
MK66的单片机外接ads1256的AD采集芯片。
连接情况:
    MK66的单片机SPI0 |-- ads1256芯片0
                     |-- ads1256芯片1
                     |-- ads1256芯片2

    MK66的单片机SPI2 --- ads1256芯片3
-----------
   
1 现有方案:
MK66在收到READY脉冲后,该中断里面发出消息notify0,1,2,3。APP里面发现四个通道的消息都收到以后,立即读取使用KSDK_1.2.0的DSPI_DRV_MasterTransferBlocking,读取AD芯片的寄存器,完成数据采集。

ads1256芯片0 READY INT --> notify[0] --|
ads1256芯片1 READY INT --> notify[1] --|
ads1256芯片2 READY INT --> notify[2] --|
ads1256芯片3 READY INT --> notify[3] --|
                                     --> "四个通道都收到notify"事件
                                     --> APP读取AD数据                             
   
2 问题:
    100 0000多次采集之后,发现READY中断发出的消息个数notify[0]=100 0077; notify[1]=100 0079; notify[2]=100 0082; notify[3]= 1000085;
    APP里面"四个通道都收到notify"这样的事件个数为 1000042
    漏采率: 4 / 10000

3 我认为问题的原因:
    APP读取AD数据时,是读AD的寄存器。这是外接AD芯片,因此读取速度受spi时钟的限制。可能在APP处理"四个通道都收到notify"事件过程中,漏掉新的notify事件,期望通过减少APP读取AD数据的时间,减少漏采率。
   
4 我认为的提升空间:
    MK66开启SPI DMA模式,当每个AD芯片数据来之后,自动传输到内存buffer0,1,2,3。
期望通过这样,APP读取AD数据不再是读AD的寄存器【这是外接AD芯片,因此读取速度受spi时钟的限制】,处理"四个通道都收到notify"事件的速度提升之后,减少漏报率。

5 我的尝试和结果:
    先试一路AD的SPI+DMA,使用Freescale KSDK_1.2.0 DMA的API接口。
        ad_chip_init();//和原方案不变,检查确保读写ad芯片无误
        //重新初始化dma+spi:
        // Init eDMA modules.
        edmaUserConfig.chnArbitration = kEDMAChnArbitrationRoundrobin;
        edmaUserConfig.notHaltOnError = false;
        EDMA_DRV_Init(&edmaState, &edmaUserConfig);   
        
        uint8_t destAddr[BUFFER_SIZE];
        srcSG.address  = (uint32_t)(SPI2_POPR); //TO BE REVIEW
        destSG.address = (uint32_t)destAddr;
        srcSG.length   = BUFFER_SIZE=3;
        destSG.length  = BUFFER_SIZE=3;
        EDMA_DRV_RequestChannel(dma_channel=0, kDmaRequsetMux0SPI2Rx, &chnState); //TO BE REVIEW
        
        EDMA_DRV_ConfigScatterGatherTransfer(&chnState, stcd, kEDMAPeripheralToMemory, //TO BE REVIEW
                                            EDMA_TRANSFER_SIZE=1, EDMA_WARTERMARK_LEVEL=3,
                                            &srcSG, &destSG,
                                            EDMA_CHAIN_LENGTH=1);
                                            
        EDMA_DRV_InstallCallback(&chnState, EDMA_Callback, NULL);
        
        EDMA_DRV_StartChannel(&chnState);
        
    EDMACallback{
        post_notify_event();
    }
   
    APP {
        ret = wait_notify_event();
        if(ret==OK) save_ad_data();
    }
   
    结果:
    IN APP {
        ret = wait_notify_event(); // ret = TIMEOUT;  --> then HARDFAULT
    }
   


我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

723

主题

6382

帖子

0

超级版主

Rank: 8Rank: 8

积分
25444
最后登录
2025-9-4
发表于 2017-1-22 14:00:44 | 显示全部楼层
你的问题目前就是实现SPI+DMA,那你在调试过程中,有发现的具体的问题呢,是发送的错误数据吗,还是数据压根就没有被DMA传输呢?
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

8

帖子

0

新手上路

Rank: 1

积分
34
最后登录
2017-1-23
 楼主| 发表于 2017-1-22 14:42:18 | 显示全部楼层
小恩GG 发表于 2017-1-22 14:00
你的问题目前就是实现SPI+DMA,那你在调试过程中,有发现的具体的问题呢,是发送的错误数据吗,还是数据压 ...

首先我使用API的步骤和方法是否存在问题呢?
回复 支持 反对

使用道具 举报

  • TA的每日心情

    2017-1-4 08:05
  • 签到天数: 11 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    85

    主题

    1629

    帖子

    1

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2569

    优秀版主

    最后登录
    2019-3-28
    发表于 2017-1-22 16:24:51 | 显示全部楼层
    oucaijun 发表于 2017-1-22 14:42
    首先我使用API的步骤和方法是否存在问题呢?

    应该有个Demo,API用法对不对看Demo
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    723

    主题

    6382

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25444
    最后登录
    2025-9-4
    发表于 2017-1-23 09:18:09 | 显示全部楼层
    oucaijun 发表于 2017-1-22 14:42
    首先我使用API的步骤和方法是否存在问题呢?

    正像技术范儿讲的,请看DMA demo,有一点我想提醒一下楼主,我不是很建议你还在使用KSDK1.2 ,这个版本太累了,而且也比较繁杂,使用起来不方便的,建议还是转到KSDK2.x版本上吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    8

    帖子

    0

    新手上路

    Rank: 1

    积分
    34
    最后登录
    2017-1-23
     楼主| 发表于 2017-1-23 20:54:25 | 显示全部楼层
    小恩GG 发表于 2017-1-23 09:18
    正像技术范儿讲的,请看DMA demo,有一点我想提醒一下楼主,我不是很建议你还在使用KSDK1.2 ,这个版本太 ...

    谢谢,我会认真考虑你们的建议的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-1-9 21:21
  • 签到天数: 56 天

    连续签到: 1 天

    [LV.5]常住居民I

    52

    主题

    677

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    1470
    最后登录
    2021-1-9
    发表于 2017-2-5 01:13:45 | 显示全部楼层
    还是去下载2.1版本的SDK吧
    1.2、1.3的SDK我用过,问题很多
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-6 10:03 , Processed in 0.105526 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表