zfx19890921 发表于 2011-8-17 17:37:50

使用楼主的程序,调试了一下,用的器件是128+24c08,一开始总都不行,后来终于发现,在_24CXXX_ReadByte函数和_24CXXX_WriteByte函数发送地址是多发了一字节。。。希望后人引以为戒~

sunicecream 发表于 2011-9-20 00:06:52

学习一下,顶楼主

cgbabc 发表于 2011-9-20 08:28:08

顶啊

scsdwxj2005 发表于 2011-9-20 09:15:43

标记

chenxiuguo 发表于 2011-9-20 11:46:03

jackielau 九天
你的QQ多少?对于eeprom读和写功能上的实现应该都不是问题,最主要的是怎么保证eeprom读出来和写进去的就是我们想要的结果,比如在电压波动的时候怎么保证数据不会出错,怎么样保证读出来的就是我们写进去的数据,如果出错了怎么办?

wanzhouyang29 发表于 2011-9-22 17:03:13

mark

yishan97 发表于 2011-9-22 22:52:05

呵呵,看大家的回复都很不错,发现自己还要继续啊

hpdell 发表于 2011-9-23 16:35:55

回复81楼,还是不行哦,编译时还是会出现那个警告,不知道何故??????
//地址处理函数,主要处理多芯片时,对于地址的处理
#if DEV_24CXX_MODLE == _24C1024
        #if MAX_ADDR > 0xFFFF        //如果地址大于65535
        void _24CXXX_AddrProcess(unsigned long Addr)
        #else
        void _24CXXX_AddrProcess(unsigned int Addr)
        #endif        //#if MAX_ADDR > 0xFFFF
        {
                if( Addr>( (MEM_SIZE+1)/2-1 ) )        //如果地址大于65535
                {
                        Addr /= (MEM_SIZE+1)/2;
                }
                else
                {
                        Addr = 0x00;
                }

                HardAddr = Addr;
        }
#else
        #if DEV_24CXX_NUM > 1        //如果使用多个芯片
                #if MAX_ADDR > 0xFFFF                //如果地址大于65535
                void _24CXXX_AddrProcess(unsigned long Addr)
                #else
                void _24CXXX_AddrProcess(unsigned int Addr)
                #endif        //#if MAX_ADDR > 0xFFFF
                {
                        if( Addr> MEM_SIZE )        //如果地址大于单芯片地址范围
                        {
                                Addr /= MEM_SIZE+1;
                        }
                        else
                        {
                                Addr = 0x00;
                        }

                        HardAddr = Addr;
                }
//        #elif        DEV_24CXX_NUM == 1   //如果使用单个芯片
        #else
        #if DEV_24CXX_NUM == 1   //如果使用单个芯
                #if MAX_ADDR > 0xFFFF                //如果地址大于65535
                void _24CXXX_AddrProcess(unsigned long Addr)
                #else
                void _24CXXX_AddrProcess(unsigned int Addr)
                #endif        //#if MAX_ADDR > 0xFFFF
                {
                        HardAddr = 0x00;
                }
        #endif        //#if DEV_24CXX_NUM > 1
#endif        //#if DEV_24CXX_MODLE==_24C1024
#endif

416446891 发表于 2011-9-23 16:38:35

MARK

ljmdzyx 发表于 2011-10-12 00:32:42

标记

tangwubing1988 发表于 2011-12-11 14:12:06

MARK

yanzaihong 发表于 2011-12-11 16:01:02

标记 !支持!

cczt 发表于 2011-12-11 16:17:07

好程序。

fengle 发表于 2011-12-25 18:01:42

谢谢楼主,刚转学avr,需要通过iic接口读取一个陀螺仪的数据,收藏了。

YAOZHE 发表于 2012-5-13 15:31:12

好贴啊!

xwkm 发表于 2012-6-26 08:37:14

能重发下吗。楼主。下不到了……

jackielau 发表于 2012-6-26 14:32:19

zfx19890921 发表于 2011-8-17 17:37 static/image/common/back.gif
使用楼主的程序,调试了一下,用的器件是128+24c08,一开始总都不行,后来终于发现,在_24CXXX_ReadByte函 ...

考虑不周,24c08一下的芯片只需要一个字节的地址!
我实验的都是比较大的!

谢谢,提出意见!

guer 发表于 2012-6-26 17:39:21

正需要用,楼主能再发一次吗?

holyfire 发表于 2012-7-20 11:19:16

刚要学这个 谢了

choovin 发表于 2012-7-20 13:52:33

谢谢分享      

jackmo 发表于 2012-7-31 16:21:22

