OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3174|回复: 2

关于ADA4961射频芯片的spi配置问题

[复制链接]

3

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-5-11
在线时间
6 小时
发表于 2016-5-11 14:58:48 | 显示全部楼层 |阅读模式
5金钱
调试了好几天就是不通  读回的数据一直是0xff,求教论坛大神  我的程序有什么问题  后面附上时序图  并且这个芯片好坑的说  相关spi时序的东西说的特别少 尤其是读数据
采用的是三线spi  一根片选cs  一根sck  一根sdio(双向传递,可以写入或读取数据 读取时需要将读写位置高 也不知道写入的是几位的 手册上没说)   我用的是io口 软件模拟的
sdio 的两个模式初始化
void sdio_in(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       
        GPIO_Init(GPIOA,&GPIO_InitStructure);                               

void sdio_out(void)
{
GPIO_InitTypeDef        GPIO_InitStructure;               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
        GPIO_Init(GPIOA,&GPIO_InitStructure);                               
}

写一个字节函数
void writebyte(u8 byte)
        {
          u8 i=0;
                sdio_out();
               
                CS_H
    CS_L      
          SCK_H      //pa5=1  sck=1
                for(i=0;i<8;i++)
                {
                        SCK_L      //pa5=1  sck=1
                        if((byte >>(7 - i))&0x01)
                                SDIO_H
                        else
                                SDIO_L
                        SCK_H        //pa5=1 sck=1
                       
                }
     CS_H   //pa4=1        &#198;&#172;&#209;&#161;&#214;&#195;&#184;&#223;
                 SCK_H   
}


读一个字节
u8 readbyte(void)
{
                u8 dat =0,i;
          u8 dot=0xf0;
                sdio_out();
               
                CS_H
    CS_L      
    SCK_H      //pa5=1  sck=1
        for(i=0;i<8;i++)
                {
                        SCK_L      //pa5=1  sck=1
                        if((dot >>(7 - i))&0x01)
                                SDIO_H
                        else
                                SDIO_L
                       
                        SCK_H        //pa5=1 sck=1
               
                }
       
        //                 SDIO_H

                sdio_in();
                SCK_H
                for(i=0;i<8;i++)
                {
                       
                        SCK_L
                       
                        dat |= (SDIO_DATA<<(7-i));   //此处sdio_data 为GPIO_ReadInputDataBit
                  SCK_H
                }
                CS_H
                return dat;
}

主函数部分为写入一个数  再去读这个数
此处为时序图

时序图

时序图
2345截图20160511144649.png

最佳答案

查看完整内容[请看2#楼]

用示波器观察三个信号波形。 先保证波形正确,再说其他。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11545
金钱
11545
注册时间
2014-4-1
在线时间
1315 小时
发表于 2016-5-11 14:58:49 | 显示全部楼层

用示波器观察三个信号波形。
先保证波形正确,再说其他。


回复

使用道具 举报

3

主题

5

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2016-5-11
在线时间
6 小时
 楼主| 发表于 2016-5-15 16:21:43 | 显示全部楼层
xuande 发表于 2016-5-11 15:46
用示波器观察三个信号波形。
先保证波形正确,再说其他。

OK thankyou  观察波形后 写操作已调通
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 20:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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