找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机模拟SPI读数据,读到的电平一直为0

查看数: 1688 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2023-3-17 22:08

正文摘要:

单片机用的是dspic33fj256mc710a,eeprom用的是at25128,spi通信; 在在线调试的时候正常,可以正常读取,正常写入; 但是下载程序到板子里面运行就不行,从eeprom里面读的数据都是0x00,通过逻辑分析仪抓波形发现 ...

回复

ID:491796 发表于 2023-3-19 19:57
Y_G_G 发表于 2023-3-18 21:54
25系列的EEPROM的基本操作几乎是完全一样的
CS的时序很重要的
这是一个写入函数,你参考一下

应该不是逻辑的问题,我试了下,在“下载程序”后,这个引脚读高电平根本读不出来。在仿真的时候可以读出高电平。
ID:401564 发表于 2023-3-18 21:54
25系列的EEPROM的基本操作几乎是完全一样的
CS的时序很重要的
这是一个写入函数,你参考一下
void Write_Data_25AA(u8 WriteByte,u8 Addr)//向指定地点写入一个字节的数据
{
        u8 i;       
       
        CS_SPI_LOW;                                                                                                                                                //CS=0
        SPI_Write_Byte(WREN);                                                                                                        //写入"写使能命令"
        CS_SPI_HI;                                                                                                                                                //CS=1       
        delay_us(10);                                                                                                                                        //延时
       
        CS_SPI_LOW;                                                                                                                                                //CS=0
        SPI_Write_Byte(WRITE);                                                                                                //写入"写命令"
        SPI_Write_Byte(Addr);                                                                                                        //SPI写入地址
        SPI_Write_Byte(WriteByte);                                                                                //写入数据
        CS_SPI_HI;                                                                                                                                                //CS=1,写入之后要把CS拉高,才能完成写入
        delay_us(10);                                                                                                                                        //延时
       
        do
        {               
                CS_SPI_LOW;                                                                                                                                        //CS=0
                SPI_Write_Byte(RDSR);                                                                                                //写入读取STATUS状态位命令
                i=SPI_Read_Byte();                                                                                                        //读取STATUS状态位中的:写使能位=WEL,此位为1时,可以写入
                CS_SPI_HI;                                                                                                                                        //CS=1
        }                                                                                                                                                                                        //读取STATUS状态位中的:写进行位=WIP,此位为1时,正在写入
        while(i&0x01);                                                                                                                        //等待写进行位变成0*/               
}

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

Powered by 单片机教程网

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