打印

CC2543 SPI读不出数据

[复制链接]
1664|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spi, CSR, TE, rc, se
本帖最后由 寒风晓月 于 2016-1-5 19:13 编辑

主:CC2543,从:HMC5983磁传感器,CC2543是8051核的,和CC2530、CC2430等51核的器件的SPI口使用方式是相同的。

发数据,CLK和MOSI的波形是正确的,SSN使能高低电平也是正确的,但是读数据,一个板子读到的是0xFF,其他板子读到的都是0x00。

根据网上的一些信息,说要先写一个无效命令,将从器件寄存器的值取回来,也试过,但是不可以。时钟的相位和极性也改过,但是没有返回的数据。
希望有经验的各位,能指导一下。

程序:
void spiInit(void)
{
/***************************************************************************
     * Setup I/O ports
     * Port and pins used by USART0 operating in SPI-mode are
     * MISO (MI): P1_3
     * MOSI (MO): P1_4
     * SSN (SS) : P1_1
     * SCK (C)  : P1_2
     */
    // Configure USART0 for Alternative 1 => Port P0 (PERCFG.U0CFG = 0).
    // Give priority to USART 0 over Timer 1 for port 0 pins.
    PERCFG = (PERCFG & ~PERCFG_U0CFG) | PERCFG_U0CFG_ALT2;   
    PPRI &= ~PPRI_PRI0P1;

    P1SEL = (P1SEL & ~BIT1) | BIT2 | BIT3 | BIT4;
    P1DIR |= BIT1;

    U0BAUD = 216;
    U0GCR |= 10;

    U0CSR &= ~(U0CSR_MODE | U0CSR_SLAVE);
    U0GCR |=   0x80;    //CPOL=1;
    //U0GCR &= ~ 0x80;  //CPOL=0;
    U0GCR |=   0x40;    //CPHA=1;
    //U0GCR &= ~ 0x40;  //CPHA=0;
    U0GCR |=   0x20;    //MSB
    //U0GCR &= ~ 0x20;  //LSB

}

void sendByte(int8 data)
{
  U0DBUF = data;
  while(!(U0CSR & U0CSR_TX_BYTE));
  U0CSR &= ~U0CSR_TX_BYTE;
//  data = U0DBUF;
//  data = U0DBUF;

}
int8 receiveByte(int8 dummyData)
{
    int8 data;
    U0DBUF = dummyData;
    while(!(U0CSR & U0CSR_TX_BYTE));
    U0CSR &= ~U0CSR_TX_BYTE;
    data = U0DBUF;
    return data;
}
void main(void)
{
    int8 data;
    CLKCONCMD = (CLKCONCMD & ~(CLKCON_OSC | CLKCON_CLKSPD)) | CLKCON_CLKSPD_32M;
    while (CLKCONSTA & CLKCON_OSC);   // Wait until clock source has changed

    spiInit();
    while(1)
    {
      P1_1 = 0;
      sendByte(0x81);
      data = receiveByte(0xFF);
      P1_1 =1;
      halMcuWaitMs(1);   
    }
}


HMC5983关于SPI的时序:


将0xAA数据,写到U0DBUF,并延时的波形:
上面的是时钟,下面的是MOSI




cc2543 datasheet.pdf

1.7 MB

CC2543

HMC598_datasheet.pdf

757.32 KB

HMC5983

相关帖子

沙发
dirtwillfly| | 2016-1-5 20:32 | 只看该作者
这个没有啥好办法,只能看时序,然后调程序。
你抓一个SPI通讯时的时序看看

使用特权

评论回复
板凳
寒风晓月|  楼主 | 2016-1-5 20:36 | 只看该作者
dirtwillfly 发表于 2016-1-5 20:32
这个没有啥好办法,只能看时序,然后调程序。
你抓一个SPI通讯时的时序看看 ...

:dizzy:  时钟和MOSI是正确的,MISO就一直是低电平

使用特权

评论回复
地板
dirtwillfly| | 2016-1-5 21:17 | 只看该作者
寒风晓月 发表于 2016-1-5 20:36
时钟和MOSI是正确的,MISO就一直是低电平

有两个可能:
1、硬件问题,检查硬件连接和相关电路
2、时序问题,主机发送时序有问题,从机没给你回复信息

使用特权

评论回复
5
Garen2| | 2016-1-6 21:21 | 只看该作者
用的外部晶振吗,系统时钟怎么样

使用特权

评论回复
6
寒风晓月|  楼主 | 2016-1-7 14:22 | 只看该作者
Garen2 发表于 2016-1-6 21:21
用的外部晶振吗,系统时钟怎么样

