找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 576|回复: 2
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
单片机用的是dspic33fj256mc710a,eeprom用的是at25128,spi通信;
在在线调试的时候正常,可以正常读取,正常写入;
但是下载程序到板子里面运行就不行,从eeprom里面读的数据都是0x00,通过逻辑分析仪抓波形发现eeprom已经发出了正确的回复,但是读取的时候全部是0x00;
也就是说,虽然eeprom发出了正确的信息,但是我的soft SPI读取函数里面读到的都是0,经过数据发现进入(SI == 1)的条件下语句0次,进入else的语句8次,所以在代码里面读取电平不是为高电平的(我用逻辑分析测了PIC单片机引脚端的电平,确实是有变化的正确电平)

正常结果.png (18.6 KB, 下载次数: 21)

正常结果.png

下载程序EEPROM有正确输出.png (68.56 KB, 下载次数: 20)

下载程序EEPROM有正确输出.png

错误结果.png (20.56 KB, 下载次数: 20)

错误结果.png

代码.png (102.48 KB, 下载次数: 19)

代码.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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*/               
}

回复

使用道具 举报

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

应该不是逻辑的问题,我试了下,在“下载程序”后,这个引脚读高电平根本读不出来。在仿真的时候可以读出高电平。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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