OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4314|回复: 6

spi问题,小白很白痴,求详细解答,谢谢

[复制链接]

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
发表于 2014-3-11 20:09:40 | 显示全部楼层 |阅读模式
//写SPI FLASH  
//在指定地址开始写入指定长度的数据
//该函数带擦除操作!
//pBuffer:数据存储区
//WriteAddr:开始写入的地址(24bit)
//NumByteToWrite:要写入的字节数(最大65535)   
u8 SPI_FLASH_BUFFER[4096];  
void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)   
u32 secpos;
u16 secoff;
u16 secremain;   
  u16 i;    
u8 * SPI_FLASH_BUF;  
    SPI_FLASH_BUF=SPI_FLASH_BUFFER;     
  secpos=WriteAddr/4096;//扇区地址  
secoff=WriteAddr%4096;//在扇区内的偏移
secremain=4096-secoff;//扇区剩余空间大小   
  //printf("ad:%X,nb:%X\r\n",WriteAddr,NumByteToWrite);//测试用
  if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096个字节
while(1) 
{
SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);//读出整个扇区的内容
for(i=0;i<secremain;i++)//校验数据
{
if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//需要擦除                      ,<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  +  +  +  +  ++  + + +  ++ +
}

问题一;我标加号那一行  ,一直读数组来判断是否需要擦写,但是为什么要跟0xFF比较啊?  如果数组里没有0XFF但是有别的数据,不还是判断不出来么?
问题二;void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)     
            这句(u8* pBuffer定义了一个指针叫做//pBuffer:数据存储区   这个数据存储区是在哪?,是个什么东东??



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-11 20:36:15 | 显示全部楼层
1.这个只是测试代码,如果读出的数不是0xFF就要跳出while。
2.参考形参和实参的定义
回复 支持 反对

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-11 21:12:50 | 显示全部楼层
回复【2楼】ricefat:

1.这个只是测试代码,如果读出的数不是0xFF就要跳出while。
2.参考形参和实参的定义

---------------------------------
第一个问0Xff没懂    !!!!!!!!!!!老师辛苦了!!!!!!!!!!
for(i=0;i<secremain;i++)//校验数据
{
if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//需要擦除                      
}

1   这里有数组里有0xff时执行什么?   
2   当数组全是0x00(也就是全空,没数据时0x00)执行什么?>
回复 支持 反对

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-11 21:17:04 | 显示全部楼层
回复【2楼】ricefat:

1.这个只是测试代码,如果读出的数不是0xFF就要跳出while。
2.参考形参和实参的定义

---------------------------------
我似乎明白了,难道擦除完数据全部为0XFF   ???
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-11 21:22:16 | 显示全部楼层
回复【4楼】傻子:
---------------------------------
你这里面并没有擦除代码。但是按照上面的检测标准,似乎擦除后都变为0xFF
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-3-11 21:24:27 | 显示全部楼层
回复【3楼】傻子:
---------------------------------
是不是数据只是对你来说有没有用。
0x00不一定是空,也许是数据。
0xFF也不一定是数据,也许代表空
回复 支持 反对

使用道具 举报

111

主题

265

帖子

0

精华

高级会员

Rank: 4

积分
740
金钱
740
注册时间
2014-3-4
在线时间
6 小时
 楼主| 发表于 2014-3-12 09:00:39 | 显示全部楼层
回复【6楼】ricefat:

回复【3楼】傻子:
---------------------------------
是不是数据只是对你来说有没有用。
0x00不一定是空,也许是数据。
0xFF也不一定是数据,也许代表空

---------------------------------
xiexie  谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-13 23:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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