本文是在STM8L15x系列的芯片上,使用软件模拟的I2C来实现对24LC16B进行操作的函数库。
头文件定义:
#ifndef _24LC16B_H
#define _24LC16B_H
#include "Hal_I2CSoft.h"
#define MAXROM_24LC16B (2048)
extern void Hal24LC16BInit(I2CSoftConfig_t* i2cCfg);
extern u8 Hal24LC16B_ReadByte(u16 addr);
extern void Hal24LC16B_WriteByte(u16 addr, u8 data);
extern void Hal24LC16B_ReadBuf(u16 addr, u8 *buf, u16 len);
extern void Hal24LC16B_WriteBuf(u16 addr, u8 *buf, u16 len);
extern void Hal24L68B_WritePage(u16 addr, u8 *buf);
#endif
具体操作函数:
/**
******************************************************************************
* @f文件 24LC16B.c
* @作者 huangqi
* @版本 V1.0.0
* @日期 2014-12-20
* @描述 Microchip 的24LC16B的操作函数库
******************************************************************************
*/
#include "Hal_I2CSoft.h"
#include "24LC16B.h"
I2CSoftConfig_t *i2cCfg;
/*****************************************************************************
* @函数名 Hal24LC16BInit
*
* @功能 初始化24LC16B
*
* @参数 i2cCfg: I2CSoft端口信息
*
* @返回值 无
*****************************************************************************/
void Hal24LC16BInit(I2CSoftConfig_t* i2cPortConfig)
{
i2cCfg = i2cPortConfig;
I2CSoft_Init(i2cCfg);
}
/*****************************************************************************
* @函数名 Hal24LC16B_ReadByte
*
* @功能 向24LC16B读一个字节
*
* @参数 addr: 地址
*
* @返回值 读出的字节
*****************************************************************************/
u8 Hal24LC16B_ReadByte(u16 addr)
{
u8 tmp = 0;
do
{
I2CSoft_Start(i2cCfg);
I2CSoft_SendByte(i2cCfg, 0xA0+((addr/256)<<1));//写命令
}
while(I2CSoft_WaitAck(i2cCfg));
I2CSoft_SendByte(i2cCfg, addr%256);
I2CSoft_WaitAck(i2cCfg);
I2CSoft_Start(i2cCfg);
I2CSoft_SendByte(i2cCfg, 0xA0+((addr/256)<<1)+1);//写命令
I2CSoft_WaitAck(i2cCfg);
tmp = I2CSoft_RecvByte(i2cCfg,0);
I2CSoft_Stop(i2cCfg);
return tmp;
}
/***********************************************************