外部晶振,32MHz,SPI的波特率设置成了57600,用示波器测过,大概周期17us,是对的。HMC5983从器件最大SPI速率是8000KHz,我也换过其他波特率,也不行。

使用特权

评论回复
7
Garen2| | 2016-1-7 22:42 | 只看该作者
有数据发送过来吗,或是这边接收数据没有配置好?

使用特权

评论回复
8
火山LF| | 2016-5-31 14:41 | 只看该作者
你好,我也在学习CC2543,可以请教你一些问题吗?可以加我QQ:525163556,谢谢!

使用特权

评论回复
9
火山LF| | 2016-5-31 14:44 | 只看该作者
TI给的例程当中,那个GenericBroadcaster例程里面,有两个中断,一个是RF中断,一个是ST中断,我想请问一下,RF中断的中断条件是什么?还有一个UUID的问题,苹果手机app是通过UUID来识别芯片设备的,请问一下UUID在源码的哪个地方,我找了好像都没有,谢谢!

使用特权

评论回复
10
寒风晓月|  楼主 | 2016-6-2 14:45 | 只看该作者
dirtwillfly 发表于 2016-1-5 21:17
有两个可能:
1、硬件问题,检查硬件连接和相关电路
2、时序问题,主机发送时序有问题,从机没给你回复信 ...

HMC5983芯片没焊好,现在可以正常通信了。
以前程序调不通,就觉得这是硬件问题,后来发现多数是程序问题。
然后我努力调程序的时候,结果是硬件问题,我觉得很惆怅。

使用特权

评论回复
11
寒风晓月|  楼主 | 2016-6-2 14:46 | 只看该作者
Garen2 发表于 2016-1-6 21:21
用的外部晶振吗,系统时钟怎么样

HMC5983芯片没焊好,QFP封装,引脚都在下面,焊盘画的太小了。
现在已经可以正常通信了,谢谢亲~

使用特权

评论回复
12
寒风晓月|  楼主 | 2016-6-2 14:47 | 只看该作者
火山LF 发表于 2016-5-31 14:44
TI给的例程当中,那个GenericBroadcaster例程里面,有两个中断,一个是RF中断,一个是ST中断,我想请问一下 ...

我的CC2543的板子的天线,根本就没法通信,目前暂时放弃它了。不好意思

使用特权

评论回复
13
火山LF| | 2016-6-2 15:24 | 只看该作者
寒风晓月 发表于 2016-6-2 14:47
我的CC2543的板子的天线,根本就没法通信,目前暂时放弃它了。不好意思

那你的蓝牙可以通信吗?实现通信了吗?

使用特权

评论回复
14
dirtwillfly| | 2016-6-2 17:23 | 只看该作者
寒风晓月 发表于 2016-6-2 14:45
HMC5983芯片没焊好,现在可以正常通信了。
以前程序调不通,就觉得这是硬件问题,后来发现多数是程序问题 ...

淡定啊。根据墨菲定律,只有可能出错的地方都会出错的

使用特权

评论回复
15
51xlf| | 2016-6-3 21:09 | 只看该作者
你是用的模拟spi吗

使用特权

评论回复
16
51xlf| | 2016-6-3 21:10 | 只看该作者
看看指令的先后顺序有错吗

使用特权

评论回复
17
寒风晓月|  楼主 | 2016-6-27 15:45 | 只看该作者
火山LF 发表于 2016-6-2 15:24
那你的蓝牙可以通信吗?实现通信了吗?

不可以,用TI的那个软件测通信距离,必须两个靠在一起才有信号,不知道天线画的不对,还是怎么样。

使用特权

评论回复
18
寒风晓月|  楼主 | 2016-6-27 15:46 | 只看该作者
dirtwillfly 发表于 2016-6-2 17:23
淡定啊。根据墨菲定律,只有可能出错的地方都会出错的

嵌入式就是坑坑洼洼的,不知道哪里一脚踩下去,人就掉下去了。。

使用特权

评论回复
19
寒风晓月|  楼主 | 2016-6-27 15:47 | 只看该作者
51xlf 发表于 2016-6-3 21:10
看看指令的先后顺序有错吗

不是模拟SPI,现在已经调好了,是芯片没焊好,所以从器件始终没有回复。

使用特权

评论回复
20
dirtwillfly| | 2016-6-27 16:18 | 只看该作者
寒风晓月 发表于 2016-6-27 15:46
嵌入式就是坑坑洼洼的,不知道哪里一脚踩下去,人就掉下去了。。

正常 的,我也经常掉坑里。
尤其是使用新的开发工具,新的ic的时候

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

38

帖子

3

粉丝