请选择 进入手机版 | 继续访问电脑版
搜索
热搜: XMC1000 XMC4000
查看: 476|回复: 10

新人疑惑 关于使用dave3实现spi通讯的疑问

[复制链接]

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2018-4-16 17:26:01 | 显示全部楼层 |阅读模式
新人小白,第一次编程,第一次使用dave3,想通过spi实现xmc4400和两个传感器之间的读写操作,翻了好几遍的协议没怎么看懂,能不能请各位大佬指点一二,感激不尽!

贴一下自个码的渣渣代码:
       typedef enum SPI001_ModeType
        {SPI001_STANDARD_FULLDUPLEX}SPI001_ModeType;
        typedef enum SPI001_HBModeType
        {SPI001_MSB}SPI001_HBModeType;
        typedef enum SPI001_TransmitMode
        { SPI001_STANDARD = 0}SPI001_TransmitMode;
        typedef enum SPI001_CSLineType
        {CE_A}SPI001_CSLineType;
         SPI001_ConfigType SPIConfig;
        SPIConfig.CESelected =  CE_A;
       SPIConfig.ClkPol = SPI001_CLK_POL1;
       SPIConfig.ClkPh = SPI001_CLK_PHASE1;
       SPIConfig.LeadTrailDelay = SPI001_ONE_SCLK_PERIOD;
       SPIConfig.NextFrameDelay = SPI001_ONE_SCLK_PERIOD;
       SPI001_Configure(&SPI001_Handle0,&SPIConfig);

        uint8_t pBuffer;
        uint8_t WriteAddr;
        pBuffer=0x27;//‭00100111‬
        WriteAddr=0x20;//‭00100000‬
        uint16_t SendData1 = WriteAddr;
        SendData1 = (SendData1<<8);//
        SendData1=SendData1|pBuffer;
        SPI001_WriteData(&SPI001_Handle0,&SendData1,SPI001_STANDARD);

        uint8_t        ReadAddr=0x0F;//00001111
        ReadAddr = ReadAddr|(uint8_t)READWRITE_CMD;//
        uint16_t ReadData = ReadAddr;//
        ReadData = ReadData<<8; //
        SPI001_WriteData(&SPI001_Handle0,&ReadData,SPI001_STANDARD);
        while((SPI001_GetFlagStatus(&SPI001_Handle0,SPI001_FIFO_STD_RECV_BUF_FLAG))!=SPI001_SET)
                {}
        SPI001_ClearFlag(&SPI001_Handle0,SPI001_FIFO_STD_RECV_BUF_FLAG);
        SPI001_ReadData(&SPI001_Handle0,&ReadData);//读出来的数据在低八位??疑惑脸



有几个疑问:
1、使用 dave3,第一段的一些spi设置在ui里没找到,就写在函数里了,不知道对不对
2、第二段和第三段分别是写、读操作,请问是这样操作么?运行起来就卡在while循环里了,代码力太弱具体原因也没看懂(哭)
3、关于spi的ui中的一些设置也不是很懂,请问有哪几个设置是必须要做的?哪些设置是必须参考传感器参数来设置的?哦对了,两个传感器分别是LIS331DLH和L3GD20TR,分别是加速度和陀螺仪。
希望大佬指点迷津!!!
回复

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-4-16 18:06:59 来自手机 | 显示全部楼层
哇,盼大佬指点这个!
回复 支持 反对

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-4-16 19:47:02 来自手机 | 显示全部楼层
哪位大佬看到了抽几分钟瞟一眼,解决一下困扰我多时的问题⊙∀⊙!
回复 支持 反对

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-4-17 23:41:17 | 显示全部楼层
或者说这个问题实在是太简单了大佬们都在笑话我咯,但是小白确实不懂乌拉。。。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-4-19 15:48:26 | 显示全部楼层
拿示波器测了一波,感觉是片选cs引脚的问题,选一个的话两个引脚都出现低电平波形,而且波形只持续了一个相当短的时间就结束了。应该是我片选函数没有用对的原因么?
回复 支持 反对

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-4-24 15:19:43 | 显示全部楼层
哇,这几天收到返回值了!但是!返回值的结果都不正确,通过示波器观察了一下, 片选、时钟和输入都应该是正确的,返回的值和读到的值一样但就是和应该返回的值不一样~~~我觉得应该是写入函数有问题,但是又不知道问题出在什么地方。。。。。。
回复 支持 反对

使用道具 举报

0

主题

69

帖子

237

积分

中级会员

Rank: 3Rank: 3

积分
237
发表于 2018-4-25 11:54:00 | 显示全部楼层
如果使用的是Dave3的库APP写的代码,可以先看看Dave的帮助文档对APP是怎么配置的,一般spi需要严格遵循芯片的协议要求,比如上升沿读取数据还是下降沿读取,前后时钟的跳变沿和片选之间间隔的时间,spi片选的有效电平等。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-5-1 00:13:59 | 显示全部楼层
hi嗨hi 发表于 2018-4-25 11:54
如果使用的是Dave3的库APP写的代码,可以先看看Dave的帮助文档对APP是怎么配置的,一般spi需要严格遵循芯片 ...

感谢回复,一直没大佬支持我以为没得人理我了。。。
帮助文档和手册我都看过了,我理解范围内的参数都进行了设置,比如您说的时钟的相位和极性,跳变沿片选间隔也符合手册要求~就很绝望,现在无论怎么读写,出来的都是11100000这个数,不同的是每次截取位不同,如有11000001/10000011/00000111/00001110/00011100/00111000/01110000/这几种组合。。。绝望脸~~~
回复 支持 反对

使用道具 举报

6

主题

52

帖子

589

积分

高级会员

Rank: 4

积分
589
发表于 2018-5-1 16:41:58 | 显示全部楼层
本帖最后由 xxx健 于 2018-5-1 16:46 编辑

用Dave4吧。。官方例子也是用Dave4生成的。
资料、程序都在这里:www.infineon.com/dave
3、4年,官方的例子是用dave3的,现在都没下载了。不过APP算是很容易上手的。


看起来是SPI双方的配置对应不上。7楼说的话有理。SPI主和SPI从要配置成相同的时序关系。
回复 支持 反对

使用道具 举报

1

主题

10

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2018-5-7 12:28:59 | 显示全部楼层
经过一段时间的瞎折腾,应该是解决了,回顾一下一方面的原因是spi的一部分设置并没有跟传感器的要求相匹配,而另一方面,是,硬件,问题。。。。。。换个板子就不存在问题了。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|英飞凌技术社区

GMT+8, 2018-7-22 14:31 , Processed in 0.159643 second(s), 13 queries , APC On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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