记号,,,,,,,,,,

slayer_ni 发表于 2012-12-1 23:59:52

mark~谢谢~

manhere 发表于 2012-12-2 00:13:05

楼主能上一个支持25系列 OTP区烧写的程序么。。。

ysu_er 发表于 2012-12-2 08:21:18

记住了,有空看看

xuqiyang126126 发表于 2013-5-20 11:50:42

xie谢谢谢谢谢谢

zhexuejia 发表于 2013-5-20 15:37:20

不错 ;学习了

cd4000 发表于 2013-5-20 15:45:24

好贴子,感谢楼主!

sqqdjian 发表于 2013-5-28 08:27:01

Mark                  

long609689209 发表于 2013-6-4 15:58:28

最近在学习I2C感觉有点难。

爱情转移 发表于 2013-8-27 11:05:31

是硬件IIC还是模拟的?

xieguangye 发表于 2013-8-27 11:39:17

mark 准备使用到项目中

蓝蓝的恋 发表于 2014-4-3 15:03:06

{:smile:}测试一下~

sunandrew 发表于 2014-4-3 17:12:25

顶一个{:smile:}

jsntzxh 发表于 2014-4-3 18:40:52

收藏…………

tangcangeng 发表于 2014-4-11 12:29:54

不错不错果然强

radar_12345 发表于 2014-5-4 14:48:44

感谢楼主,好帖!Make

mojiaj 发表于 2014-8-25 15:00:56

非常感谢

carbonxie 发表于 2014-10-6 21:04:09

这样说24C01到24C1024,的地址都是16位的?
我现在用AT24C08,要是读写8位地址时,可以正读写0~19地址数据,
要是读写16位地址时,写入去的数据和读出来的数据不一样!
你有测试过24C01到24C08吗?

lawuweijin 发表于 2014-10-6 22:20:21

不是很懂,纯顶。

carbonxie 发表于 2014-10-7 08:46:11

zfx19890921 发表于 2011-8-17 17:37
使用楼主的程序,调试了一下,用的器件是128+24c08,一开始总都不行,后来终于发现,在_24CXXX_ReadByte函 ...

请问:AT24C08是8K的空间,也就是1K BYTE,哪也就是地址有1024=0x03FF。要是只写8位地十,也就是只可以用256个BYTE?你怎样能用完这1K的空间呢?

nongsan 发表于 2014-10-7 10:04:58

好东西,谢谢分享

aquarius0703 发表于 2014-10-7 11:37:17

mark                     

rabbit512 发表于 2014-10-7 11:58:42

感谢,多多收着

rabbit512 发表于 2014-10-7 11:59:00

谢谢了,收着

carbonxie 发表于 2014-10-9 12:36:03

carbonxie 发表于 2014-10-7 08:46
请问:AT24C08是8K的空间,也就是1K BYTE,哪也就是地址有1024=0x03FF。要是只写8位地十,也就是只可以用 ...

不单单读有问题,写也有问题...这些问题我都解决了!谢谢!没有用上比24C28更大的MCU!
楼上有人说:24C08是16位地址,这句话是错的,准确说是10位地址!
对你的程式,只想说,没有说明细节问题,比如每个STOP后再开始的话,哪么就是有10ms才可以再START...还有你的连续写函数,只
能一次写16个BYTE,并且首地址只可以是if(0==addr%16)成立下才可以用...
要是说得不对的地方,请指点...谢谢!

hongguan 发表于 2017-7-6 19:39:06

谢谢楼主,收藏了!!!

MyOS 发表于 2017-7-8 09:21:17

还是喜欢单个地址的读写,主从都不受限。

ilan2003 发表于 2017-7-8 09:24:55

kanprin 发表于 2009-7-8 23:26
感觉24C有个不是很爽的地方。
同一个系列,dataAddress有些是byte,有些是word。
搞的一个程序接口无法兼容 ...



安富莱开发板写的代码,挺好用。只需要配置,解决你的烦恼

mdcao 发表于 2018-4-8 20:19:39

ilan2003 发表于 2017-7-8 09:24
安富莱开发板写的代码,挺好用。只需要配置,解决你的烦恼

正好用到下载看看,谢谢

ilan2003 发表于 2018-4-9 18:20:39

安富莱的程序写的挺好的

pengtaoABC 发表于 2018-4-9 19:59:42


好帖子,楼主的探究精神值得学习
页: 1 [2]
查看完整版本: 通用24CXXX读写程序(GCC),兼容24C系列存储器(24C01到24C1024),支持跨器件跨页读写,支持连续