摘要:DS80C400/DS80C410/DS80C411网络微控制器具有特定的电气和时序要求,兼容的闪存芯片必须符合这些要求。本应用笔记对这些要求进行说明,给出与DS80C400/DS80C410/DS80C411完全兼容的存储器芯片实例,同时还给出能够擦除和编程电气兼容、但与ROM装载程序软件不兼容闪存的软件源代码。读过本应用笔记后,用户在DS80C400/DS80C410/DS80C411设计中应可以决定使用何种闪存。
概述
本应用笔记描述DS80C400/DS80C410/DS80C411网络微控制器所采用闪存的兼容性要求,给出完全兼容闪存芯片的实例。本应用笔记同时还给出了能够擦除和编程电气兼容、但与ROM装载程序软件不兼容闪存的软件。
本应用笔记中的所有参考程序源代码可从Dallas Semiconductor的ftp服务器下载。
要求
为与DS80C400/DS80C410/DS80C411一起工作,闪存芯片必须电气兼容,还必须符合规定的时序要求(例如,速度必须足够快)。
电气特性
DS80C400/DS80C410/DS80C411要求3.3V、字节宽度(x 8)的闪存。
访问时间
DS80C400/DS80C410/DS80C411运行速率(CPU速率)为晶体速率乘以时钟倍频系数。(ROM装载程序无法访问时钟倍频系数,但可由应用软件设置。) 时钟周期tclcl = 1/(CPU速率)。
只有符合DS80C400/DS80C410/DS80C411时序要求时,才可从闪存运行,详见相应数据资料。
表1列出了DS80C400和闪存AM29LV081的运行速率。
表1. 闪存访问时间tavav决定的CPU速率
| Rated Flash Speed |
Max CPU Speed |
| 55ns |
40MHz |
| 70ns |
33MHz |
| 90ns |
27.5MHz |
| 120ns |
21MHz |
| 150ns |
17MHz |
注意:没有能够使网络微控制器运行于75MHz的商用闪存。如果您希望以75MHz运行,应采用快速SRAM,可参考应用笔记615:Design Considerations for DS80C400-Based TINI Systems。
CPU晶体应为较好的串行波特率产生器。而且,只有CPU速率大于约27MHz时,才能运行在100M位网络上。
ROM装载程序
DS80C400/DS80C410/DS80C411的内置ROM支持通过串口和网络装载SRAM和闪存。注意,用于装载程序的串口最大波特率由晶体决定,如115200bps至少需要20MHz。
装载程序算法
ROM装载程序内置用于闪存扇区擦除和闪存字节编程的算法。装载程序假定闪存扇区大小均为64kB,采用表2所示的编程算法。
表2. ROM装载程序闪存算法
| Operation |
Cycle 1 |
Cycle 2 |
Cycle 3 |
Cycle 4 |
Cycle 5 |
Cycle 6 |
| |
Addr |
Data |
Addr |
Data |
Addr |
Data |
Addr |
Data |
Addr |
Data |
Addr |
Data |
| Program |
0555 |
AA |
02AA |
55 |
0555 |
A0 |
PA |
PD |
|
|
|
|
| Sector erase |
0555 |
AA |
02AA |
55 |
0555 |
80 |
0555 |
AA |
02AA |
55 |
0000 |
30 |
注意:表2仅列出了DS80C4XX地址线A15-A0。A2-A16总是扇区地址。所有数值为十六进制。
闪存地址线
在与虚(magic)地址匹配时,多数闪存忽略高阶地址位(DS80C400/DS80C410/DS80C411的A12及更高地址位)。例如,初始化编程序列时,第一个地址无论是5555h还是555h,其作用相同。
还有一些闪存忽略低地址位(在字/字节可选存储器中称为A-1,其余为A0)。例如,地址无论是555h还是554h,其作用相同。
这表明有些存储器表面看起来不兼容,但如果按表3 (B)列或(C)列所示连接闪存地址线,则能与DS80C400/DS80C410/DS80C411装载程序完全兼容。所有其它闪存(不含地址线A-1,或未在表4另外列出)应按照(A)列所示连接。
表3. 地址线连接
DS80C400/410/411 Address Line |
(A) Standard |
(B) With A-1 |
(C) See Text |
| A0 |
A0 |
A0 |
A1 |
| A1 |
A1 |
A1 |
A2 |
| A2 |
A2 |
A2 |
A3 |
| A3 |
A3 |
A3 |
A4 |
| A4 |
A4 |
A4 |
A5 |
| A5 |
A5 |
A5 |
A6 |
| A6 |
A6 |
A6 |
A7 |
| A7 |
A7 |
A7 |
A8 |
| A8 |
A8 |
A8 |
A9 |
| A9 |
A9 |
A9 |
A10 |
| A10 |
A10 |
A10 |
A11 |
| A11 |
A11 |
A-1 |
A0 |
| A12 |
A12 |
A11 |
A12 |
| A13 |
A13 |
A12 |
A13 |
| A14 |
A14 |
A13 |
A14 |
| ... |
... |
... |
... |
| A(n) |
A(n) |
A(n-1) |
A(n) |
装载程序支持等级完全支持的闪存可直接使用ROM装载程序工作。
部分支持的闪存需要软件帮助擦除闪存扇区,但可由ROM编程。这类闪存多数具有可编程引导扇区,但不能被ROM装载程序完全擦除。
不支持的闪存需要外部软件进行擦除和编程。
表4列出了一些闪存与ROM装载程序的兼容性。
表4. 3V闪存(x 8)
| Vendor (ID) |
Device (ID) |
Size (Byte) |
Blocks |
ROM Support |
Notes |
| Atmel (1F) |
AT49BV001A (4,5) |
128K |
B |
Prog |
Tested. ROM can program, but not erase part of the boot sector. |
| AT49LV008A (21,22) |
1M |
B |
No |
|
| AT49LL080 (EB) |
1M |
U |
No |
|
| Intel (89) |
28F320J3 (16) |
4M |
O |
No |
|
| Macronix (C2) |
MX29LV081 (38) |
1M |
U |
Full |
Tested. Data sheet shows incompatibility for sector erase, but sector erase does work in practice. |
| MX29LV017B (C8) |
2M |
U |
Full |
Tested. |
| MX29LV033A (A3) |
4M |
U |
Full |
|
| Micron (2C,89) |
MT28F004B3 (70,71) |
512K |
B |
No |
|
| MT28F400B3 (70,71) |
512K |
B |
No |
|
| MT28F008B3 (9C,9D) |
1M |
B |
No |
|
| MT28F320J3 (16) |
4M |
O |
No |
|
| Sharp (89) |
LH28F016SC (AA) |
2M |
U |
No |
|
| Spansion (01) (AMD/Fujitsu) |
AM29LV200B (3B,BF) |
256K |
B |
Prog |
Tested. Requires address line connection (B). ROM can program, but not erase part of the boot sector. |
| AM29LV004B (B5,B6) |
512K |
B |
Prog |
Tested. ROM can program, but not erase part of the boot sector. |
| AM29LV040B (4F) |
512K |
U |
Full |
Tested. |
| AM29LV400B (B9,BA) |
512K |
B |
Prog |
Tested. Requires address line connection (B). ROM can program, but not erase part of the boot sector. |
| AM29LV008B (37,3E) |
1M |
B |
Prog |
Tested. ROM can program, but not erase part of the boot sector. |
| AM29LV081B (38) |
1M |
U |
Full |
Tested. |
| AM29LV800 (5B,DA) |
1M |
B |
Prog |
Tested. Requires address line connection (B). ROM can program, but not erase part of the boot sector. |
| AM29LV017D (4F) |
2M |
U |
Full |
Tested. |
| AM29LV116D (4C,C7) |
2M |
B |
Prog |
Tested. ROM can program, but not erase part of the boot sector. |
| AM29LV160B/D or S29AL016D (49,C4) |
2M |
B |
Prog |
Tested. Requires address line connection (B). ROM can program, but not erase part of the boot sector. |
| AM29LV033C or S29AL032D Model 0 (A3) |
4M |
U |
Full |
Tested. |
| AM29LV320D or S29AL032D Model 3/4 (F6,F9) |
4M |
B |
Prog |
Tested. Requires address line connection (B). ROM can program, but not erase part of the boot sector. |
| SST (BF) |
SST39LF040 (D7) |
512K |
O |
No |
|
| SST39LF080 (D8) |
1M |
U |
No |
|
| SST39VF1681/2 (C8) |
2M |
U |
Full |
Requires address line connection (C). |
| ST Microelectronics (20) |
M29W004B (EA,EB) |
512K |
B |
Prog |
ROM can program, but not erase part of the boot sector. |
| M29W040B (E3) |
512K |
U |
Prog |
Tested. Should be fully supported according to data sheet, but sector erase algorithm does not work in practice. |
| M29W008D (D2,DC) |
1M |
B |
Prog |
Tested. ROM can program, but not erase part of the boot sector. |
| M29W800D (D7, 5B) |
1M |
B |
No |
Tested. |
| Winbond (DA) |
W39L040A (D6) |
512K |
U |
No |
|
说明:
Blocks列:B=器件具有引导区,U=一致的64kB块尺寸,O=一致的非64kB块尺寸
Vendor (供应商)和Device (器件) ID以16进制表示。
ROM Support列:Full Support (完全支持)、ROM can Program (ROM可编程)或No Support (不支持)
注意:不是所有的器件都经过了Dallas Semiconductor的测试。制造工艺和器件数据可能会改变,在进行设计之前,请验证兼容性。
闪存软件
如果ROM装载程序不完全支持某种特殊存储器,可通过软件装载SRAM来擦除/编程该存储器。程序1是擦除闪存芯片的软件。程序2将64kB的SRAM内容复制至闪存,对闪存扇区编程。请注意,实现对特定闪存的编程算法时,这些程序通常需要修改。
程序将内容装载至SRAM的第一个64kB (“第0块”)。采用MTK时,请关掉“Clear Heap”选项。当采用ROM装载程序对部分支持的闪存编程时(运行芯片擦除程序之后),请关掉JavaKit中的“AutoZap”选项,或MTK中的“Erase Flash”选项。
程序1. 擦除闪存(chiperase.asm)
;****************************************************************************
;* Copyright (C) 2004 Dallas Semiconductor Corporation, All Rights Reserved.
;*
;* Permission is hereby granted, free of charge, to any person obtaining a
;* copy of this software and associated documentation files (the "Software"),
;* to deal in the Software without restriction, including without limitation
;* the rights to use, copy, modify, merge, publish, distribute, sublicense,
;* and/or sell copies of the Software, and to permit persons to whom the
;* Software is furnished to do so, subject to the following conditions:
;*
;* The above copyright notice and this permission notice shall be included
;* in all copies or substantial portions of the Software.
;*
;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
;* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
;* IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
;* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
;* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
;* OTHER DEALINGS IN THE SOFTWARE.
;*
;* Except as contained in this notice, the name of Dallas Semiconductor
;* shall not be used except as stated in the Dallas Semiconductor
;* Branding Policy.
;****************************************************************************
;
; This program demonstrates how to erase a flash memory chip that is not
; supported by the ROM loader of the networked microcontrollers.
;
; To build this program, run
; macro chiperase.asm
; a390 -d -l chiperase.mpp
;
; To execute, load into SRAM and use loader commands 'B0', 'X0'.
;
; Note: When using MTK to load this code, be sure to disable the "Clear Heap"
; option.
;
; The flash memory we want to erase is connected to CE2\, or address 400000h,
; since the ROM uses 2 MB per chip enable.
FLASH_ADDRESS EQU 400000h
; Different flash memories use different addresses to "tickle" flash programming/
; erase operation.
; Erase ST M29W040
; FLASH_TICKLE0 EQU (FLASH_ADDRESS or 555h)
; FLASH_TICKLE1 EQU (FLASH_ADDRESS or 2aah)
; Erase AM29LV200BT
FLASH_TICKLE0 EQU (FLASH_ADDRESS or 0aaah)
FLASH_TICKLE1 EQU (FLASH_ADDRESS or 555h)
org 000000h
start:
; The ROM enables 24 bit mode and disables interrupts.
; No other initialization is necessary.
; Start flash chip erase
; 1st Cycle
mov dptr, #FLASH_TICKLE0
mov a, #0aah
movx @dptr, a
; 2nd Cycle
mov dptr, #FLASH_TICKLE1
mov a, #55h
movx @dptr, a
; 3rd Cycle
mov dptr, #FLASH_TICKLE0
mov a, #80h
movx @dptr, a
; 4th Cycle
mov dptr, #FLASH_TICKLE0
mov a, #0aah
movx @dptr, a
; 5th Cycle
mov dptr, #FLASH_TICKLE1
mov a, #55h
movx @dptr, a
; 6th Cycle
mov dptr, #FLASH_TICKLE0
mov a, #10h
movx @dptr, a
; Wait for operation to complete
mov dptr, #FLASH_ADDRESS
wait:
movx a, @dptr
cjne a, #0ffh, wait
; Reset
mov dptr, #FLASH_ADDRESS
mov a, #0f0h
movx @dptr, a
; Print success message
mov a, #'D'
acall printchar
mov a, #'O'
acall printchar
mov a, #'N'
acall printchar
mov a, #'E'
acall printchar
; Done!
sjmp $
; Serial port 0 is initialized by the loader. Printing
; a character is therefore trivial.
tix bit scon.1
printchar:
jnb tix, $
clr tix
mov sbuf, a
jnb tix, $
ret
end
程序2. 对不支持的闪存编程(flashprogram.asm)
;****************************************************************************
;* Copyright (C) 2004 Dallas Semiconductor Corporation, All Rights Reserved.
;*
;* Permission is hereby granted, free of charge, to any person obtaining a
;* copy of this software and associated documentation files (the "Software"),
;* to deal in the Software without restriction, including without limitation
;* the rights to use, copy, modify, merge, publish, distribute, sublicense,
;* and/or sell copies of the Software, and to permit persons to whom the
;* Software is furnished to do so, subject to the following conditions:
;*
;* The above copyright notice and this permission notice shall be included
;* in all copies or substantial portions of the Software.
;*
;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
;* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
;* IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
;* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
;* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
;* OTHER DEALINGS IN THE SOFTWARE.
;*
;* Except as contained in this notice, the name of Dallas Semiconductor
;* shall not be used except as stated in the Dallas Semiconductor
;* Branding Policy.
;****************************************************************************
;
; This program demonstrates how to erase a flash memory chip that is not
; supported by the ROM loader of the networked microcontrollers.
;
; To build this program, run
; macro flashprogram.asm
; a390 -d -l flashprogram.mpp
;
; To execute, first load the data you wish to program into SRAM memory in
; bank 1 (010000h - 01ffffh). Then, load this code into SRAM and use
; the loader commands 'B0', 'X100'.
;
; Note: When using MTK to load this code, be sure to disable the "Clear Heap"
; option.
;
; The flash memory we want to program is connected to CE2\, or address 400000h,
; since the ROM uses 2 MB per chip enable.
FLASH_ADDRESS EQU 400000h
; Different flash memories use different addresses to "tickle" flash programming/
; erase operation.
; Byte Program AM29LV200BT
FLASH_TICKLE0 EQU (FLASH_ADDRESS or 0aaah)
FLASH_TICKLE1 EQU (FLASH_ADDRESS or 555h)
; Address of programming buffer in SRAM
PROG_BUFFER EQU 010000h
; We want to program a whole 64 kB block
PROG_SIZE EQU 10000h
; This example program uses three datapointers
dps equ 086h
org 000100h
start:
; The ROM enables 24 bit mode and disables interrupts.
; No other initialization is necessary.
; Make sure r2 is in register bank 0
mov psw, #0
; Number of bytes to program
mov r1, #high(PROG_SIZE)
mov r0, #low(PROG_SIZE)
; Source
mov dps, #1
mov dptr, #PROG_BUFFER
; Destination
mov dps, #8
mov dptr, #FLASH_ADDRESS
loop:
; Start flash chip program for this byte
; Get source byte
mov dps, #1
movx a, @dptr
inc dptr
; Save byte we wish to program
mov r2, a
; No need to write the same byte again
; (also prevents writing of 0ffh)
mov dps, #8
movx a, @dptr
xrl a, r2
jz next
; Select dptr0
mov dps, #0
; 1st Cycle
mov dptr, #FLASH_TICKLE0
mov a, #0aah
movx @dptr, a
; 2nd Cycle
mov dptr, #FLASH_TICKLE1
mov a, #55h
movx @dptr, a
; 3rd Cycle
mov dptr, #FLASH_TICKLE0
mov a, #0a0h
movx @dptr, a
; 4th Cycle: Put destination byte
mov dps, #8
mov a, r2
movx @dptr, a
; Wait for operation to complete
wait:
movx a, @dptr
cjne a, 2, wait
next:
mov dps, #8
inc dptr
djnz r0, loop
; Display progress indicator
mov a, #'.'
acall printchar
djnz r1, loop
; Reset
mov dptr, #FLASH_ADDRESS
mov a, #0f0h
movx @dptr, a
; Print success message
mov a, #13
acall printchar
mov a, #10
acall printchar
mov a, #'D'
acall printchar
mov a, #'O'
acall printchar
mov a, #'N'
acall printchar
mov a, #'E'
acall printchar
; Done!
sjmp $
; Serial port 0 is initialized by the loader. Printing
; a character is therefore trivial.
tix bit scon.1
printchar:
jnb tix, $
clr tix
mov sbuf, a
jnb tix, $
ret
end
闪存识别
多数闪存可利用其自动选择能力被识别。程序3列出了解码多种闪存芯片供应商和器件的C源程序。
程序3. 闪存识别(identify.c)
/* ---------------------------------------------------------------------------
* Copyright (C) 2004 Dallas Semiconductor Corporation, All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL DALLAS SEMICONDUCTOR BE LIABLE FOR ANY CLAIM, DAMAGES
* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* Except as contained in this notice, the name of Dallas Semiconductor
* shall not be used except as stated in the Dallas Semiconductor
* Branding Policy.
* ---------------------------------------------------------------------------
*/
/*
* Identify - Tries to Identify Flash Memory Make/Model.
* Run from bank 20 (using loader commands B20, X)
*/
#include
#include
void main()
{
unsigned char vendor, device, ce;
puts("DS80C400/DS80C410/DS80C411 Flash Memory Identification");
do {
printf("
Identify flash at which chip enable? ");
do {
putchar(ce = _getkey());
if ((ce < '0') || (ce > '7'))
printf(" 0-7> ");
} while ((ce < '0') || (ce > '7'));
puts("
");
ce -= '0';
ce <<= 5; // 2 MB per chip enable
AP = ce;
#pragma asm
/* Tickle Flash Memory */
mov dptr, #0x5555
mov dpx, ap
mov a, #0xaa
movx @dptr, a
mov dptr, #0xaaaa
mov dpx, ap
mov a, #0x55
movx @dptr, a
/* Read ID Command */
mov dptr, #0x5555
mov dpx, ap
mov a, #0x90
movx @dptr, a
/* Read Manufacturer ID */
mov dptr, #0
mov dpx, ap
movx a, @dptr
#pragma endasm
vendor = ACC;
#pragma asm
/* Reset Flash */
mov dptr, #0
mov dpx, ap
mov a, #0xf0
movx @dptr, a
mov a, #0xff
movx @dptr, a
#pragma endasm
#pragma asm
/* Tickle Flash Memory */
mov dptr, #0x5555
mov dpx, ap
mov a, #0xaa
movx @dptr, a
mov dptr, #0xaaaa
mov dpx, ap
mov a, #0x55
movx @dptr, a
/* Read ID Command */
mov dptr, #0x5555
mov dpx, ap
mov a, #0x90
movx @dptr, a
/* Read Manufacturer ID */
mov dptr, #0x01
mov dpx, ap
movx a, @dptr
#pragma endasm
device = ACC;
#pragma asm
/* Reset Flash */
mov dptr, #0
mov dpx, ap
mov a, #0xf0
movx @dptr, a
mov a, #0xff
movx @dptr, a
#pragma endasm
printf("Flash memory at CE%bu: Vendor ID %02bX, Device ID %02bX.
--> ", ce >> 5, vendor, device);
switch (vendor) {
case 0x01: printf("Spansion AM");
switch (device) {
case 0x37: puts("29LV008 Top Boot"); break;
case 0x38: puts("29LV081"); break;
case 0x3b: puts("29LV200 Top Boot"); break;
case 0x3e: puts("29LV008 Bottom Boot"); break;
case 0x49: puts("29LV160 Bottom Boot"); break;
case 0x4c: puts("29LV116 Bottom Boot"); break;
case 0x4f: puts("29LV040"); break;
case 0x5b: puts("29LV800 Bottom Boot"); break;
case 0xa3: puts("29LV033"); break;
case 0xb5: puts("29LV004 Top Boot"); break;
case 0xb6: puts("29LV004 Bottom Boot"); break;
case 0xb9: puts("29LV400 Top Boot"); break;
case 0xba: puts("29LV400 Bottom Boot"); break;
case 0xbf: puts("29LV200 Bottom Boot"); break;
case 0xc4: puts("29LV160 Top Boot"); break;
case 0xc7: puts("29LV116 Top Boot"); break;
case 0xc8: puts("29LV017"); break;
case 0xda: puts("29LV800 Top Boot"); break;
case 0xf6: puts("29LV320 Top Boot"); break;
case 0xf9: puts("29LV320 Bottom Boot"); break;
default: puts(" ????"); break;
}
break;
case 0x1f: printf("Atmel AT");
switch (device) {
case 0x21: puts("49BV/LV008 T"); break;
case 0x22: puts("49BV/LV008"); break;
case 0xeb: puts("49LL080"); break;
default: puts(" ????"); break;
}
break;
case 0x20: printf("ST M");
switch (device) {
case 0x5b: puts("29W800 Bottom Boot"); break;
case 0xd2: puts("29W008 Top Boot"); break;
case 0xd7: puts("29W800 Top Boot"); break;
case 0xdc: puts("29W008 Bottom Boot"); break;
case 0xe3: puts("29W040"); break;
case 0xea: puts("29W004 Top Boot"); break;
case 0xeb: puts("29W004 Bottom Boot"); break;
default: puts(" ????"); break;
}
break;
case 0x89: printf("Intel or Sharp LH or "); // fall through
case 0x2c: printf("Micron MT");
switch (device) {
case 0x16: puts("28F320J3"); break;
case 0x70: puts("28F004B3/28F400B3 Top Boot"); break;
case 0x71: puts("28F004B3/28F400B3 Bottom Boot"); break;
case 0x9c: puts("28F008B3/28F800B3 Top Boot"); break;
case 0x9d: puts("28F008B3/28F800B3 Bottom Boot"); break;
case 0xaa: puts("28F016SC"); break;
default: puts(" ????"); break;
}
break;
case 0xbf: printf("SST SST");
switch (device) {
case 0xc8: puts("39VF1681"); break;
case 0xc9: puts("39VF1682"); break;
case 0xd4: puts("39LF/VF512"); break;
case 0xd5: puts("39LF/VF010"); break;
case 0xd6: puts("39LF/VF020"); break;
case 0xd7: puts("39LF/VF040"); break;
case 0xd8: puts("39LF/VF080"); break;
default: puts(" ????"); break;
}
break;
case 0x02:
case 0xc2: printf("Macronix MX");
switch (device) {
case 0x38: puts("29LV081"); break;
case 0xa3: puts("29LV033"); break;
case 0xc8: puts("29LV017"); break;
default: puts(" ????"); break;
}
break;
case 0xda: printf("Winbond W");
switch (device) {
case 0xd6: puts("39L040"); break;
default: puts(" ????"); break;
}
break;
default: puts("Unknown vendor/unknown device");
break;
}
} while (1);
}
结论
在本应用笔记的帮助下,用户在DS80C400/DS80C410/DS80C411设计时,应该能够决定采用那种闪存芯片。
Maxim/Dallas Semiconductor不对本应用笔记中列出的非Maxim/Dallas Semiconductor制造的器件负责。用户应对其应用中所选特定器件的电气规范和可用性负责。请与存储器件供应商联系,了解其产品的详细信息。
参考
本应用笔记的所有参考程序源代码可从Dallas Semiconductor的ftp服务器下载。
请参考高速微控制器用户指南: 网络微控制器补充资料(English only)以及DS80C400/DS80C410/DS80C411数据资料,了解网络微控制器的详细信息。
DS80C400、DS80C410和DS80C411的C程序库可供下载。
用户论坛可供下载。
Java是Sun Microsystems的商标。
我们期待您的反馈! 喜欢?不喜欢?有待改善?或为我们提供建议?请与我们联系 — 我们将根据您的意见或建议改善我们的工作。
网页评价或提供建议
自动更新
需要自动接收最新发布的应用笔记吗?请订阅EE-Mail™ (English only)。
| 更多信息 | |
APP 3478: Jul 04, 2005
|
|
|
|
下载,PDF格式 (110kB)
AN3478,
AN 3478,
APP3478,
Appnote3478,
Appnote 3478
|
|