野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12574|回复: 8

野火例程读 ManufactDeviceID 0x90 读回FFFF

[复制链接]
回帖奖励 2 火花 回复本帖可获得 1 火花奖励! 每人限 1 次
发表于 2015-4-17 08:26:35 | 显示全部楼层 |阅读模式
本帖最后由 liudijiang 于 2015-4-18 08:58 编辑

检测了很多遍,发现有些坛友也是出现这个问题,发送指令90h,00h,00h,00h,返回的两个字节都是ff。是哪里有问题?我重新用寄存器写了个程序,还是这样。。。是不是硬件有问题?
求坛主解答。。。
回复

使用道具 举报

 楼主| 发表于 2015-4-17 10:06:11 | 显示全部楼层
是不是野火开发板有问题?是的话我就不纠结程序了。。。这样学习好浪费时间啊。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-18 08:55:58 | 显示全部楼层
为什么没人回复的。。。
回复 支持 反对

使用道具 举报

发表于 2015-4-18 09:06:31 | 显示全部楼层

回帖奖励 +1 火花

之前有读过是可以正确读出的,程序不知道放哪了。emwin也有用到读器件ID。

你有没有开启CRC的时钟?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-18 10:01:09 | 显示全部楼层
flyleaf 发表于 2015-4-18 09:06
之前有读过是可以正确读出的,程序不知道放哪了。emwin也有用到读器件ID。

你有没有开启CRC的时钟?

刚刚又试了一遍,90h那个指令还是读出0xffff,改了9fh指令读,能读回来0xEF4017,其他都没改
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-18 10:04:05 | 显示全部楼层
flyleaf 发表于 2015-4-18 09:06
之前有读过是可以正确读出的,程序不知道放哪了。emwin也有用到读器件ID。

你有没有开启CRC的时钟?

ABh指令能读回来0x16,。。。郁闷了,,,就是90h读不回来正确的值。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-18 10:32:50 | 显示全部楼层
u32 SPI_FLASH_ReadDeviceID(void)
{
  u32 Temp = 0;
  u8 temp1,temp2;

  /* Select the FLASH: Chip Select low */
  SPI_FLASH_CS_LOW();

  /* Send "RDID " instruction */
  SPI_FLASH_SendByte(0x90);
  SPI_FLASH_SendByte(0x00);
  SPI_FLASH_SendByte(0x00);
  SPI_FLASH_SendByte(0x00);
  
  /* Read a byte from the FLASH */
  temp1 = SPI_FLASH_SendByte(Dummy_Byte);
  temp2 = SPI_FLASH_SendByte(Dummy_Byte);

  /* Deselect the FLASH: Chip Select high */
  SPI_FLASH_CS_HIGH();
        Temp = (temp1<<8)|(temp2<<0);

  return Temp;
}
野火的例程我改动的地方就这个函数,其他都没改。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-18 11:00:39 | 显示全部楼层
spi函数
void SPI1_SetSpeed(u8 SpeedSet);
u8 SPI1_ReadByte(void);
void SPI1_WriteByte(u8 data);
void SPI1_Init(u8 pclkdiv, u8 mode);
flash函数
u32  SPI_Flash_ReadID(void);
u8 SPI_Flash_ReadByte(u32 ReadAddr);
void SPI_Flash_WriteByte(u32 WriteAddr,u8 data);
u32  SPI_Flash_JEDECID(void);
我自己写了SPI_FLASH调试,spi和flash两个.c,.h里面的函数就这几个
能读出0xEF16,和0xEF4017,
然后我又用回了野火的例程debug,发现还是读出ffff,我再次用我自己写的程序调试,发现也是只读出ffff
我想了下,用自己的调试成功、、、用野火的调试不成功、、、再次用回自己的调试不成功。。。。这个过程没有断电
会不会再用野火的时候什么指令锁了flash?
我断了电,重新上电,再次debug野火程序,不成功,
我断了电,重新上电,再次debug自己写的程序,成功了,不断电继续debug,成功调试,再次断电重新上电调试自己的程序,调试成功。
最后的总结,野火例程没看懂,不知道哪里出了问题。野火程序是用  W25Q64存储小数  这个工程调试的。关于断电上电,锁指令会因为上电断电解除吗?应该不会的吧?十分奇怪,百思不得其解。。。。
有同样问题的朋友把QQ发上来,我发一份我写的给你调试看看。
我查看了指令表,有一些指令是写保护什么的。不确定野火例程是不是做写保护还是什么的。我还没找到这个。
野火程序调试成功了的朋友发一份调试成功的给我看看啊,我的qq邮箱   474147597@qq.com
用了这么久论坛,感觉还是大家都是各自用各自的论坛啊。。。。
回复 支持 反对

使用道具 举报

发表于 2015-4-18 11:10:33 | 显示全部楼层
liudijiang 发表于 2015-4-18 10:32
u32 SPI_FLASH_ReadDeviceID(void)
{
  u32 Temp = 0;

直接用9f命令好了,说不定flash芯片不运动90那个命令
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 01:18 , Processed in 0.042291 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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