打印

24C01與24C02除了容量有什么區別,可以替換用嗎?

[复制链接]
10120|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
iammercy|  楼主 | 2007-1-29 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
高勇| | 2007-1-29 16:23 | 只看该作者

可以用2402代替2401

使用特权

评论回复
板凳
扬欣电子| | 2007-1-29 20:06 | 只看该作者

可以。

使用特权

评论回复
地板
汪大卫| | 2007-1-29 20:25 | 只看该作者

是啊这个都要上21IC吗?学徒啊

使用特权

评论回复
5
dai_weis| | 2007-1-29 22:42 | 只看该作者

不过需要注意

他们的页模式不同,01是四个字节,02是八个字节(01A也是八个字节),
写入的时间01最大为10ms,02最大为5ms,程序中如果有关于此处的操作请注意,所以24C02可以替换24C01,反过来则要看具体的情况
该问题数据手册又说明可以详细查看。

还有尽管搂主问题简单,也许不该问,因为看数据手册会知道,不过楼上的用词不妥,呵呵希望不是多舌。

使用特权

评论回复
6
iammercy|  楼主 | 2007-1-30 08:32 | 只看该作者

RE:

是不是這樣?
;24C01    1Page * 32rows * 4bytes  * 8 bit = 128bytes = 1kbits    
;24C02    1Page * 32rows * 8bytes  * 8 bit = 256bytes = 2kbits    
;24C04    2Page * 16rows * 16bytes * 8 bit = 512bytes = 4kbits
;24C08    4Page * 16rows * 16bytes * 8 bit = 1024bytes = 8kbits
;24C16    8Page * 16rows * 16bytes * 8 bit = 2048bytes = 16kbits

因為24C01是每行4個字節,例如從0x02開始連續寫12個字節,就是
          0x02 0x03        向0x03地址寫完后換行
0x04 0x05 0x06 0x07        向0x07地址寫完后換行
0x08 0x09 0x0a 0x0b        向0x0b地址寫完后換行
0x0c 0x0d 

使用特权

评论回复
7
iammercy|  楼主 | 2007-1-30 09:15 | 只看该作者

為什么我查的資料01也是8個字節?

PAGE WRITE
The IS24CXX is capable of page-WRITE (8-byte for 24C01/
02 and 16-byte for 24C04/08/16) operation. A page-WRITE
is initiated in the same manner as a byte write, but instead
of terminating the internal write cycle after the first data word
is transferred, the master device can transmit up to N more
bytes (N=7 for 24C01/02 and N=15 for 24C04/08/16). After
the receipt of each data word, the IS24CXX responds
immediately with an ACKnowledge on SDA line, and the
three lower (24C01/24C02) or four lower (24C04/24C08/
24C16) order data word address bits are internally
incremented by one, while the higher order bits of the data
word address remain constant. If the master device should
transmit more than N+1 (N=7 for 24C01/02 and N=15 for
24C04/08/16) words, prior to issuing the STOP condition,
the address counter will “roll over,” and the previously
written data will be overwritten. Once all N+1 (N=7 for
24C01/02 and N=15 for 24C04/08/16) bytes are received
and the STOP condition has been sent by the Master, the
internal programming cycle begins. At this point, all received
data is written to the IS24CXX in a single write cycle. All
inputs are disabled until completion of the internal WRITE
cycle.

以上的規格說24C01和24C02都是 0x07
雖然我取 0x03也行,但程序要進行換行,運行的時間比0x07長了點

EEPROM_24C01        EQU    0x03        ;4 bytes row structrue
EEPROM_24C01A        EQU    0x07        ;8 bytes row structrue
EEPROM_24C02        EQU    0x07        ;8 bytes row structrue
EEPROM_24C04        EQU    0x0f        ;16 bytes row structrue
EEPROM_24C08        EQU    0x0f        ;16 bytes row structrue
EEPROM_24C16        EQU    0x0f        ;16 bytes row structrue

;=========================================================================================
;                EEPROMWrite
;=========================================================================================
EEPROMWrite:                        
        ldi        zI2CRepeat        ,I2CFAILTIMES&0fh
