32
s29ws-n_00_g0 january 25, 2005
进步 信息
注释:
1. 根基 = 根基 地址.
2. last = last 循环 的 写 缓存区 prog内存 运作; 取决于 在 号码 的
words 写, 这 总的 号码 的 循环 将 是 从 6 至 37.
3. 为 最大 效率, 它 是 推荐那 这 写 缓存区 是 承载 和
这 最高的 号码 的 words (n words) 可能.
这 下列的 是 一个 c 源 代号例子 的 使用 这 写 buffer 程序 函数. 谈及 至
这
spansion 低 水平的 驱动器 用户’s 手册
(有 在 www.amd.com 和
www.fujitsu.com) 为 一般 信息 在 spansion flash 记忆 软件 开发
指导原则.
/* 例子: 写 缓存区 程序编制 command */
/* 注释: 写 缓存区 程序编制 限制 至 16 words. */
/* 所有 地址 至 是 写 至 这 flash 在 */
/* 一个 运作 必须 是 在里面 这 一样 flash */
/* 页. 一个 flash 页 begins 在 地址 */
/* evenly divisible 用 0x20. */
uint16 *src = 源_的_数据; /* 地址 的 源 数据 */
uint16 *dst = destination_的_数据; /* flash destination 地址 */
uint16 wc = words_至_程序 -1; /* 文字 计数 (minus 1) */
*( (uint16 *)根基_地址 + 0x555 ) = 0x00aa; /* 写 unlock 循环 1 */
*( (uint16 *)根基_地址 + 0x2aa ) = 0x0055; /* 写 unlock 循环 2 */
*( (uint16 *)sector_地址 ) = 0x0025; /* 写 写 缓存区 加载 command */
*( (uint16 *)sector_地址 ) = wc; /* 写 文字 计数 (minus 1) */
循环:
*dst = *src; /* 所有 dst 必须 是 一样 页 */ /* 写 源 数据 至 destination */
dst++; /* increment destination pointer */
src++; /* increment 源 pointer */
如果 (wc == 0) goto confirm /* 完毕 当 文字 计数 相等 零 */
wc--; /* decrement 文字 计数 */
goto 循环; /* 做 它 又一次 */
confirm:
*( (uint16 *)sector_地址 ) = 0x0029; /* 写 confirm command */
/* poll 为 completion */
/* 例子: 写 缓存区 abort 重置 */
*( (uint16 *)地址 + 0x555 ) = 0x00aa; /* 写 unlock 循环 1 */
*( (uint16 *)地址 + 0x2aa ) = 0x0055; /* 写 unlock 循环 2 */
*( (uint16 *)地址 + 0x555 ) = 0x00f0; /* 写 缓存区 abort 重置 */
软件 功能 和 样本 代号
表格 7.13. 写 缓存区 程序
(lld 功能 使用 = lld_writetobuffercmd, lld_programbuffertoflashcmd)
循环 描述 运作 字节 地址 文字 地址 数据
1 Unlock 写 根基 + aaah 根基 + 555h 00AAh
2 Unlock 写 根基 + 554h 根基 + 2aah 0055h
3 写 缓存区 加载 command 写 程序 地址 0025h
4 写 文字 计数 写 程序 地址 文字 计数 (n–1)h
号码 的 words (n) 承载 在 这 写 缓存区 能 是 从 1 至 32 words.
5 至 36 加载 缓存区 文字 n 写 程序 地址, 文字 n 文字 n
Last 写 缓存区 至 flash 写 sector 地址 0029h