i2c24LC128Eeprom.c
上传用户:dqzhongke1
上传日期:2022-06-26
资源大小:667k
文件大小:6k
源码类别:

VxWorks

开发平台:

C/C++

  1. /*
  2.  * $Id: i2c24LC128Eeprom.c,v 1.7 Broadcom SDK $
  3.  * $Copyright: Copyright 2008 Broadcom Corporation.
  4.  * This program is the proprietary software of Broadcom Corporation
  5.  * and/or its licensors, and may only be used, duplicated, modified
  6.  * or distributed pursuant to the terms and conditions of a separate,
  7.  * written license agreement executed between you and Broadcom
  8.  * (an "Authorized License").  Except as set forth in an Authorized
  9.  * License, Broadcom grants no license (express or implied), right
  10.  * to use, or waiver of any kind with respect to the Software, and
  11.  * Broadcom expressly reserves all rights in and to the Software
  12.  * and all intellectual property rights therein.  IF YOU HAVE
  13.  * NO AUTHORIZED LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE
  14.  * IN ANY WAY, AND SHOULD IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE
  15.  * ALL USE OF THE SOFTWARE.  
  16.  *  
  17.  * Except as expressly set forth in the Authorized License,
  18.  *  
  19.  * 1.     This program, including its structure, sequence and organization,
  20.  * constitutes the valuable trade secrets of Broadcom, and you shall use
  21.  * all reasonable efforts to protect the confidentiality thereof,
  22.  * and to use this information only in connection with your use of
  23.  * Broadcom integrated circuit products.
  24.  *  
  25.  * 2.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS
  26.  * PROVIDED "AS IS" AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES,
  27.  * REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY,
  28.  * OR OTHERWISE, WITH RESPECT TO THE SOFTWARE.  BROADCOM SPECIFICALLY
  29.  * DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OF TITLE, MERCHANTABILITY,
  30.  * NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF VIRUSES,
  31.  * ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
  32.  * CORRESPONDENCE TO DESCRIPTION. YOU ASSUME THE ENTIRE RISK ARISING
  33.  * OUT OF USE OR PERFORMANCE OF THE SOFTWARE.
  34.  * 
  35.  * 3.     TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL
  36.  * BROADCOM OR ITS LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL,
  37.  * INCIDENTAL, SPECIAL, INDIRECT, OR EXEMPLARY DAMAGES WHATSOEVER
  38.  * ARISING OUT OF OR IN ANY WAY RELATING TO YOUR USE OF OR INABILITY
  39.  * TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN ADVISED OF THE
  40.  * POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS OF
  41.  * THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR U.S. $1,
  42.  * WHICHEVER IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING
  43.  * ANY FAILURE OF ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.$
  44.  */
  45. /* i2c24LC128Eeprom.c - EEPROM NVRAM routines */
  46. /* includes */
  47. #include <vxWorks.h>            /* vxWorks generics */
  48. #include "config.h"
  49. #include "sysMotI2c.h"
  50. #include "i2c24LC128Eeprom.h"
  51. /* defines */
  52. /* globals */
  53. /* locals */
  54. /* forward declarations */
  55. /* externals */
  56. /***************************************************************************
  57. *
  58. * eepromReadByte - read one byte of non-volatile RAM
  59. *
  60. * This routine reads one byte of non-volatile RAM.
  61. *
  62. * RETURNS: One byte of data.
  63. *
  64. * ERRNO
  65. *
  66. * SEE ALSO: eepromWriteByte()
  67. */
  68. UINT8 eepromReadByte
  69.     (
  70.     int offset
  71.     )
  72.     {
  73.     UINT8 buffer;
  74.     buffer = 0;
  75.     i2cRead(EEPROM_24LC128_SMBUS_CHAN, 
  76.             EEPROM_24LC128_CCR_ADDRESS, 
  77.             I2C_DEVICE_TYPE_EEPROM_24LC128,
  78.             offset, 1, &buffer);
  79.     return buffer;
  80.     }
  81. /***************************************************************************
  82. *
  83. * eepromWriteByte - write one byte to non-volatile RAM
  84. *
  85. * This routine writes one byte of data to non-volatile RAM.
  86. *
  87. * RETURNS: OK or ERROR if write fails
  88. *
  89. * ERRNO
  90. *
  91. * SEE ALSO: eepromReadByte(), eepromUnlock(), eepromLock()
  92. */
  93. STATUS eepromWriteByte
  94.     (
  95.     int   offset,
  96.     UINT8 data
  97.     )
  98.     {
  99.     UINT8 buffer;
  100.     int   status;
  101.     buffer = 0;
  102.     i2cWrite(EEPROM_24LC128_SMBUS_CHAN, 
  103.             EEPROM_24LC128_CCR_ADDRESS, 
  104.              I2C_DEVICE_TYPE_EEPROM_24LC128,
  105.              offset, 1, &data);
  106.     status = i2cRead(1, I2C_DEVICE_TYPE_EEPROM_24LC128, 
  107.                      I2C_DEVICE_TYPE_EEPROM_24LC128,
  108.                      offset, 1, &buffer);
  109.     if ( status != OK || buffer != data )
  110.         {
  111.         return (ERROR);
  112.         }
  113.     return (OK);
  114.     }
  115. /***************************************************************************
  116. *
  117. * eepromUnlock - Unlock the eeprom via the software protection mechanism
  118. *
  119. * Software unlock mechanism is not supported in Microchip 24LC128 EEPROM
  120. *
  121. * RETURNS: N/A
  122. *
  123. * SEE ALSO: eepromReadByte(), eepromWriteByte(), eepromLock()
  124. *
  125. */
  126. void eepromUnlock (void)
  127.     {
  128.     return ;
  129.     }
  130. /***************************************************************************
  131. *
  132. * eepromLock - Lock the eeprom via the software protection mechanism
  133. *
  134. * Software lock mechanism is not supported in Microchip 24LC128 EEPROM
  135. *
  136. * RETURNS: N/A
  137. *
  138. * SEE ALSO: eepromReadByte(), eepromWriteByte(), eepromUnlock()
  139. *
  140. */
  141. void eepromLock (void)
  142.     {
  143.     return ;
  144.     }
  145. #define INCLUDE_I2C_DEBUG
  146. #ifdef INCLUDE_I2C_DEBUG
  147. void eeprom_mac_set(int index, UINT8 mac3, UINT8 mac4, UINT8 mac5) {
  148.     int mac_offset;
  149.     mac_offset = NV_MAC_ADRS_OFFSET + (index * 8);
  150.     eepromWriteByte(mac_offset, 0xff);
  151.     eepromWriteByte(mac_offset + 1, 0xff);
  152.     eepromWriteByte(mac_offset + 2, 0xff);
  153.     eepromWriteByte(mac_offset + 3, mac3);
  154.     eepromWriteByte(mac_offset + 4, mac4);
  155.     eepromWriteByte(mac_offset + 5, mac5);
  156. }
  157. void eeprom_mac_show(int index) {
  158.     int mac0, mac1, mac2, mac3, mac4, mac5;
  159.     int mac_offset;
  160.     mac_offset = NV_MAC_ADRS_OFFSET + (index * 8);
  161.     mac0 = eepromReadByte(mac_offset);
  162.     mac1 = eepromReadByte(mac_offset + 1);
  163.     mac2 = eepromReadByte(mac_offset + 2);
  164.     mac3 = eepromReadByte(mac_offset + 3);
  165.     mac4 = eepromReadByte(mac_offset + 4);
  166.     mac5 = eepromReadByte(mac_offset + 5);
  167.     printf ("MAC address = %02x:%02x:%02x:%02x:%02x:%02xn",
  168.             mac0, mac1, mac2, mac3, mac4, mac5);
  169. }
  170. #endif