注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- 工控机论坛 -- 工控机论坛(非专题) -- 结构与配置

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

工控机论坛(非专题)分类  

全部论题

结构与配置

数据 I/O

编程与维护

应用方案

发表人:emtronix 发表时间:2010/12/14 21:24:00  

 

 本栏论题: 工控主板支持铁电存储器的简易方案  [1425]

    英创公司的ARM9 系列工控主板产品,对数据的记录均采用了基于NandFlash的文件系统,但在实际应用中,客户经常需要频繁的记录一些小块的重要数据,同时要求数据在掉电情况下不丢失,这时如果采用文件系统就不能完全满足需求。通常的解决办法是将数据直接存储在非易性存储器中(NVRAM)。NVRAM有两种基本类型,一是基于SRAM的传统NVRAM,另一种是近些年广泛使用的铁电存储器,与传统的基于SRAM技术的存储器相比,铁电存储器在信号接口、操作功耗方面有无可比拟的优势。目前在市场流行的有4Kb-256Kb铁电存储器产品,并有多种接口类型可供选择,包括I2C、SPI接口等,本文以Ramtron公司的FM24L256为例,介绍英创主板EM9160操作FM24L256的方法。
    FM24L256非易失铁电存储器结构容量为32,768 x 8位,读/写次数无限制,掉电数据保存10年,无延时写入操作,采用I2C总线接口,总线频率可高达1MHz。同时具有工业级温度范围,低功耗操作等特点。EM9160 是英创公司的一款预装Windows CE 实时操作系统的高性价比ARM9 工控主板产品。EM9160 最多可支持16 位方向可独立设置的GPIO,这些GPIO 均可被用来仿真作为I2C的信号。
    FM24L256为SOP8封装芯片,只需把2位I2C总线信号与EM9160的GPIO相连,即完成扩展硬件的连接。
    EM9160工控主板对铁电存储器FM24L256的驱动程序描述如下:
    #include 'EM9160_DIO_EX.h'
    #define GPIO0 0x01
    #define GPIO1 0x02
    #define GPIO2 0x04
    #define GPIO3 0x08
    #define GPIO4 0x10
    #define GPIO5 0x20
    #define GPIO6 0x40
    #define GPIO7 0x80
    #define GPIO8 0x100
    #define GPIO9 0x200
    #define GPIO10 0x400
    #define GPIO11 0x800
    #define GPIO12 0x1000
    #define GPIO13 0x2000
    #define GPIO14 0x4000
    #define GPIO15 0x8000
    #define SCK GPIO6 // I2C时钟信号,可根据实际情况更改
    #define SDA GPIO7 // I2C数据信号,可根据实际情况更改
    实现SCK和SDA信号的操作函数:
    void GPIO_i2c::SetSDADir(int Dir) //设置SDA方向
    {
    if(Dir)
    PIO_OutEnableEx( SDA ); // set gpio7 to output (SDA)
    else
    PIO_OutDisableEx( SDA ); // set gpio7 to input (SDA)
    }
    void GPIO_i2c::SetSCL(int Level) //置高/置低SCK信号
    {
    if(Level)
    PIO_OutSetEx( SCK );
    else
    PIO_OutClearEx( SCK );
    }
    void GPIO_i2c::SetSDA(int Level) //置高/置低SDA信号
    {
    if(Level)
    PIO_OutSetEx( SDA );
    else
    PIO_OutClearEx( SDA );
    }
    int GPIO_i2c::GetSDA() //读取SDA状态
    {
    DWORD dwSDAStatus = 0;
    // put code here to get SDA status
    PIO_StateEx( (UINT16*) &dwSDAStatus );
    dwSDAStatus = dwSDAStatus & SDA;
    if(dwSDAStatus)
    {
    return 1;
    }
    return 0;
    }
   
    int GPIO_i2c::I2C_InitController( ) //设置SCK,SDA,只初始化时执行一次
    {
    //set gpio6 and gpio7
    PIO_OutEnableEx( SCK ); // set gpio6 to output (CLK)
    PIO_OutSetEx( SCK ); // set CLK
    SetSDADir(0); // set SDA to input
    return 0;
    }
    根据FM24L256的时序要求,构造相应的读写函数,EM24L256的读写时序如下图所示:
   
   
   
   
   
    ////////////////////////////////////////////////////////////////////////////
    // 从I2C器件读取一个或多个字节
    // 输入参数:
    // uDevAddr:器件地址
    // uRegIdx: 器件寄存器地址
    // ReadBuf: 数据缓存
    // ReadLen: 读取数据个数
    // return = -1: 失败
    // = ReadLen: read succeed!
    ////////////////////////////////////////////////////////////////////////////
    int GPIO_i2c::I2C_ByteRead(UCHAR uDevAddr, UINT16 uRegIdx,
    UCHAR* ReadBuf, int ReadLen )
    ////////////////////////////////////////////////////////////////////////////
    // 向I2C器件写入一个或多个字节
    // 输入参数:
    // uDevAddr:器件地址
    // uRegIdx: 器件寄存器地址
    // ReadBuf: 数据缓存
    // ReadLen: 写入数据个数
    // return = WriteLen: 写入成功
    // = -1: 写入失败,没有应答信息
    ////////////////////////////////////////////////////////////////////////////
    int GPIO_i2c::I2C_ByteWrite(UCHAR uDevAddr, UINT16 uRegIdx,
    UCHAR* WriteBuf, int WriteLen)
    本文是以EM9160操作FM24L256为例,介绍如何构造I2C接口,这个方法也完全适合英创公司的其他嵌入式工控主板产品,如EM9000、EM9161、EM9260、ETR232i等。EM9160与FM24L256连接十分简单,在需要频繁记录数据的场合,本文介绍的方案是一个不错的选择,经过测试,EM9160对FM24L256的写入速度可达每秒56K字节,感兴趣的客户可向英创索要相关源代码。
   
   

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