菜鸟,请教一个对Flash芯片操作的问题

[复制链接]
查看11 | 回复3 | 2008-11-28 11:27:09 | 显示全部楼层 |阅读模式
len是16位,那么这条数据写入语句: len = (len+1)/2;是什么意思?越详细越好!谢谢
完整程序补发上来了,同时悬赏再提高10分,“自动写入时序”又如何理解?谢谢各位帮我分析!
U8 FlashProgram(U32 addr,U16 *buffer,U16 len)
{

volatile U16 *ptr;

U16 temp1,temp2;

U16 i,Result;

// 写入数据

len = (len+1)/2;

i = 0;

while(i < len)

{

// 写入一个字节

ptr = ADDRESS(0x5555<<1);
// 自动写入时序

*ptr = 0xaa;

ptr = ADDRESS(0x2aaa<<1);

*ptr = 0x55;

ptr = ADDRESS(0x5555<<1);

*ptr = 0xa0;

ptr = ADDRESS(addr+i*2);

*ptr = buffer;
// 写入数据

while(1)
// 等待写入完成

{

temp1 = *ptr;

temp2 = *ptr;

if (temp1 == temp2)

{

temp1 = *ptr;

temp2 = *ptr;

if (temp1 == temp2)

{

break;

}

}

}

i++;

}

回复

使用道具 举报

千问 | 2008-11-28 11:27:09 | 显示全部楼层
flash的读写不是按照字节来读写的,而是按照16bit,就是两个字节来读写。 如果 len是偶数,那么实际读写长度应该是len=len/2 如果 len是奇数,那么实际读写长度应该是len=(len+1)/2根据整除的特性,两个式子可以统一写为len=(len+1)/2...
回复

使用道具 举报

千问 | 2008-11-28 11:27:09 | 显示全部楼层
能不能把上下文一起传上来?...
回复

使用道具 举报

千问 | 2008-11-28 11:27:09 | 显示全部楼层
是否折半搜索?...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行