找回密码
 立即注册
查看: 254|回复: 12

一次清理SPI数据寄存器,导致的错误

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-1-22 20:45:46 | 显示全部楼层 |阅读模式

实验环境

mcu: 8051U, 32-bit模式, 12Mhz

存储器: W25Q64JV

问题描述

想通过串口向标准SPI接口的存储器写入数据。初始化标准SPI接口时,因一次无意中的初始化习惯,给寄存器‘SPDAT’赋值为“00H”。这个初始化步骤导致了接下来如果是直接读存储器,读出的数据是错误的,全部为“0FFH”。然而,如果在读存储器之前插入读存储器ID的函数,然后再读存储器,结果就对了,百思不得其解。

开始以为是使能了SPI功能之后,初始化“SPDAT”会导致SPI外设产生自动发送数据的动作。但是我把初始化“SPDAT”的语句放在使能SPI功能之前,问题依旧。再后来,取消片选之后,再初始化“SPDAT”,问题依旧。

唯一的办法的是,注释掉对“SPDAT”寄存器的初始化,结果就读对了。没想通是为什么。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-23 10:08:24 | 显示全部楼层
为啥要初始化数据寄存器呢?
你往这个寄存器里面写值,就会触发SPI发送动作,,要不你就判断SPI发送完成再进行片选拉低的操作,兴许也没有问题,,
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-1-23 10:41:31 | 显示全部楼层
_奶*** 发表于 2025-1-23 10:08
为啥要初始化数据寄存器呢?
你往这个寄存器里面写值,就会触发SPI发送动作,,要不你就判断SPI发送完成再 ...

操作习惯吧。可是我把使能SPI功能的语句放在初始化时给“SPDAT”寄存器赋值之后,还是会导致读存储器时读出的数据错误
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-23 11:21:23 | 显示全部楼层
BeHa*** 发表于 2025-1-23 10:41
操作习惯吧。可是我把使能SPI功能的语句放在初始化时给“SPDAT”寄存器赋值之后,还是会导致读存储器时读 ...

要不你接上逻辑分析仪?或者示波器,,看看这个SPI是不是不使能情况下,也能向外发送数据

这个确实和想象中有点儿不一样了。。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-1-23 13:40:41 | 显示全部楼层
_奶*** 发表于 2025-1-23 11:21
要不你接上逻辑分析仪?或者示波器,,看看这个SPI是不是不使能情况下,也能向外发送数据

这个确实和想象 ...

正有此意。
使能SPI之前,循环给“SPDAT”赋值,观察SPI的CLK和MOSI针脚,接上示波器观察一下
但是,手头上有其他事情,明天再来更新状态
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-23 17:05:10 | 显示全部楼层
BeHa*** 发表于 2025-1-23 13:40
正有此意。
使能SPI之前,循环给“SPDAT”赋值,观察SPI的CLK和MOSI针脚,接上示波器观察一下
但是,手头 ...

蹲一个更新
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-1-24 00:29:02 | 显示全部楼层

拿示波器观察了,不好的消息,给寄存器“SPDAT”赋值,的确会触发SPI外设的始终针脚输出时钟 :-(

SPI外设初始化期间实验的代码:
  1. SPICONF:
  2.     SETB    SS
  3.     /*
  4.     SPI func pins selection
  5.     SS --> P1.4
  6.     MOSI --> P1.5
  7.     MISO --> P1.6
  8.     SCLK --> P1.7
  9.     */
  10.     ANL     P_SW1, #NOT 0CH
  11.     /*
  12.     ignore SS pin
  13.     MSB first
  14.     */
  15.     MOV     SPCTL, #1101$1101B
  16.     MOV     SPSTAT, #0C0H
  17.    
  18.     MOV     R7, #9D
  19.     L1:
  20.     ; clean SPDAT register
  21.     MOV     SPDAT, #00H
  22.     MOV     R5, #1D
  23.     CALL    DELAYMS
  24.     DJNZ    R7, L1
  25.     ; disable SPI interrupt
  26.     ANL     IE2, #NOT 02H
  27.     RET
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-24 08:49:30 | 显示全部楼层
意料之外,,是没有开启SPI使能位的情况下么?很抱歉,不是很熟悉汇编。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2025-1-24 10:21:11 | 显示全部楼层
_奶*** 发表于 2025-1-24 08:49
意料之外,,是没有开启SPI使能位的情况下么?很抱歉,不是很熟悉汇编。

使能了SPI外设。在第15行使能了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2025-1-24 10:50:59 | 显示全部楼层
BeHa*** 发表于 2025-1-24 10:21
使能了SPI外设。在第15行使能了

使能了 会往外发送数据不是很正常么,,,我再想的是不能使能SPI的情况下,给数据寄存器赋值了,,还会往外发送数据么。。
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:14 , Processed in 0.155161 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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