BL55077 驱动程序

//C文件
#include “BL55077.h”
#include “GPIO.h”

/*******************************************************************************

  • 初始化 BL55077 的SDA,SCL
    ******************************************************************************/
    void BL55077_GPIO_Init(void)
    {
    stc_gpio_cfg_t stcGpioCfg;

    ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
    stcGpioCfg.enDir = GpioDirOut;
    ///< 端口上下拉配置->上拉
    stcGpioCfg.enPu = GpioPuEnable;
    stcGpioCfg.enPd = GpioPdDisable;
    //开漏输出
    stcGpioCfg.enOD = GpioOdEnable;
    ///<SCL H
    Gpio_WriteOutputIO(GpioPort3, GpioPin3, TRUE);
    //配置 SCL
    Gpio_Init(GpioPort3, GpioPin3, &stcGpioCfg);
    ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
    stcGpioCfg.enDir = GpioDirOut;
    ///< 端口上下拉配置->下拉
    stcGpioCfg.enPu = GpioPuEnable;
    stcGpioCfg.enPd = GpioPdDisable;
    //开漏输出
    stcGpioCfg.enOD = GpioOdEnable;
    ///<SDA H
    Gpio_WriteOutputIO(GpioPort3, GpioPin2, TRUE);
    //配置 SDA
    Gpio_Init(GpioPort3, GpioPin2, &stcGpioCfg);
    }

/*****************************************************************************

  • @name :void BL55077_Start(void)
  • @date :2021-11-13
  • @function :start BL55077_IIC bus
  • @parameters :None
  • @retvalue :None
    ******************************************************************************/
    void BL55077_Start(void)
    {
    BL55077_SDA_OUT();
    BL55077_SCL_SET();
    delay10us(2);
    BL55077_SDA_SET();
    delay10us(2);
    BL55077_SDA_CLR();
    delay10us(2);
    BL55077_SCL_CLR();
    delay10us(2);
    }

/*****************************************************************************

  • @name :void BL55077_Stop(void)
  • @date :2021-11-13
  • @function :stop BL55077_IIC bus
  • @parameters :None
  • @retvalue :None
    ******************************************************************************/
    void BL55077_Stop(void)
    {
    BL55077_SDA_OUT();
    BL55077_SCL_CLR();
    delay10us(2);
    BL55077_SDA_CLR();
    delay10us(2);
    BL55077_SCL_SET();
    delay10us(2);
    BL55077_SDA_SET();
    delay10us(2);
    }

/*****************************************************************************

  • @name :void BL55077_Wait_Ack(void)
  • @date :2021-11-13
  • @function :wait BL55077_IIC ack
  • @parameters :None
  • @retvalue :TRUE OR FALSE
    ******************************************************************************/
    boolean_t BL55077_Wait_Ack(void)
    {
    uint16_t waitack;
    BL55077_SDA_IN();
    BL55077_SCL_SET();
    waitack = 255;
    while(waitack)
    {
    if(BL55077_SDA_READ==0)
    {
    BL55077_SCL_CLR();
    return TRUE;
    }
    waitack–;
    }
    BL55077_Stop();
    return FALSE;
    }

/*****************************************************************************

  • @name :void Write_BL55077_Byte(uint8_t BL55077_Byte)
  • @date :2021-11-13
  • @function :Write a byte of content with BL55077_IIC bus
  • @parameters :BL55077_Byte
  • @retvalue :None
    ******************************************************************************/
    boolean_t Write_BL55077_Byte(uint8_t BL55077_Byte)
    {
    uint8_t i;
    BL55077_SDA_OUT();
    BL55077_SCL_CLR();
    for(i=0;i<8;i++)
    {
    if(BL55077_Byte&0x80)
    {
    BL55077_SDA_SET();
    }
    else
    {
    BL55077_SDA_CLR();
    }
    BL55077_Byte<<=1;
    BL55077_SCL_SET();
    delay10us(2);
    BL55077_SCL_CLR();
    delay10us(2);
    }
    return BL55077_Wait_Ack();
    }

/*****************************************************************************

  • @name :uint8_t BL55077_SCAN_SalveAddr(void)
  • @date :2021-11-13
  • @function :扫描BL55077的从机地址
  • @parameters :None
  • @retvalue :TRUE OR FALSE
    ******************************************************************************/

uint8_t BL55077_SCAN_SalveAddr(void)
{
uint8_t salveaddr;
uint8_t buff;

for(salveaddr=0;salveaddr<254;salveaddr+=2)
{
	buff = salveaddr;
	BL55077_Start();	
	if(Write_BL55077_Byte(buff))
	{
		BL55077_SDA_OUT();
		BL55077_Stop();
		return salveaddr;
	}
	BL55077_SDA_OUT();
	BL55077_Stop();
}
return 0xFF;

}

