ATT7022和51的spi通信,只能写进数据,读不到数据

2020-03-07 17:54发布

我想用att7022和51读取电流电压有效值。现在spi能写进去数据和命令,但就是读不到数据 是我spiread函数有问题还是?纠结了一天了 代码如下。示波器测试spiwrite函数正常
  1. SPIRead(unsigned char Cmd)
  2. {
  3.         unsigned char ucI,ucK,datatemp;
  4.         unsigned char SPIData[3];
  5.        
  6.         SPI_SCS_1 ;
  7.           Delay_US(5);                                    
  8.         SPI_SCS_0 ;
  9.         Delay_US(10);   
  10.         SPI_SCK_0 ;
  11.         for(ucI=0;ucI<8;ucI++)  //发送读数据命令,下降沿接收数据,高位在前,低位在后
  12.         {

  13.                 if( Cmd & 0x80 )
  14.                         SPI_MOSI_1;
  15.                 else
  16.                         SPI_MOSI_0;
  17.                 Cmd<<=1;
  18.                 SPI_SCK_1 ;
  19.                 Delay_US(10);
  20.                 SPI_SCK_0 ;
  21.                 Delay_US(10);
  22.         }
  23.         SPI_MOSI_0;
  24.         Delay_US(20);
  25.         for(ucK=0;ucK<3;ucK++)    //==开始接收数据 24bit Data===
  26.         {       
  27.                 SPIData[ucK]=0;
  28.                 for(ucI=0;ucI<8;ucI++)
  29.                 {       
  30.                         SPIData[ucK]<<=1;
  31.                         SPI_SCK_1 ;
  32.                         Delay_US(10);
  33.                         if(SPI_MISO)
  34.                                 SPIData[ucK]=SPIData[ucK]|0X80 ;
  35.                         SPI_SCK_0 ;
  36.                         Delay_US(10);
  37.                        
  38.                        
  39.                 }
  40.         }
  41.         Delay_US(10);
  42.         SPI_SCS_1 ;
  43.         datatemp=ArrayTogether(SPIData,3);
  44.         return datatemp;
  45. }
复制代码

  1. long ArrayTogether(unsigned char *temp,unsigned char len)
  2. {
  3.         long retData;
  4.         unsigned char i;

  5.         retData=0;
  6.         for(i=0;i<len;i++)
  7.         {
  8.                 retData=retData<<8;
  9.                 retData=retData+(unsigned long)temp[i];
  10.         }
  11.         return retData;
  12. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
ningling_21
1楼-- · 2020-03-07 22:23
可以用示波器看看波形是否和手册有差别
玩玩的问题
2楼-- · 2020-03-08 00:32
 精彩回答 2  元偷偷看……
ningling_21
3楼-- · 2020-03-08 03:25
本帖最后由 ningling_21 于 2017-12-10 18:48 编辑
玩玩的问题 发表于 2017-12-10 18:10
mosi波形正确,miso没有波形,我测试了att7022引脚 也是正常工作的


测量芯片的晶振和各电压是否正常,芯片是否损坏等
注意:有的7022芯片只支持3.3V电源,51一般是5V电源
handlike
4楼-- · 2020-03-08 07:11
先读出内部ID值(r_DeviceID=0x7122A0)读出来,再做写入操作吧。
玩玩的问题
5楼-- · 2020-03-08 08:36
handlike 发表于 2017-12-11 14:58
先读出内部ID值(r_DeviceID=0x7122A0)读出来,再做写入操作吧。

内部ID的地址是多少?我在数据手册上没找到
yk910127
6楼-- · 2020-03-08 12:12
玩玩的问题 发表于 2017-12-11 18:02
内部ID的地址是多少?我在数据手册上没找到

地址为0,你有没有电平转换,51是5V的 芯片是3.3V的