123LJY 发表于 2015-1-7 17:41

最近在做ad7280a的锂电管理,spi不通

我是根据从机时序图模拟的,现在一直通不上,示波器的测得波形很乱

weizhongc 发表于 2015-1-8 13:46

本帖最后由 weizhongc 于 2015-1-8 13:48 编辑

把程序贴出来

123LJY 发表于 2015-1-8 18:00

unsigned long spi(unsigned long Data_send)
{
        unsigned char i;
unsigned long Data_receive,j;
        j=Data_send;
        Data_receive=0;
SCLK=0;MOSI=0;CS=0;//MOSI对应单片机的输出 7280a输入 ,MISO相反
for(i=0;i<32;i++)
{
   if (MISO)
           {
                   Data_receive=Data_receive|0x00000001;
           }   
       _nop_();
           Data_receive=Data_receive<<1;
           SCLK=1;
           _nop_();
           if (j&0x80000000)
           {MOSI=1;}
       else
                       MOSI=0;
        _nop_();       
          j=j<<1;
          SCLK=0;
   }
   CS=1;
   delay1us(3);//
   return Data_receive;
}
这个收到的数据很乱的,不知道这个时序写的是不是有问题

123LJY 发表于 2015-1-8 18:03

weizhongc 发表于 2015-1-8 13:46
把程序贴出来unsigned long spi(unsigned long Data_send)
{
        unsigned char i;
unsigned long Data_receive,j;
        j=Data_send;
        Data_receive=0;
SCLK=0;MOSI=0;CS=0;
for(i=0;i<32;i++)
{
   if (MISO)
           {
                   Data_receive=Data_receive|0x00000001;
           }   
       _nop_();
           Data_receive=Data_receive<<1;
           SCLK=1;
           _nop_();
           if (j&0x80000000)
           {MOSI=1;}
       else
                       MOSI=0;
        _nop_();       
          j=j<<1;
          SCLK=0;
   }
   CS=1;
   delay1us(3);//
   return Data_receive;
}
这个程序的时序是不是有问题啊



weizhongc 发表于 2015-1-9 09:28

123LJY 发表于 2015-1-8 18:03
unsigned long spi(unsigned long Data_send)
{
      unsigned char i;
unsigned long Data_receive,j;
      j=Data_send;
      Data_receive=0;
SCLK=0;MOSI=0;CS=0;
for(i=0;i你按着时序图重新写吧,下降沿发送,接收数据。这点你程序就有问题了。

unsigned long spi(unsigned long Data_send)
{
      unsigned char i;
unsigned long Data_receive,j;
j=Data_send;
Data_receive=0;
SCLK=0;
MOSI=0;
CS=0;//MOSI对应单片机的输出 7280a输入 ,MISO相反
for(i=0;i<32;i++)
{

         
         Data_receive=Data_receive<<1;
         SCLK=1;
         _nop_();

          _nop_();         
          j=j<<1;
          SCLK=0;
          _nop_();
          if (j&0x80000000)
               MOSI=1;
         else
               MOSI=0;
          if (MISO)
            Data_receive=Data_receive|0x00000001;
         
   }
   CS=1;
   delay1us(3);//
   return Data_receive;
}

123LJY 发表于 2015-1-9 10:09

weizhongc 发表于 2015-1-9 09:28
你按着时序图重新写吧,下降沿发送,接收数据。这点你程序就有问题了。

unsigned long spi(unsigned long Data_send)
{
      unsigned char i;
unsigned long Data_receive,j;
j=Data_send;
Data_receive=0;
SCLK=0;
MOSI=0;
CS=0;//MOSI对应单片机的输出 7280a输入 ,MISO相反
for(i=0;i
按照这个时序发的,spi(0x01C2B6E2)拆分后意思 向器件地址0控制寄存器地址0x0E
写入数据0x15寻址所有器件 1;                                                                                                                                        spi(0x038716CA)拆分后意思 向器件地址0读取寄存器地址0x1C
写入控制寄存器地址0x0E寻址所有器件 1;

看返回的数据 是不是0x01C2B6E2,结果0x17400086 ,这是哪的问题

zadzad163 发表于 2015-2-1 13:43

<div class='shownolgin' data-isdigest='no'>楼主不知道还在不在~~我也在研究BMS 能否交流下?</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

123LJY 发表于 2015-2-2 15:48

<div class='shownolgin' data-isdigest='no'>可以啊,184156387</div><script>showreplylogin();</script>

yukaijiang 发表于 2015-8-6 15:47

<div class='shownolgin' data-isdigest='no'>用模拟SPI程序。</div><script>showreplylogin();</script>

gaorz_ 发表于 2015-12-2 15:54

<div class='shownolgin' data-isdigest='no'>楼主,跟你遇到了一样的问题,你的程序改好了吗?</div><script>showreplylogin();</script>

gaorz_ 发表于 2015-12-2 15:56

<div class='shownolgin' data-isdigest='no'>楼主,跟你在做一样的东西,spi的时序一直写不好,不知道你的调通了吗?</div><script>showreplylogin();</script>

nmg 发表于 2015-12-3 10:54

<div class='shownolgin' data-isdigest='no'>zadzad163 发表于 2015-2-1 13:43
楼主不知道还在不在~~我也在研究BMS 能否交流下?

可以啊,184156387

帮楼主转接</div><script>showreplylogin();</script>

gyg12321 发表于 2015-12-8 15:47

<div class='shownolgin' data-isdigest='no'>弄出来了吗</div><script>showreplylogin();</script>

daishibai 发表于 2017-5-19 16:14

<div class='shownolgin' data-isdigest='no'>楼主,你的问题解决了没</div><script>showreplylogin();</script>

忘归尘 发表于 2017-11-3 20:44

<div class='shownolgin' data-isdigest='no'>一般模拟SPI主要是时序问题,对照时序图,把每步高低电平的需要延时按照时序图加上,应该没什么问题。可以给MISO上加上上拉试试。在不行就加上逻辑分析仪,看时序吧</div><script>showreplylogin();</script>

hustwangxin 发表于 2017-11-15 16:18

<div class='shownolgin' data-isdigest='no'>建议楼主把自己的SPI的波形贴出来。 这样对比很容易发现问题。 </div><script>showreplylogin();</script>
页: [1]
查看完整版本: 最近在做ad7280a的锂电管理,spi不通