/*****************************************************************************

  • @name :void BL55077_Init(void)
  • @date :2021-11-13
  • @function :初始化BL55077
  • @parameters None
  • @retvalue :None
    ******************************************************************************/
    void BL55077_Init(void)
    {
    uint8_t i;
    boolean_t result;
    BL55077_Start();
    result = Write_BL55077_Byte(BL55077_SLAVE_ADDR);//0x70
    result = Write_BL55077_Byte(0xE8); // 睡眠控制,关睡眠
    result = Write_BL55077_Byte(0xCE); // 方式设定
    result = Write_BL55077_Byte(0xF0); // 闪烁控制
    // result = Write_BL55077_Byte(0xF0); // BANK选择
    result = Write_BL55077_Byte(0xE0); // 器件选择
    result = Write_BL55077_Byte(0x00); // 数据指针
    for(i=0;i<10;i++)
    {
    result = Write_BL55077_Byte(0x00);
    }
    BL55077_Stop();

}

/*****************************************************************************

  • @name :void BL55077_DISPLAY1(void)
  • @date :2021-11-13
  • @function :显示图片1
  • @parameters None
  • @retvalue :None
    ******************************************************************************/
    void BL55077_DISPLAY1(void)
    {
    uint8_t i;
    boolean_t result;
    BL55077_Start();
    result = Write_BL55077_Byte(BL55077_SLAVE_ADDR);//0x70
    result = Write_BL55077_Byte(0xE8); // 睡眠控制,关睡眠
    result = Write_BL55077_Byte(0xCE); // 方式设定
    result = Write_BL55077_Byte(0xF0); // 闪烁控制
    // result = Write_BL55077_Byte(0xF0); // BANK选择
    result = Write_BL55077_Byte(0xE0); // 器件选择
    result = Write_BL55077_Byte(0x00); // 数据指针
    for(i=0;i<10;i++)
    {
    result = Write_BL55077_Byte(0x0F);
    }
    BL55077_Stop();
    }

/*****************************************************************************

  • @name :void BL55077_DISPLAY2(void)
  • @date :2021-11-13
  • @function :显示图片2
  • @parameters None
  • @retvalue :None
    ******************************************************************************/
    void BL55077_DISPLAY2(void)
    {
    uint8_t i;
    boolean_t result;
    BL55077_Start();
    result = Write_BL55077_Byte(BL55077_SLAVE_ADDR);//0x70
    result = Write_BL55077_Byte(0xE8); // 睡眠控制,关睡眠
    result = Write_BL55077_Byte(0xCE); // 方式设定
    result = Write_BL55077_Byte(0xF0); // 闪烁控制
    // result = Write_BL55077_Byte(0xF0); // BANK选择
    result = Write_BL55077_Byte(0xE0); // 器件选择
    result = Write_BL55077_Byte(0x00); // 数据指针
    for(i=0;i<10;i++)
    {
    result = Write_BL55077_Byte(0xF0);
    }
    BL55077_Stop();
    }

/*****************************************************************************

  • @name :void BL55077_DISPLAY3(void)
  • @date :2021-11-13
  • @function :显示图片全部
  • @parameters None
  • @retvalue :None
    ******************************************************************************/
    void BL55077_DISPLAY_ALL(void)
    {
    uint8_t i;
    boolean_t result;
    BL55077_Start();
    result = Write_BL55077_Byte(BL55077_SLAVE_ADDR);//0x70
    result = Write_BL55077_Byte(0xE8); // 睡眠控制,关睡眠
    result = Write_BL55077_Byte(0xCE); // 方式设定
    result = Write_BL55077_Byte(0xF0); // 闪烁控制
    // result = Write_BL55077_Byte(0xF0); // BANK选择
    result = Write_BL55077_Byte(0xE0); // 器件选择
    result = Write_BL55077_Byte(0x00); // 数据指针
    for(i=0;i<10;i++)
    {
    result = Write_BL55077_Byte(0xFF);
    }
    BL55077_Stop();
    }

// .h 头文件
#ifndef BL55077_H
#define BL55077_H
#include “ddl.h”

//定义IIC从设备地址
#define BL55077_SLAVE_ADDR 0x70

//--------------IIC总线引脚定义-----------------------
#define BL55077_SDA GPIO_Pin_32 //BL55077屏IIC数据信号
#define BL55077_SCL GPIO_Pin_33 //BL55077屏IIC时钟信号

//--------------IIC端口操作定义---------------------
#define BL55077_SDA_SET() M0P_GPIO->P3OUT_f.P32 = 1
#define BL55077_SDA_CLR() M0P_GPIO->P3OUT_f.P32 = 0

