extEEPROM, 支持外部I2C迭代的Arduino库

分享于 

11分钟阅读

GitHub

  繁體 雙語
Arduino library to support external I2C EEPROMs, 32kB and 256kB.
  • 源代码名称:extEEPROM
  • 源代码网址:http://www.github.com/JChristensen/extEEPROM
  • extEEPROM源代码文档
  • extEEPROM源代码下载
  • Git URL:
    git://www.github.com/JChristensen/extEEPROM.git
    Git Clone代码到本地:
    git clone http://www.github.com/JChristensen/extEEPROM
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/JChristensen/extEEPROM
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    外部EEPROM库 v3

    http://github.com/JChristensen/extEEPROM 自述文件
    杰克。Christensen 2014年月

    CC BY-SA

    简介

    外部EEPROM库

    库将在 2k 位和 2048k 位( 2m 位) 之间使用大多数I2C串行EEPROM芯片。 总线上的多个goroutine作为单个地址空间支持。 支持跨块,页面和设备边界的I/O。 关于EEPROM器件寻址的一些假设。 这些假设对于大多数迭代应该是 true,但存在例外,所以阅读数据表并了解你的硬件。

    库还应为小于 2k 位的for工作,假设总线上只有一个 EEPROM,用户小心不要超过EEPROM的最大地址。

    extEEPROM库已经测试过:

    • 芯片 24 AA02E48 ( 2k位)
    • 24xx32 ( 32k位,感谢 Richard M )
    • 芯片 24 LC256 ( 256k位)
    • 芯片 24 FC1026 ( 1M位,感谢Arduino论坛上的Gabriele B )
    • ST微 M24M02 ( 2M位)

    对于 Microchip Microchip extEEPROM库 will work工作,因为它的控件字节不符合以下假设。

    设备寻址假设:

    • I2C地址序列由一个由一个地址字节( for <= 16k 位) 或者两个地址字节( EEPROMs> 16k 位) 组成的控制字节组成。
    • 控制字节( 不包括 R/w 位) 中最重要的三位构成了整个地址空间的三个最重要的位,换句话说,上的所有芯片。 因这里,这些可以能是芯片选择位或者块选择位( 对于具有内部块组织的单个芯片),或者两个( 在这种情况下,块选择位必须比芯片选择位具有更小的意义)的组合。
    • 无论解决整个地址空间所需的位数,最大的三个位总是位于控制字节中。 这可能会导致( 或者或或者"地址字节中的一个或者多个非常重要的位,这取决于EEPROM设备的大小( 不使用)。
    • EEPROM包含一个完整的页面数。

    请注意,Arduino库的缓冲区大小为 32字节。 这限制了EEPROM的物理i/o的大小。 对于写入,用于地址的一个或者两个字节,因这里写入限制为 31或者 30字节。 如果用户可以使用 extEEPROM,则可以将它的设置为指定的数据块大小。但是,对于用户而言,可以使用任意大小的数据块来进行操作。

    "External外部EEPROM库"由 CC在CC下授权。

    安装

    要使用的库:

    示例

    以下示例草图包含在 extEEPROM库中:

    • eepromTest: 将 32位 整数写入整个EEPROM地址空间,从地址 0开始,并继续到最上面的地址。 然后读取并验证这些数据;任何差异都报告给串行监视器。

    用法说明

    extEEPROM库 is用于Arduino版本 1.0或者更高版本。

    要使用收费的extEEPROM库,还必须包括标准的线库。 例如下面的示例中不重复这里操作:

    #include<Wire.h>//http://arduino.cc/en/Reference/Wire (included with Arduino IDE)

    枚举

    ###eeprom_size_t #####Description EEPROM器件大小为k 位。 许多制造商的eeprom部件号被指定为k 位。 #####Values

    • kbits_2
    • kbits_4
    • kbits_8
    • kbits_16
    • kbits_32
    • kbits_64
    • kbits_128
    • kbits_256
    • kbits_512
    • kbits_1024
    • kbits_2048

    ###twiClockFreq_t #####Description I2C总线速度。 #####Values

    • extEEPROM::twiClock100kHz
    • extEEPROM::twiClock400kHz

    构造函数

    ###extEEPROM(eeprom_size_t devCap,字节 nDev,无符号 int pgSize,字节 busAddr ) #####Description 实例化外部EEPROM对象。 #####Syntax extEEPROM myEEPROM(eeprom_size_t devCap, byte nDev, unsigned int pgSize, byte busAddr)); #####Parameters devCap ( eeprom_size_t ): 一个EEPROM器件的大小( 以字节为单位)。 从上面的eeprom_size_t枚举中选择一个值。
    nDev ( 字节): 总线上的EEPROM设备数。 请注意,如果总线上有多个EEPROM设备,它们必须相同,而且每一个必须有它的地址针。
    pgSize ( 无符号整型): EEPROM页大小以字节为单位。 如果你不确定页面大小,请查阅数据表。
    busAddr ( 字节): 用于 EEPROM(s)的基本I2C总线地址。 0 x50是一个公共值,可以省略此参数,在这种情况下,0 x50将用作默认值。
    #####Example

    extEEPROM myEEPROM(kbits_256, 2, 64); //two 24LC256 EEPROMS on the busextEEPROM oddEEPROM(kbits_8, 1, 16, 0x42); //an EEPROM with a non-standard I2C address

    方法

    ###begin(twiClockFreq_t freq ) #####Description 初始化库。 在设置代码中调用这里方法一次。 为了确保EEPROM的正常运行,begin() 做了一个虚拟的I/O,以便用户可以查询返回状态。 #####Syntax myEEPROM.begin(twiClockFreq_t freq); #####Parameters 频率 : 所需的I2C总线速度,extEEPROM::twiClock100kHz 或者 extEEPROM::twiClock400kHz。 在这种情况下,它将默认为 twiClock100kHz。 注意:当总线上有其他设备时,如果总线上有其他设备,它们必须全部支持一个 400kHz 总线速度。 如果其他设备可能不支持调整总线速度,则其他设备应该首先初始化。 为了确保期望的速度设置,在初始化所有其他的I2C设备后调用 extEEPROM.begin() 函数 。 #####Returns I2C I/O 状态,如果成功,则为零,否则为。 有关其他返回代码的描述,请参阅 Arduino Wire.endTransmission() 函数。 #####Example

    extEEPROM myEEPROM(kbits_256, 2, 64);
    byte i2cStat = myEEPROM.begin(extEEPROM::twiClock400kHz);if ( i2cStat!= 0 ) {
     //there was a problem}

    字节长度为 ###write(unsigned的长地址,字节值,无符号 int ) #####Description 写入一个或者多个字节到外部 EEPROM。 #####Syntax myEEPROM.write(unsigned long addr, byte* values, byte nBytes); #####Parameters 地址为 ( 无符号长): 要写入的起始EEPROM位置。
    _ ( 字节数组) _: 指向包含要写入的数据的array的指针。
    nBytes ( 无符号整型): 要写入的字节数。
    #####Returns I2C I/O 状态,如果成功,则为零,否则为。 有关其他返回代码的描述,请参阅 Arduino Wire.endTransmission() 函数。 如果 I/O 将超出EEPROM地址空间的顶部,则返回EEPROM_ADDR_ERR的状态。 #####Example

    byte myData[10];//write 10 bytes starting at location 42byte i2cStat = myEEPROM.write(42, &data, 10);if ( i2cStat!= 0 ) {
     //there was a problemif ( i2cStat == EEPROM_ADDR_ERR) {
     //bad address }
     else {
     //some other I2C error }
    }

    ###write(unsigned long addr,字节值) #####Description 将单个字节写入外部 EEPROM。 #####Syntax myEEPROM.write(unsigned long addr, byte value); #####Parameters 地址为 ( 无符号长): 要写入的EEPROM位置。
    ( 字节): 要写入的值。
    #####Returns 与上面的多个字节 write() 相同。 #####Example

    //write the value 16 to EEPROM location 314.byte i2cStat = myEEPROM.write(314, 16);

    ###read(unsigned 长地址,字节值,无符号 int nBytes ) #####Description 从外部EEPROM读取一个或者多个字节到由调用者提供的array。 #####Syntax myEEPROM.read(unsigned long addr, byte *values, byte nBytes); #####Parameters 地址为 ( 无符号长): 要读取的起始EEPROM位置。
    _ ( 字节数组) _: 指向 array 以接收数据的指针。
    nBytes ( 无符号整型): 要读取的字节数。
    #####Returns I2C I/O 状态,如果成功,则为零,否则为。 有关其他返回代码的描述,请参阅 Arduino Wire.endTransmission() 函数。 如果 I/O 将超出EEPROM地址空间的顶部,则返回EEPROM_ADDR_ERR的状态。 #####Example

    byte myData[10];//read 10 bytes starting at location 42byte i2cStat = myEEPROM.read(42, &data, 10);if ( i2cStat!= 0 ) {
     //there was a problemif ( i2cStat == EEPROM_ADDR_ERR) {
     //bad address }
     else {
     //some other I2C error }
    }

    ###read(unsigned long addr ) #####Description 从外部EEPROM读取单个字节。 #####Syntax myEEPROM.read(unsigned long addr); #####Parameters 地址 ( 无符号长): 要读取的EEPROM位置。 #####Returns 读取从EEPROM读取的数据或者错误代码 ( int )。 若要区分错误值和有效数据,错误值将作为负数返回。 有关返回代码的描述,请参阅 Arduino Wire.endTransmission() 函数。 如果 I/O 将超出EEPROM地址空间的顶部,则返回EEPROM_ADDR_ERR的状态。

    #####Example

    int myData;//read a byte from location 42int readValue = myEEPROM.read(42);if ( readValue <0 ) {
     //there was a problemif ( -readValue == EEPROM_ADDR_ERR) {
     //bad address }
     else {
     //some other I2C error }
    }else {
     //data read ok}

    ext  SUP  Arduino  Extern  External  I2C  
    相关文章