OpenEdv-开源电子网

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

学完SPI后的心得

[复制链接]

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
发表于 2012-3-2 20:48:12 | 显示全部楼层 |阅读模式

1.SPI_T_R_BYTE()不能拆,拆开就不能用了

2.页写完,在CS拉高后,一定要等待芯片的STATE寄存器的BUSY位为0,必须要这句话

3.本人对自由写,带擦除函数的算法,好像比原子哥的简单,,,,,呵呵 不知能否经得起考验

尽供参考:

 

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

使用道具 举报

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
 楼主| 发表于 2012-3-2 20:48:45 | 显示全部楼层
//作用:自由写
//带擦除
//具体实现方法是很罗嗦的,因为每次写都要擦除当前地址所在的扇区,所以写之前要先用一个BUFF保存该扇区的内容,
//然后,把要写入的内容放入BUFF中,再把整个BUFF写入FLAH中
u8 SEC_BUFF[4096];//保存要写入扇区的内容
void  FLASH_WRITE(u8 *p_buff,u32 wr_address,u16 numofwrite)
{
u16 sector=wr_address/4096;  //当前地址所在扇区
u16 sec_offset=wr_address%4096;   //要写入地址所在扇区的偏移量
u16 last_sec=(wr_address+numofwrite)/4096;//num_sec为最后一个要写的扇区
u16 sec_bytes_remain=4096-sec_offset;//当前地址所在扇区的剩余字节
u16 i,j;
if(numofwrite<=sec_bytes_remain)
sec_bytes_remain=numofwrite;
for(i=sector;i<=last_sec;i++)
{
printf("sector:%d\n",i);
FLASH_R_BYTES(SEC_BUFF,i*4096,4096);  //用一个BUFF保存扇区i的内容 
FLASH_ERASE_SECTOR(i); //要擦除当前地址所在的扇区
for(j=0;j<sec_bytes_remain;j++) //把能写入当前扇区的内容复制
SEC_BUFF[sec_offset+j]=p_buff[j];

FLASH_WRITE_PAGES(SEC_BUFF,i*4096,4096); //把整个BUFF写入FLASH中

if(sec_bytes_remain==numofwrite)
break;
else
{
 numofwrite-=sec_bytes_remain;
 p_buff+=sec_bytes_remain;
 wr_address+=sec_bytes_remain;
 if(numofwrite><=4096)
 {
  sec_bytes_remain=numofwrite;
sec_offset=0;
 }
 else
 {
  sec_bytes_remain=4096;  //要写下一个扇区
sec_offset=0;
 }
}
}

}
柳暗花明
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2012-3-2 21:47:35 | 显示全部楼层
有改进,不错.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2012-1-19
在线时间
0 小时
 楼主| 发表于 2012-3-2 22:46:05 | 显示全部楼层
呵呵...
回复 支持 反对

使用道具 举报

2

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2011-10-17
在线时间
0 小时
发表于 2012-3-18 10:03:02 | 显示全部楼层
  路过,顶下
回复 支持 反对

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2012-3-18 11:10:42 | 显示全部楼层
歇息诶分享啊,呵呵
努力,前进。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 04:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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