?DeviceNoStabile:
        ldi        zI2CAck            ,00h    
        sbim        zI2CRepeat        ,01h
        baz        Exit_EEPROMWrite
        andim        SDA_PINCR        ,SDA^0x0f  ;check bus
        andim        SCL_PINCR        ,SCL^0x0f  
        nop                           
        nop
        nop
        lda        SDA_PIN            ,0          
        sta        zI2CAck            ,0          
        andim        zI2CAck            ,SDA    
        baz        ?DeviceIsBusy                ;ready if sda pull high
        lda        SCL_PIN            ,0          
        sta        zI2CAck            ,0          
        andim        zI2CAck            ,SCL
    if SCL_PULL==SCL_PULLUP_TO_VDD
        bnz        ?DeviceIsReady               ;if scl pull high
    else 
        baz        ?DeviceIsReady               ;if scl pull down
    endif    
?DeviceIsBusy:                                 
        call        IICStop
        call        Delay10ms
        jmp        ?DeviceNoStabile
?DeviceIsReady:                                
?EEPROMWriteOneByte:
        call        IICInit
        ;*** clear writeProtect
    //    andim        WP_PIN            ,WP^0x0f   
        call        IICStart                ;start
        orim        zI2CDevAddr        ,DEV_WRITE    ;write device addr
        sta        zI2CByteData+0        ,0
        ldi        zI2CByteData+1        ,DEV_COMMAND        
        call        IICWriteByte                
        baz        $+2
        jmp        ?DeviceIsBusy
        lda        zI2CByteAddr+0        ,0        ;write byte addr
        sta        zI2CByteData+0        ,0
        lda        zI2CByteAddr+1        ,0
        sta        zI2CByteData+1        ,0
        call        IICWriteByte    
        baz        $+2
        jmp        ?DeviceIsBusy
?WriteUserData:        
        lda        zI2CDPL            ,0        ;prt->currentRAM 
        sta        rzDPL            ,0
        lda        zI2CDPM            ,0
        sta        rzDPM            ,0
        lda        zI2CDPH            ,0
        sta        rzDPH            ,0
        lda        rzINX            ,0
        sta        zI2CByteData+0        ,0
        adim        rzDPL            ,01h
        eor        rzDPL            ,0
        adcm        rzDPM            ,0
        lda        rzINX            ,0
        sta        zI2CByteData+1        ,0
        call        IICWriteByte                ;write one byte
        baz        ?successWrite
        jmp        ?DeviceIsBusy
?successWrite:                                ;if success,then
        sbim        zI2CCounter        ,01h        ;counter--        
        baz        ?Finish_WriteEEPROM            ;exit if counter=0
?syncUser:                                
        adim        zI2CDPL            ,0x02        ;nextRAM <- ptr
        eor        zI2CDPL            ,0        
        adcm        zI2CDPM            ,0        
?syncDevice:    
        adim        zI2CByteAddr+0        ,0x01
        eor        zI2CByteAddr+0        ,0
        adcm        zI2CByteAddr+1        ,0
        or        zI2CByteAddr+0        ,0
        baz        ?writeNextPage
        ;shift row meet 24C01 data structrue
        ldi        zWk0            ,EEPROM_24C01    
        and        zI2CByteAddr+0        ,0
        baz        ?writeNextRow
    ?writeCurrentRow:
        jmp        ?WriteUserData    
    ?writeNextPage:
        adim        zI2CDevAddr        ,0x02        
    ?writeNextRow:    
        andim        zI2CDevAddr        ,1110b        
        call        IICStop                    
        call        Delay10ms                ;continue to
        jmp        EEPROMWrite                ;write next page
?Finish_WriteEEPROM:                            
        call        IICStop                    
        call        Delay10ms                
        ldi        zI2CAck            ,01h        ;mark success flag
Exit_EEPROMWrite:                            
        ;*** set writeProtect         
    //    orim        WP_PIN            ,WP            
        lda        zI2CAck            ,0
        rtni                                ;to disable writing

使用特权

评论回复
8
ljtim| | 2007-1-30 11:09 | 只看该作者

不一定

不是每个公司的ic都可以互换,主要是上面那位大哥所说的分页不同

使用特权

评论回复
9
dai_weis| | 2007-1-30 11:24 | 只看该作者

我说的芯片型号是ATMEL公司生产的

分别是:AT24C01/AT24C02,
如果是AT24C01A则和AT24C02页模式相同,如需请提供芯片的生产厂商和具体型号

使用特权

评论回复
10
iammercy|  楼主 | 2007-1-30 11:46 | 只看该作者

是啊,每個公司都不太一樣,終于明白了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

174

帖子

1

粉丝