模拟SPI对LMH6401(PGA)写入数据后没有返回

2019-07-14 13:13发布

这是写入,发送,和读状态函数
/************向LMH6401 中写入一个字节*************************1*/         

void W_LMH6401_byte(unsigned char date)
{
        unsigned char temp;
        unsigned char i;
        temp = date;  

        for (i = 0; i < 8; i++) {
                SCK_0 ;
                if((temp&0x80)==0x80)
                        { MOSI_1; }
                else { MOSI_0; }
                SCK_1 ;
                temp <<= 1;
        }
          MOSI_0;               
}

/********************读取LMH6401 一个字节***********************2*/  

unsigned char R_LMH6401_byte(void)
{
        unsigned char temp=0;
        unsigned char i,SDI;

        for(i = 0; i < 8; i++) {
                temp <<= 1;
                SCK_0 ;        

                SDI = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6);
                if(SDI) {temp++;         }
//                else         {printf(" output low data ");}
                SCK_1 ;

        }
        return(temp);
}

/*******************读取LMH6401 状态**************************3*/  

unsigned char LMH6401_status(u8 addr)
{
         unsigned char status;
         DF_CS_0;  //片选打开
         delayus(10);

         W_LMH6401_byte(addr); //D7H是读取状态的命令字

         status = R_LMH6401_byte(); //读取状态字节

         DF_CS_1; //片选关闭
         delay(500);

         return status;

}


下面是读写的操作时序图

下面是寄存器

发送00,应该返回03,但是毫无反应无返回,发送其他指令也是

还有一个问题就是,如何发送7位地址,请各位帮忙解答一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
yjfkpyu
2019-07-14 16:30
zhouxk 发表于 2019-4-18 12:10
你理解有误,地址和数据在同一串码中。
当片选有效后,发送的前8个位就是地址,接着往后的8个位是第一个数据,再8位是地址加1后的第二个数据,依此类推……,直到片选撤销。
写数据的同时,也在读数据,只是写走的是MOSI(SDI)、读走的是MISO(SDO)线。也就是说,给某个地址写入数是A,读时读出来的是B,相当于把数据更新 ...

四通道的,数据发送正确,可同时看CS,DIO,DO,CLK四路信号。三路正常,但是没返回。元件测试过没问题,默认增益2dB,尝试直接写数据,但是增益不变.发的是地址0x02,数据是0x14,查表知应该增益为14C:UsersyangzDesktopQQ截图20170617091144.png

一周热门 更多>