[51单片机] ATT7022和51的spi通信,只能写进数据,读不到数据

[复制链接]
 楼主| 玩玩的问题 发表于 2017-12-10 16:10 | 显示全部楼层 |阅读模式
我想用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. }
ningling_21 发表于 2017-12-10 17:24 | 显示全部楼层
可以用示波器看看波形是否和手册有差别
 楼主| 玩玩的问题 发表于 2017-12-10 18:10 | 显示全部楼层
ningling_21 发表于 2017-12-10 17:24
可以用示波器看看波形是否和手册有差别

mosi波形正确,miso没有波形,我测试了att7022引脚 也是正常工作的
ningling_21 发表于 2017-12-10 18:46 | 显示全部楼层
本帖最后由 ningling_21 于 2017-12-10 18:48 编辑
玩玩的问题 发表于 2017-12-10 18:10
mosi波形正确,miso没有波形,我测试了att7022引脚 也是正常工作的


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

内部ID的地址是多少?我在数据手册上没找到
yk910127 发表于 2017-12-12 09:06 | 显示全部楼层
玩玩的问题 发表于 2017-12-11 18:02
内部ID的地址是多少?我在数据手册上没找到

地址为0,你有没有电平转换,51是5V的 芯片是3.3V的
 楼主| 玩玩的问题 发表于 2017-12-12 16:07 来自手机 | 显示全部楼层
本帖最后由 玩玩的问题 于 2017-12-12 16:11 编辑
yk910127 发表于 2017-12-12 09:06
地址为0,你有没有电平转换,51是5V的 芯片是3.3V的


我等下试试看。我搜了一下 att7022cu是5v
zqx1000 发表于 2018-4-10 23:36 | 显示全部楼层
kankan
李鹏辉 发表于 2020-1-21 10:10 | 显示全部楼层
我同样遇到了此问题ATT7022eu ,没有MISO么有波形,芯片各引脚也正常工作
airwill 发表于 2020-1-21 12:04 | 显示全部楼层
可能芯片还毫无反应的阶段,  别忽视了硬件的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部