#define BL55077_SCL_SET() M0P_GPIO->P3OUT_f.P33 = 1
#define BL55077_SCL_CLR() M0P_GPIO->P3OUT_f.P33 = 0

#define BL55077_SDA_IN() M0P_GPIO->P3DIR_f.P32 = 1
#define BL55077_SDA_OUT() M0P_GPIO->P3DIR_f.P32 = 0
#define BL55077_SDA_READ M0P_GPIO->P3IN_f.P32

//IIC操作函数
void IIC_Start(void);
void IIC_Stop(void);
void IIC_Wait_Ack(void);
boolean_t Write_BL55077_Byte(uint8_t IIC_Byte);
void Write_BL55077_Command(uint8_t IIC_Command);
void Write_BL55077_Data(uint8_t IIC_Data);
void Write_BL55077_nData(uint8_t* IIC_Data,uint16_t Lenth);
void BL55077_GPIO_Init(void);
void BL55077_Init(void);
uint8_t BL55077_SCAN_SalveAddr(void);

void BL55077_DISPLAY1(void);
void BL55077_DISPLAY2(void);
void BL55077_DISPLAY_ALL(void);

#endif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: BL24C512是一款串行EEPROM存储器芯片,通常用于工业自动化、汽车电子、智能家居等领域。为了使计算机能够读写BL24C512芯片,需要使用EEPROM驱动程序。EEPROM驱动程序一般由操作系统提供,它负责与硬件接口通信,将计算机中的数据读写到芯片中。 在编写BL24C512 EEPROM驱动程序时,需要遵循一定的规范和流程。首先要通过数据手册了解芯片的规格和特性,确定读写操作的序列和时序。其次,需要使用合适的编程语言,如C语言,编写驱动程序代码。在编写驱动程序时,需要注意使用正确的寄存器操作和位操作,确保读写操作的正确性和稳定性。此外,还需要考虑驱动程序与操作系统接口的兼容性,确保驱动程序能够与特定版本的操作系统协同工作。 最后,还需要测试EEPROM驱动程序的稳定性和性能。通过测试能够发现程序中可能存在的问题,及时进行调整和优化。在开发完成后,还需要对程序进行维护和更新,以适应不断发展的硬件和操作系统环境。总之,编写BL24C512 EEPROM驱动程序需要耐心和细心,只有在不断实践和总结中才能不断提高驱动程序的质量和效率。 ### 回答2: BL24C512是一种串行EEPROM芯片,由BLX IC Design Corp.制造。EEPROM是一种可重复编程的电子存储器,可以在不损坏存储器的情况下修改数据。 BL24C512 EEPROM驱动程序是一个软件模块,用于与BL24C512 EEPROM芯片进行通信,并实现对EEPROM中存储的数据的读写操作。驱动程序控制收发数据的协议和通信接口,以读取和写入EEPROM芯片的数据。 BL24C512 EEPROM驱动程序的开发需要熟悉该芯片的规范和数据手册。该驱动程序应该能够使用通用串行总线(SPI)协议与芯片进行通信,并实现对EEPROM中512K字节数据的读取和写入。 驱动程序应该包括适当的错误处理和故障排除功能,以确保EEPROM数据的完整性和安全性。此外,驱动程序的开发应该考虑到EEPROM读写操作的效率和速度,以改善系统的性能。 总之,BL24C512 EEPROM驱动程序可以实现硬件和软件之间的通信,并对EEPROM芯片进行正确,高效,安全的数据操作,为系统的可靠性和性能做出贡献。 ### 回答3: BL24C512 EEPROM是一种基于I2C总线协议通讯的存储设备,其驱动程序需要对硬件设备进行控制,使用I2C总线进行通信传输数据。 BL24C512 EEPROM驱动程序需要以下几个方面的内容: 1. 硬件初始化 在使用BL24C512 EEPROM前,需要先对硬件进行初始化,包括I2C总线的初始化和地址等属性参数的设置。 2. 读写数据操作 BL24C512 EEPROM的读写操作需要使用I2C总线进行数据传输。在读操作时,驱动程序需要发送读取命令,并接收EEPROM中的数据。在写操作时,需要发送写入命令和数据到EEPROM中保存。 3. 缓存控制 由于EEPROM的读写速度较慢,驱动程序通常会使用缓冲区进行数据缓存,当需要进行读写操作时,先将数据保存在缓冲区中,再进行传输操作。 4. 错误处理 在EEPROM读写过程中,有可能发生传输错误,驱动程序需要检测并处理这些错误,如重新传输数据等。 综上所述,BL24C512 EEPROM驱动程序需要对硬件设备、数据读写、缓存控制和错误处理进行控制。通过有效的驱动程序,可以实现对EEPROM的读写操作,从而实现数据存储和传输等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jun2036

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值