最近在做ad7280a的锂电管理,spi不通
我是根据从机时序图模拟的,现在一直通不上,示波器的测得波形很乱 本帖最后由 weizhongc 于 2015-1-8 13:48 编辑把程序贴出来 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;
}
这个收到的数据很乱的,不知道这个时序写的是不是有问题
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;
}
这个程序的时序是不是有问题啊
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;
}
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 ,这是哪的问题
<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> <div class='shownolgin' data-isdigest='no'>可以啊,184156387</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>用模拟SPI程序。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>楼主,跟你遇到了一样的问题,你的程序改好了吗?</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>楼主,跟你在做一样的东西,spi的时序一直写不好,不知道你的调通了吗?</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>zadzad163 发表于 2015-2-1 13:43
楼主不知道还在不在~~我也在研究BMS 能否交流下?
可以啊,184156387
帮楼主转接</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>弄出来了吗</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>楼主,你的问题解决了没</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>一般模拟SPI主要是时序问题,对照时序图,把每步高低电平的需要延时按照时序图加上,应该没什么问题。可以给MISO上加上上拉试试。在不行就加上逻辑分析仪,看时序吧</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>建议楼主把自己的SPI的波形贴出来。 这样对比很容易发现问题。 </div><script>showreplylogin();</script>
页:
[1]