找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1443|回复: 4
收起左侧

关于ATT7053BU的问题,发送二十多次地址,才回复一次数据?

[复制链接]
ID:615304 发表于 2019-9-23 19:45 | 显示全部楼层 |阅读模式
请问有哪位大神,用过ATT7053BU这个芯片,我使用SPI三线,即CS下拉到地,一直是发送二十多次地址,才回复我一次数据,请问这是什么原因。用示波器看了波形,也都对。急急急
回复

使用道具 举报

ID:278179 发表于 2019-9-23 22:07 | 显示全部楼层
回复

使用道具 举报

ID:615304 发表于 2019-9-23 23:11 来自手机 | 显示全部楼层
huwqly 发表于 2019-9-23 22:07
参考一下这个:https://blog.csdn.net/lyx123/article/details/48972819

你好,我其实就是参考这个的,不知道是不是时序的问题
回复

使用道具 举报

ID:615304 发表于 2019-9-24 09:25 | 显示全部楼层
这是我的代码,请大神指教
u32 ATT7053BU_SPI_Read(unsigned char com)        //读取ATT7053BU的有效值
{
        int i;
        u32 read_data;
        read_data = 0;
        ATT7053BU_CLK = 0; //确保CLK初始状态是0
        delay_us(1);
        ATT7053BU_CLK = 1;        //启动数据传输  
        delay_us(1);
        ATT7053BU_DI = 0;//0表示主机向从机读数据
        delay_us(1);
        ATT7053BU_CLK = 0;//从机需要在下降沿取数据
        delay_us(1);
        /*提取数据*/
        for(i=7; i>=0; i--)
        {
                ATT7053BU_CLK = 1;
                delay_us(1);
                if((com & (0x01<<i))>>i)//(com & 0x01)
                {       
                        ATT7053BU_DI = 1;
                        delay_us(1);
                }
                else
                {       
                        ATT7053BU_DI = 0;
                        delay_us(1);
                }
                delay_us(1);
                ATT7053BU_CLK = 0;//从机需要在下降沿取数据
                delay_us(1);                       
        }
        delay_us(2);
        ATT7053BU_CLK = 1;
        delay_us(1);
        ATT7053BU_CLK = 0;
        if(ATT7053BU_DO != 0)       
                read_data = read_data | 1;
        delay_us(2);  //从机接收到命令后,开始送出数据,上升沿送数据

        for(i=0; i<23; i++)
        {
                ATT7053BU_CLK = 1;
                delay_us(10);
                ATT7053BU_CLK = 0;
                delay_us(10);
                read_data = read_data<<1;
                if(ATT7053BU_DO != 0)
                        read_data++;
                delay_us(1);
//                delay_us(1);                                                       
        }
        ATT7053BU_CLK = 1;
        delay_us(1);
        return         read_data;
}

void ATT7053BU_SPI_Write(u8 com,u32 write_data)
{
        char i;
        unsigned int temp_data;
        temp_data = 1;       
        ATT7053BU_CLK = 0;  //确保CLK初始状态是0
        delay_us(20);
        ATT7053BU_CLK = 1;//启动数据传输
        delay_us(10);
        ATT7053BU_DI = 1;//1表示主机向从机写数据
        delay_us(10);
        ATT7053BU_CLK = 0;//从机需要在下降沿取数据
        delay_us(10);
        for(i=6; i>=0; i--)
        {
                ATT7053BU_CLK = 1;        //启动数据传输
                delay_us(10);
                if((com & (0x01<<i))>>i)
                {
                        ATT7053BU_DI = 1;
//                        delay_us(1);
                }                       
                else
                {
                        ATT7053BU_DI = 0;
//                        delay_us(1);
                }
                delay_us(10);
                ATT7053BU_CLK = 0;
                delay_us(10);
        }
        /*从机接收到命令后,开始送出数据,上升沿送数据*/
        delay_us(40);
        for(i=23; i>=0; i--)
        {
                ATT7053BU_CLK = 1; //启动数据传输
                delay_us(10);
                if(( write_data& (temp_data <<i) )>>i)
                {
                        ATT7053BU_DI = 1;
                        delay_us(1);
                }
                else
                {
                        ATT7053BU_DI = 0;
                        delay_us(1);
                }
                delay_us(10);
                ATT7053BU_CLK = 0;
                delay_us(10);       
        }
               
}
回复

使用道具 举报

ID:787763 发表于 2021-5-18 17:13 | 显示全部楼层
您好,请问问题解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表