EEPROM

实现代码:

https://gitee.com/synwit-co-ltd/EEPROM_Emulation 

工作原理

Flash 和 EEPROM 的主要区别在于可擦单元大小,EEPROM 可以字节擦写,而 Flash 只能块(扇区)擦除。这意味着如果在一个 Flash 扇区上存储多个参数时,扇区的擦除次数是该扇区上所有存储参数修改次数的总和,因此用作参数存储器时,Flash 相比 EEPROM 更容易写坏。

解决这个问题的方法是,不再将参数存储在 Flash 的固定地址,而是给每个参数分配一个唯一的数字用作虚拟地址,将参数写入 Flash 时同时将虚拟地址写入 Flash。

举例说明,执行如下的伪代码,将产生下图所示的存储效果:

1.jpg

2.jpg

注:上图中空格表示未写入,其值实为 0xFF

Flash 存储器被划分为 2 个字一组的存储单元,执行 EE_Write 时,将参数的值写入存储单元的前一个字,参数的虚拟地址写入存储单元的后一个字。

3.png

读取参数时,不再去固定的 Flash 地址读取,而是从存储页的尾部向前逐个存储单元读取,检查该单元中存储的虚拟地址是否等于 EE_Read 调用中指定的虚拟地址 EE_ADDR_Speed。若不等,则继续向前搜索;若相等,则说明找到了参数 Speed 在存储器中存储的最新设定值。

由于参数不必存储在 Flash 中的固定地址,因此不必每次修改参数的值时都擦除 Flash,而是只要 Flash 扇区未写满,就可以直接在后续空白地址写入参数的新值。这样将大幅减少 Flash 的擦除次数,降低 Flash 被写坏的风险。

页拷贝

当存储页写满时,可以将所有所有参数读入 RAM,擦除存储页,然后再将所有参数写入 Flash中。但若在此过程中发生掉电,就会导致所有参数丢失。

为解决这个问题,可以使用两个存储页,存储页的第一个存储单元存储该页的状态。如下图所示第一个存储页已满:

4.jpg

若此时执行 EE_Write(EE_ADDR_Speed, 0x1900),可将第二个存储页状态改为 Receiving,表示正在从 Active 页拷贝数据。然后将本次要写的数据写入。

5.jpg

接下来,搜索 Active 页中的所有存储参数,将每个参数的最新值拷贝到 Receiving 页中。等所有参数拷贝完成后,将第一个页擦除(页状态自动变为 Erased),最后将第二个页状态改为 Active。

6.jpg

后面,所有的参数读写操作均在第二页上即可。

这样操作,可以保证即使在过程中发生突然掉电,也不会损坏存储的参数值:

l 若在将第二页标记为 Receiving 时突然掉电,则只是丢失参数 Speed 的最新设定值,其他参数不受影响,读取参数 Speed 会读取到它的前一个设定值。

ll 若在第二页标记为 Receiving 之后,从 Active 页向 Receiving 页拷贝参数的过程中突然掉电,则下次上电后会发现同时存在 Active 页和 Receiving 页,重新执行参数拷贝即可。

lll 若在参数拷贝完,Active 页擦除后,Receiving 页还未被修改为 Active 时突然掉电,则下次上电后会发现有一个 Receiving 页,但没有 Active 页,只需要将 Receiving 页状态改为 Active 即可。

来源:华芯微特32位MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 28

Holtek A/D Flash MCU with EEPROM系列新增HT66F3184 / HT66F3194成员,分别为HT66F3185HT66F3195的精简版,能为客户提供多元化的产品规格选择。此产品非常适用于各式家电产品,例如:咖啡机、电热水壶、电茶炉、电饭煲、豆浆机等,亦适用于小体积产品,例如:智能型穿戴装置、锂电池保护板等。

1.jpg

HT66F3184/HT66F3194提供多样化的资源,包含4K×16 / 8K×16 Flash ROM、256×8 / 512×8 RAM、128×8 EEPROM、多功能Timer Module及12-bit ADC等。内建振荡器与ADC参考电压的精准度分别可达到8/12/16MHz±1%与1.2V±1%。HT66F3184封装提供16-pin NSOP、20-pin QFN、24-pin SSOP/QFN,HT66F3194封装则提供20-pin NSOP、24-pin SSOP/QFN,I/O引脚功能兼容于HT66F3185/HT66F3195同型封装。

来源:HOLTEK

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 5

概 述

在MCU的使用中,经常遇到需要存储参数或掉电保持数据等功能。其中,Flash和EEPROM是常见的非易失性存储器,都可以做到设备掉电重启后,数据还会保留。但二者有明显的区别:EEPROM可以被编程和电擦除,而且大多数的EEPROM可以被编程和电擦除,大多数串行EEPROM允许逐字节程序或擦除操作。与EEPROM相比,闪存具有更高的密度,这允许在芯片上实现更大的内存阵列(扇区)。通过对每个单元施加时间控制的电压来执行闪存擦除和写入周期。典型的Flash写时间是50µs/8位字;然而,EEPROM通常需要5到10 ms。EEPROM不需要进行页面(扇区)擦除操作,可以擦除一个需要指定时间的特定字节。与EEPROM相比,Flash具有更高的密度和更低的价格。

先楫产品可以外接大容量Flash芯片,支持可达256Mbyte程序或数据存储;部分产品如HPM6754、HPM6364、HPM6284内置4Mbyte Flash,HPM53XX系列全系支持1Mbyte Flash。在使用Flash模拟EEPROM时,最重要的挑战是满足Flash程序/擦除持久性和数据保留方面的可靠性目标。

其次,在应用程序的控制下,需要满足更新和读取数据的实时应用要求。请注意,在Flash擦写期间,它不能执行Flash应用程序,因为在此时间内不能执行在Flash中的程序,通常程序是将Flash擦写程序拷贝到RAM中执行。先楫半导体为了方便客户程序应用,已经将Flash驱动程序集成到ROM中,减少了系统对RAM的需求,用户使用时更加灵活方便。

由于Flash的块擦除要求,必须完全为模拟的EEPROM保留至少一个Flash扇区。例如,一个4K x 8bit大小的Flash扇区可以分为16页,每个页的大小为256 x 8bit。这使得每个页面相当于一个256 x 8字节的EEPROM。要保存的数据首先写入RAM中的缓冲区中,每个部分RAM可以模拟EEPROM的存储的数据。

如何实现?

根据Flash扇区和模拟的EEPROM的大小,划分相应的Flash和RAM空间。

功能:

• 读取片内或片外flash信息。

• 批量读取flash中数据到RAM缓存中。

• 用户可以自由读写RAM缓存中数据。

• 用户可以将RAM缓存中数据写入flash。

• 用户可以根据自己的需要定制存储空间大小和存储地址。

由于先楫半导体MCU已经集成了Flash驱动,用户可以不再需要把精力放到繁琐的底层Flash驱动部分。

为了实现此功能,需要8个函数来进行编程、读取和擦除,3个宏定义确定存储空间和位置。

/* Sector size */ 
#define SECTOR_SIZE (uint32_t) (0x1000)
 /* Sectors 0 and 1 base and end addresses */ 
#define Flash_base 0x80000000L 
#define SECTOR1_BASE_ADDRESS (Flash_base+0x3FE000) 
#define SECTOR1_END_ADDRESS  (SECTOR1_BASE_ADDRESS+SECTOR_SIZE*2-1)

其中,SECTOR_SIZE定义了flash扇区大小,单位是byte。若不确定flash扇区大小可以在Initial_EEProm函数中获取flash信息。Flash_base定义flash起始地址,具体可以参考user guider中系统内存映射 System Memory Map地址。SECTOR1_BASE_ADDRESS和SECTOR1_END_ADDRESS为数据存放起始地址,SECTOR1_BASE_ADDRESS必须是特定扇区起始地址。

ATTR_PLACE_AT_WITH_ALIGNMENT(".ahb_sram",8) uint8_t EEPROM_data[SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS+1];

Flash模拟EEPROM时需在RAM中开辟缓存用于常态数据读写,开辟数据时应注意RAM区数据应放到ahb_sram或noncacheable区域。

if defined(FLASH_XIP) && FLASH_XIP 
ATTR_RAMFUNC hpm_stat_t Initial_EEProm(void)
#else hpm_stat_t Initial_EEProm(void) 
#endif 
{ 
    xpi_nor_config_option_t option; 
    option.header.U = BOARD_APP_XPI_NOR_CFG_OPT_HDR; 
    option.option0.U = BOARD_APP_XPI_NOR_CFG_OPT_OPT0; 
    option.option1.U = BOARD_APP_XPI_NOR_CFG_OPT_OPT1; 
    hpm_stat_t status = rom_xpi_nor_auto_config(HPM_XPI0, &s_xpi_nor_config, &option); 
    if (status != status_success) 
    { 
        return status; 
    } 
    rom_xpi_nor_get_property(HPM_XPI0, &s_xpi_nor_config, xpi_nor_property_total_size, &flash_size); 
    rom_xpi_nor_get_property(HPM_XPI0, &s_xpi_nor_config, xpi_nor_property_sector_size, &sector_size); 
    rom_xpi_nor_get_property(HPM_XPI0, &s_xpi_nor_config, xpi_nor_property_page_size, &page_size); 
    printf("Flash Size:%dMBytes\nFlash Sector Size:%dKBytes\nFlash Page Size:%dBytes\n", flash_size / 1024U / 1024U, sector_size / 1024U, page_size); 
    EEProm_Flush(); 
} /* End  Initial_EEProm */

通过调用rom_xpi_nor_auto_config()、rom_xpi_nor_get_property()获取flash信息。

/******************************************************************************* * Routine:  EEPromFlush 
* Purpose:  Refresh data from flash to buffer.
 *******************************************************************************/ 
inline void EEProm_Flush(void) 
{ 
     memcpy((void*)EEPROM_data,(const void*)SECTOR1_BASE_ADDRESS,(SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS)); 
} /* End EEProm_Flush */

从flash中读取数据无需单独调用API函数,直接寻址读取效率更高,文中通过memcpy()函数直接从flash中读取数据到RAM缓存中,后面读写参数直接读写RAM缓存即可。

如果需要将参数写入flash中,需将整块flash擦写,由于数据已经存在RAM缓存,不会存在flash擦写时数据丢失的问题。

/******************************************************************************* * Routine:  writeEEProm_withflush 
* Purpose:  Writes variable to EEPROM and flush flash later. 
* Input  :  none 
* Output:    None. 
* Return:   Returns 0 
*******************************************************************************/ 
#if defined(FLASH_XIP) && FLASH_XIP 
ATTR_RAMFUNC hpm_stat_t writeEEProm_withflush(uint16_t index, uint8_t *data, uint16_t size) 
#else 
hpm_stat_t writeEEProm_withflush(uint16_t index, uint8_t *data, uint16_t size) 
#endif 
{ 
    hpm_stat_t status; 
    if(flash_size==0) return status_fail; 
    memcpy((void*)&EEPROM_data[index],(const void*)data,size); 
    status = rom_xpi_nor_erase(HPM_XPI0, xpi_xfer_channel_auto, &s_xpi_nor_config, SECTOR1_BASE_ADDRESS-Flash_base, SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS); 
    if (status != status_success) 
    { 
        return status; 
    } 
    status = rom_xpi_nor_program(HPM_XPI0, xpi_xfer_channel_auto, &s_xpi_nor_config, (const uint32_t *)EEPROM_data, SECTOR1_BASE_ADDRESS-Flash_base, SECTOR1_END_ADDRESS-SECTOR1_BASE_ADDRESS); 
    if (status != status_success) 
    { 
        return status; 
    } 
}

考虑到flash擦写期间不能读取flash,flash擦写函数需放置在RAM执行的程序存储空间。先楫SDK中已经定义好了ram运行区域,并在HPM_COMMON.H文件中将函数和数字放置属性重新封装,通过ATTR_RAMFUNC等效定义__attribute__((section(“.fast”)))。为确保擦写flash期间不会被中断打断从而调用其他flash中的程序,需在运行中关闭中断。

//disable all interrupt before programming flash 
CSR_reg = disable_global_irq(CSR_MSTATUS_MIE_MASK); 
disable_global_irq(CSR_MSTATUS_SIE_MASK); 
disable_global_irq(CSR_MSTATUS_UIE_MASK); 
writeEEProm_withflush(0,(uint8_t*)s_write_buf,0x1000);//update eeprom with flash 
//restore interrupt 
restore_global_irq(CSR_reg);

小 结

本文首先介绍了基于HPM6000系列芯片如何使用Flash模拟EEPROM存储参数。由于先楫SDK中已经提供了强大的驱动库,用户可以方便地通过Flash存储数据,降低成本和提高使用灵活性。

来源: 先楫半导体HPMicro

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 107

1、EEPROM 简介

EEPROM全称为EEPROM(Electrically Erasable Programmable Read Only Memory)是电可擦除可编程只读存储器。虽然名称为只读存储器,但是擦除和写入都是直接使用电路控制,不需要再使用外部设备来擦写,即设备在运行过程中即可随时擦除和写入。可以按字节为单位修改数据,无需整个芯片擦除,且掉电后数据不丢失,一般用来存储一些配置信息,以便系统重新上电的时候加载。

2、EPROM 操作说明

2.1  通讯方式

主要通讯方式有 I2C 和 SPI 协议,本文将介绍如何通过 I2C 来驱动EEPROM。

2.2  设备地址

如果仅接入一个AT24C02,可以将设备的A0、A1、A2引脚全部接入低电平,那么此时该设备的地址为0xA0。

1.png

2.3  I2C配置流程

开时钟,外设清零,参数配置,初始化,引脚配置,使能

2.png

2.4  写入数据

  • 写入一个字节:

MCU先向AT24C02写入一个地址,然后再写入数据。

  • 写入一页:

MCU先向AT24C02写入一个地址,然后再依次写入数据,注意AT24C02一页有8个字节,每页开始地址均是8的整数倍,一次页写入操作地址不能超过当前页的尾地址。

  • 连续写入:

AT24C02本身没有提供连续写入的操作,因此必须先将数据按页地址分为若干页,然后再依次调用页写入操作进行写入。

3.png

2.5  读出数据

  • 读取当前字节:

MCU直接发起读操作,设备返回当前字节,当前字节自动加1,该操作较少使用。

  • 读取指定地址一个字节:

MCU先向AT24C02写入一个地址,然后再发起一个读操作,AT24C02返回该地址存储的字节。

  • 连续读取:

MCU发起读当前字节,或者读指定地址字节,设备返回数据,MCU发送ACK,设备继续返回后续地址数据,直到MCU发送NACK,设备不再返回数据。

4.png

2.6  样例测试

初始化两个数组,配置I2C,调用写入和读取的函数操作EEPROM,通过串口打印观察结果。

5.png

运行实例

6.png

来源:灵动MM32MCU

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 16

上海复旦微电子集团股份有限公司今日举办线上发布会,推出FM25/FM29系列SLC NAND,FM24N/FM24LN/FM25N高可靠、超宽压系列EEPROM,以及符合AEC-Q100的车规FM24C/FM25系列EEPROM等非挥发存储新产品。

1.jpg

FM25/FM29系列产品基于28nm先进NAND flash工艺,满足6万次擦写次数和数据保存10年的高可靠性要求,应用于工规、5G通讯、车载等相关领域。

FM24N/FM24LN/FM25N系列产品基于95nm先进EEPROM工艺,具备低功耗、超宽电压、高可靠等特性,其中擦写寿命大于400万次、数据保持时间大于200年,产品性能及可靠性达到业界领先水平,应用于CCM、白电、工控、仪表、医疗、5G通讯、车载等相关领域。其中FM24C/FM25系列车规产品已通过AEC-Q100 Grade 1车规级验证。

2.jpg

FM25/FM29系列SLC NAND存储器

发布会现场,复旦微电产品经理肖磊介绍,FM25/FM29系列是目前国内外首款单芯片同时支持双接口(SPI/PPI)双电源(1.8/3.3)的 SLC NAND Flash,产品开发团队针对28nm先进工艺平台特性,优化编擦、擦除、回读算法,采用内部8bit BCH ECC设计,兼顾成本、性能和可靠性,满足6万次擦写次数和数据保存10年的高可靠性要求。SPI系列(FM25)容量覆盖512Mb~4Gb,温度覆盖-40℃~+105℃。PPI系列为(FM29)容量覆盖2Gb~8Gb,温度覆盖-40℃~+105℃。

3.jpg

FM25S系列产品特点

  • 存储器容量:512Mb~4Gbit

  • 工作电压范围:1.8V/3.3V

  • 工作温度范围:

  • -40℃~+85℃ 以及-40℃~+105℃扩展级

  • SPI高速单/双/四口:104MHz(3.3V) / 85MHz(1.8V)

  • 支持内置8 bit ECC,满足客户Error-Free 需求

  • 高可靠性:

  • Endurance:6万擦写次数

  • Data Retention:10年

  • 封装支持TDFN5X6/TDFN6X8等多种封装形式

FM29F系列产品特点

  • 存储器容量:2Gb~8G bit

  • 工作电压范围:1.8V/3.3V

  • 工作温度范围:

  • -40℃~+85℃ 以及-40℃~+105℃扩展级

  • 兼容ONFI 1.0标准 50MHz(3.3V)/33MHz(1.8V)

  • 支持内置8 bit ECC,满足客户Error-Free 需求

  • 高可靠性

  • Endurance:6万擦写次数

  • Data Retention:10年

  • 封装支持BGA63/TSOP48等多种封装形式

4.png

下一阶段,复旦微电SLC NAND Flash存储器全系列产品将覆盖512Mbit~16Gbit容量, 其中2/4 Gbit SPI NAND Flash容量新品最高工作频率将扩展到120MHz(3.3V)/95MHz(1.8V)的High speed模式,16Gbit PPI NAND支持DDR高速接口,可满足客户更快读写访问速度需求。同时,全系产品会继续提升耐写性指标,满足客户高工规的应用。

FM24/FM25系列串行EEPROM存储器

本次复旦微电推出国内首款低功耗超宽电压FM24LN系列I2C串行EEPROM存储器、FM24N/25N宽电压高可靠I2C/SPI串行EEPROM,以及FM24C/FM25车规EEPROM三个系列的新产品。复旦微电产品经理周泉介绍道,产品开发团队针对流片工艺平台的特性,以及对存储器产品工作原理的深刻理解,对EEPROM存储器读写电路进行了特别的优化设计,大幅度提升了产品的性能及可靠性,为客户提供了更多的产品选择,可以满足CCM、白电、工控、仪表、医疗、5G通讯、车载等各种应用领域需求。FM24C/FM25系列车规产品已通过权威第三方测试认证机构——工业和信息化部电子第五研究所AEC-Q100 Grade 1车规级验证,产品工作温度扩展至-40℃~+125℃。

5.jpg

FM24LN系列 首发包含

32K/64K/128Kbit三种容量的I2C串行EEPROM,产品支持1.1V~5.5V超宽工作电压范围,温度覆盖工规-40℃~+85℃,全电压范围内均支持400KHz/1MHz工作频率,5.5V下典型待机电流小于1uA,读写电流不超过0.8mA,产品满足擦写寿命≥400万次、数据保持时间≥100年的高可靠性要求,支持WLCSP-4Ball、SOP8、TSSOP8、TDFN8等多种封装形式。 

FM24N系列 首发包含

64K/128K/256K/512Kbit四种容量的I2C串行EEPROM,产品支持1.7V~5.5V宽工作电压范围,温度覆盖工规-40℃~+85℃以及工规扩展温度-40℃~+125℃,支持400KHz/1MHz/ 3.4MHz工作频率,写电流≤2mA,读电流≤0.6mA,产品满足擦写寿命≥400万次、数据保持时间≥200年的高可靠性要求,支持SOP8、TSSOP8、TDFN8等多种封装形式
FM25N系列 首发包含

64K/128K/256K/512Kbit四款容量,产品支持1.7V~5.5V宽工作电压范围,温度覆盖工规 -40℃~+85℃ 以及工规扩展温度-40℃~+125℃ , 支持5M(VCC≥1.7V);10M(VCC≥2.5V); 20M(VCC≥4.5V)工作频率,写电流≤2mA,读电流≤5mA@5.5V/20MHz,产品满足擦写寿命≥400万次、数据保持时间≥200年的高可靠性要求,支持SOP8、TSSOP8、TDFN8等多种封装形式。 

FM24CXXX系列车规产品首发包含

128K/256K/512Kbit三款容量产品,产品通过了严苛的AEC-Q100 Grade1认证,产品支持1.7V~5.5V超宽工作电压范围,工作温度范围 -40℃~+125℃,支持400KHz/1MHz工作频率,写电流≤3mA,读电流≤1mA,产品满足擦写寿命≥100万次、数据保持时间≥40年的高可靠性要求,支持SOP8、TSSOP8、TDFN8等多种封装形式,产品湿敏等级为MSL1。 

FM25XXX系列车规产品 首发包含

64K/512Kbit两款容量产品,产品通过了严苛的AEC-Q100 Grade1认证,产品支持1.8V~5.5V超宽工作电压范围,工作温度范围-40℃~ +125℃ , 最高支持20MHz工作频率,写电流≤3mA,读电流≤5mA,产品满足擦写寿命≥100万次、数据保持时间≥40年的高可靠性要求,支持SOP8、TSSOP8、TDFN8等多种封装形式,产品湿敏等级为MSL1。

6.png

FM24LN32/64/128产品特点

  • 存储器容量:32K/64K/128Kbit

  • 工作电压范围:1.1V~5.5V

    工作温度范围:-40℃~+85℃

  • 全电压范围内兼容400KHz/1MHz时钟

  • 串行接口符合I²C规范

  • IO电压与芯片VCC相同,同时兼容1.2V/1.8V/3.3V/5V等主流电压应用。

  • 具有软件保护功能(SWP)

  • 具备器件地址可配置功能,支持I²C总线上最多挂8颗EEPROM

  • 输入脚经施密特触发器滤波抑制噪声

  • 具有字节写、页写、当前地址读、自由读、顺序读等操作模式

  • 擦写时间内部定时(max 5ms)

  • 128 bit 由厂家编写的、只读的唯一标识码,方便产品溯源

  • 额外的一页Security Sector安全区,用户可读写,可锁成只读。(客户可以把版本、物料、厂商代码等关键信息写入,方便产品管控及溯源)

  • 高可靠性:

    ·Endurance:400万擦写次数

    ·Data Retention:100年

  • 封装支持SOP8/TDFN/TSSOP/WLCSP等封装,其中WLCSP封装支持400um*400um及400um*500um Ball Pitch两种规格

FM24N64/128/256/512产品特点

  • 存储器容量:64K/128K/256K/512Kbit

  • 工作电压范围:1.7V~5.5V

  • 工作温度范围:

    -40℃~+85℃/-40℃~+125℃(扩展)

  • 支持400KHz/1MHz/3.4MHz时钟频率

  • 串行接口符合I²C规范

  • 内置ECC纠错逻辑

  • 支持硬件保护功能

  • 总线上最多支持8颗EEPROM寻址

  • 输入脚经施密特触发器滤波抑制噪声

  • 具有字节写、页写、当前地址读、自由读、顺序读等操作模式

  • 擦写时间内部定时(max 5ms)

  • 128 bit 由厂家编写的、只读的唯一标识码,方便产品溯源

  • 额外的一页Security Sector安全区,用户可读写,可锁成只读。(客户可以把版本、物料、厂商代码等关键信息写入,方便产品管控及溯源)

  • 高可靠性:

    ·Endurance:400万擦写次数

    ·Data Retention:200年

  • 封装支持SOP8/TDFN/TSSOP等封装

FM25N64/128/256/512产品特点

  • 存储器容量:64K/128K/256K/512Kbit

  • 工作电压范围:1.7V~5.5V

  • 工作温度范围

    -40℃~+85℃/-40℃~+125℃(扩展)

  • 工作频率5M(VCC≥1.7V);10M(VCC≥2.5V);20M(VCC≥4.5V)

  • 支持SPI Mode 0 (0,0)及Mode 3 (1,1)

  • 内置ECC纠错逻辑

  • 支持1/4空间、1/2空间、全空间写保护

  • 支持软、硬件写保护功能

  • 支持字节页及页写模式

  • 擦写时间内部定时(max 5ms)

  • 128 bit 由厂家编写的、只读的唯一标识码,方便产品溯源

  • 额外的一页Security Sector安全区,用户可读写,可锁成只读。(客户可以把版本、物料、厂商代码等关键信息写入,方便产品管控及溯源)

  • 高可靠性:

    ·Endurance:400万擦写次数

    ·Data Retention:200年

  • 封装支持SOP8/TDFN/TSSOP等封装

FM24C128EA1/FM24C256EA1/FM24C512DA1车规产品特点

  • 存储器容量:128K/256K/512Kbit

  • 符合AEC-Q100 Grade1

  • 工作电压范围:1.7V~5.5V

  • 工作温度范围:-40℃~+125℃

  • 支持400KHz/1MHz时钟频率

  • 串行接口符合I²C规范

  • 支持硬件保护功能

  • 总线上最多支持8颗EEPROM寻址

  • 输入脚经施密特触发器滤波抑制噪声

  • 具有字节写、页写、当前地址读、自由读、顺序读等操作模式

  • 擦写时间内部定时(max 5ms)

  • 128 bit 由厂家编写的、只读的唯一标识码,方便产品溯源

  • 额外的一页Security Sector安全区,用户可读写,可锁成只读。(客户可以把版本、物料、厂商代码等关键信息写入,方便产品管控及溯源)

  • 高可靠性:

    ·Endurance:100万擦写次数

    ·Data Retention:40年

  • 封装支持SOP8/TDFN/TSSOP等封装,湿敏等级:MSL1

FM25640A1/FM25512A1产品特点

  • 存储器容量:64K/512Kbit

  • 符合AEC-Q100 Grade1

  • 工作电压范围:1.8V~5.5V

  • 工作温度范围:-40℃~+125℃

  • 工作频率最高支持20MHz(FM25640A1)、16MHz(FM25512A1)

  • 支持SPI Mode 0 (0,0)及Mode 3 (1,1)

  • 支持1/4空间、1/2空间、全空间写保护

  • 支持软、硬件写保护功能

  • 支持字节页及页写模式

  • 擦写时间内部定时(max 5ms)

  • 128 bit 由厂家编写的、只读的唯一标识码,方便产品溯源

  • 额外的一页Security Sector安全区,用户可读写,可锁成只读。(客户可以把版本、物料、厂商代码等关键信息写入,方便产品管控及溯源)

  • 高可靠性:

    ·Endurance:100万擦写次数

    ·Data Retention:40年

  • 封装支持SOP8/TDFN/TSSOP等封装

下一阶段,复旦微电全新FM24LN、FM24N系列EEPROM存储器全系列产品将覆盖64Kbit~2Mbit容量,FM25N将补全64Kbit~4Mbit全系列容量。其中FM24N全系列新品最高工作频率将扩展到I2C总线规范的3.4MHz的High speed(HS Mode)模式,可满足客户更快读写访问速度需求。I2C、SPI接口EEPROM的全系列容量产品计划于年内完成AEC-Q100 Grade1车规级验证,本次发布EEPROM新品将陆续启动量产。

发布会最后,工业和信息化部电子第五研究所汽车电子行业经理王健分享了题为《车规“芯”形式下的质量保障》的主题演讲。王健表示,近几年来车规芯片快速发展,五所与客户开发并应用“5A+CA关键分析评价”质量工程体系,在研制转批量生产前有效识别、定位、改善解决潜在的设计、材料、结构、工艺等缺陷,提升成品率、可靠性、稳定性和一致性,提升企业品牌和竞争力。五所在与复旦微电的合作中,对存储芯片、MCU、安全与识别等一系列产品开展车规测试认证服务合作。未来,五所将持续和复旦微携手并进,砥砺前行。

基于本次发布的系列新品,复旦微电子还推出全系列车规级NAND/Nor Flash及EEPROM存储器,产品符合AEC-Q100 Grade1/Grade2需求。公司将持续在非易失存储器领域以新工艺节点、低压或宽压、高速、高可靠性(拓展工规、车规等)为发展方向,进一步尝试并拓展系统级存储器产品防线,不断获得突破和领先优势。

关于复旦微电

上海复旦微电子集团股份有限公司(“复旦微电”,上交所科创板证券代码: 688385.SH;“上海复旦”,港交所股份代号: 01385.HK)是国内从事超大规模集成电路的设计、开发、生产(测试)和提供系统解决方案的专业公司。公司于1998年7月创办,并于2000年在香港上市,2014年转香港主板,是国内成立最早、首家上市的股份制集成电路设计企业。2021年登陆上交所科创板,形成“A+H”资本格局。复旦微电子集团现已建立健全安全与识别芯片、非挥发存储器、智能电表芯片、FPGA芯片和集成电路测试服务等产品线。产品行销30多个国家和地区,广泛应用于金融、社保、汽车电子、城市公共交通、电子证照、移动支付、防伪溯源、智能手机、安防监控、工业控制、信号处理、智能计算等领域。

来源:复旦微电子集团

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 35

一、概述

CW32L083 内部集成 2 个 I2C 控制器,能按照设定的传输速率(标准,快速,高速)将需要发送的数据按照 I2C 规范串行发送到 I2C 总线上,或从总线上接收数据,并对通信过程中的状态进行检测,另外还支持多主机通信中的总线冲突和仲裁处理。

二、主要功能

• 支持主机发送 / 接收,从机发送 / 接收四种工作模式 

• 支持时钟延展 ( 时钟同步 ) 和多主机通信冲突仲裁

• 支持标准 (100Kbps)/ 快速 (400Kbps)/ 高速 (1Mbps) 三种工作速率 

• 支持 7bit 寻址功能 

• 支持 3个从机地址 

• 支持广播地址 

• 支持输入信号噪声过滤功能 

• 支持中断状态查询功能

1.协议介绍

I2C 总线使用两根信号线(数据线 SDA 和时钟线 SCL)在设备间传输数据。SCL 为单向时钟线,固定由主机驱动。SDA 为双向数据线,在数据传输过程中由收发两端分时驱动。I2C 总线上可以连接多个设备,所有设备在没有进行数据传输时都处于空闲状态(未寻址从机接收模式),任一设备都可以作为主机发送 START 起始信号来开始数据传输,在 STOP 停止信号出现在总线上之前,总线一直处于 被占用状态。I2C 通信采用主从结构,并由主机发起和结束通信。主机通过发送 START 起始信号来发起通信,之后发送 SLA+W/R 共 8bit 数据(其中,SLA 为 7bit 从机地址,W/R 为读写位),并在第 9个SCL 时钟释放 SDA 总线, 对应的从机在第 9个SCL 时钟占用 SDA 总线并输出 ACK 应答信号,完成从机寻址。此后根据主机发送的第 1 字 节的 W/R 位来决定数据通信的发端和收端,发端每发送 1个字节数据,收端必须回应 1个ACK 应答信号。数据传输完成后,主机发送 STOP 信号结束本次通信。

2.功能框图

I2C 模块主要包括时钟发生器、输入滤波器、地址比较器、协议控制逻辑、仲裁和同步逻辑、以及相关寄存器等。

1.png

CW32L083 支持用户灵活选择 GPIO 作为 I2C 通信引脚,如下表所示:

2.png

3.I2C中断

I2C 控制寄存器 I2Cx_CR 的 SI 位域为中断标志位。当 I2C 状态寄存器 I2Cx_STAT 的 STAT 位域值发生改变(变成 0xF8 除外)时,I2Cx_CR.SI 标志位就会被置位,同时产生中断请求。在用户 I2C 中断服务程序中,应查询 I2C 状态寄存器 I2Cx_STAT 的 STAT 位域值获取 I2C 总线的状态,以确定中断产生原因。设置 I2Cx_CR.SI 为 0 清除该标志位。

4.工作模式

I2C 控制器支持 4 种工作模式:主机发送模式、主机接收模式、从机发送模式、从机接收模式。另外还支持广播 接收模式,其工作方式和从机接收模式类似。

三、EEPROM(CW24C02AD)

1.功能简介

CW24C02是一个2Kbit的串行EEPROM存储芯片,可存储256个字节数据。芯片内部分为32页,每页8字节。工作电压范围为1.7V到5.5V,I2C接口时钟频率为 1MHz (5V,3V),400 KHz (1.7V)。器件地址为1010 A2 A1 A0,对于我们单板A2 A1 A0引脚全部接GND,故器件地址为1010000,即0x50。器件内部存储空间地址长度8 bit。

2.读写时序

字节写操作时序:起始信号+器件地址(7bit)+读写指示(1bit)+存储空间地址(8bit)+写入数据(8bit)+停止信号,即可完成指定字节写入操作。

3.png

页写操作时序:起始信号+器件地址(7bit)+读写指示(1bit)+存储空间地址(8bit)+写入数据(8bit*8)+停止信号,即可完成指定地址(必须是页起始地址)的页写入操作。

4.png

随机读操作时序:起始信号+器件地址(7bit)+读写指示(1bit)+存储空间地址(8bit)+重复起始信号+器件地址(7bit)+读写指示(1bit),之后器件会返回1字节数据,主机收到后发送停止信号,即可完成指定字节读取操作。

5.png

顺序读操作时序:和随机读时序类似,只是在主机接收到1字节数据后,不发送停止信号,而是继续发送时钟进行下一个字节数据的接收,直到所有所需读取的数据全部读取,之后再发送停止信号。

四、硬件连接

如下图所示,MCU和EEPROM通过I2C总线互连。

6.png

五、实例演示:MCU采用页写和顺序读操作时序完成EERPOM的访问。

1.I2C读写EEPROM芯片中断函数(I2C分为I2C1和I2C2)

void I2c1EepromReadWriteInterruptFunction(void)
{
    u8State = I2C_GetState(CW_I2C1);// I2C:获取状态寄存器函数
    switch(u8State)
    {
        case 0x08:     //发送完START信号
        I2C_GenerateSTART(CW_I2C1, DISABLE);// 发送START信号
        I2C_Send7bitAddress(CW_I2C1, I2C_SLAVEADDRESS,0X00);// 做主时发送从机地址字节
        break;
        case 0x10:     //发送完重复起始信号
        I2C_GenerateSTART(CW_I2C1, DISABLE);
        if(0 == SendFlg)
        {
            I2C_Send7bitAddress(CW_I2C1, I2C_SLAVEADDRESS,0X00);    //写命令
        }
        else
        {
            I2C_Send7bitAddress(CW_I2C1, I2C_SLAVEADDRESS,0X01); //读命令,eeprom 随机读
        }
        break;
        case 0x18:    //发送完SLA+W/R字节
        I2C_GenerateSTART(CW_I2C1, DISABLE);
        I2C_SendData(CW_I2C1, u8Addr);   //发送访问EEPROM的目标地址字节
        break;
        case 0x20:    //发送完SLA+W后从机返回NACK
        case 0x38:    //主机在发送 SLA+W 阶段或者发送数据阶段丢失仲裁  或者  主机在发送 SLA+R 阶段或者回应 NACK 阶段丢失仲裁
        case 0x30:    //发送完一个数据字节后从机返回NACK
        case 0x48:    //发送完SLA+R后从机返回NACK
        I2C_GenerateSTOP(CW_I2C1, ENABLE);
        I2C_GenerateSTART(CW_I2C1, ENABLE);
        break;
        case 0x58:    //接收到一个数据字节,且NACK已回复
        u8Recdata[u8RecvLen++] = I2C_ReceiveData(CW_I2C1);//所有数据读取完成,NACK已发送
        receivedflag =1;
        I2C_GenerateSTOP(CW_I2C1, ENABLE);//发送停止条件
        break;
        case 0x28:     //发送完1字节数据:发送EEPROM中memory地址也会产生,发送后面的数据也会产生
        if(0 == SendFlg)
        {
            if(u8SendLen <WRITELEN)
            {
                 I2C_SendData(CW_I2C1,u8Senddata[u8SendLen++]);
            }
            else
            {
                u8SendLen = 0;
                Comm_flg = 1;
                SendFlg = 1;
                I2C_GenerateSTOP(CW_I2C1, ENABLE);//发送完数据,发送停止信号
            }
        }
        else//SendFlg=1为读,SendFlg=0为写。读数据发送完地址字节后,重复起始条件
        {
            CW_I2C1->CR_f.STA = 1;  //set start       //发送重复START信号,START生成函数改写后,会导致0X10状态被略过,故此处不调用函数
            I2C_GenerateSTOP(CW_I2C1, DISABLE);
        }
        break; 
        case 0x40:     //发送完SLA+R信号,开始接收数据
        u8RecvLen = 0;
        if(READLEN>1)
        {
            I2C_AcknowledgeConfig(CW_I2C1,ENABLE);//读取数据超过1个字节才发送ACK
        }
        break;
        case 0x50:     //接收完一字节数据,在接收最后1字节数据之前设置AA=0;
        u8Recdata[u8RecvLen++] = I2C_ReceiveData(CW_I2C1);
        if(u8RecvLen==READLEN-1)
        {
            I2C_AcknowledgeConfig(CW_I2C1,DISABLE);;
        }
        break;
    }
    I2C_ClearIrq(CW_I2C1);
}

2.设置系统时钟

void RCC_Configuration(void)
{
    CW_SYSCTRL->APBEN1_f.I2C1 = 1U;   
}

3.设置GPIO口

void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    CW_SYSCTRL->AHBEN_f.GPIOA  = 1;
    CW_SYSCTRL->AHBEN_f.GPIOB  = 1;
    CW_SYSCTRL->AHBEN_f.GPIOC  = 1;
    CW_SYSCTRL->AHBEN_f.GPIOD  = 1;
    CW_SYSCTRL->AHBEN_f.GPIOE  = 1;
    CW_SYSCTRL->AHBEN_f.GPIOF  = 1;
    
    PB10_AFx_I2C1SCL();
    PB11_AFx_I2C1SDA();
    GPIO_InitStructure.Pins = I2C1_SCL_GPIO_PIN | I2C1_SDA_GPIO_PIN;
    GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_OD;
    GPIO_Init(I2C1_SCL_GPIO_PORT, &GPIO_InitStructure);
}

4.配置嵌套矢量中断控制器

void NVIC_Configuration(void)
{
     __disable_irq();
    NVIC_EnableIRQ(I2C1_IRQn);
    __enable_irq();
}
void I2C1_IRQHandler(void)
{
    I2c1EepromReadWriteInterruptFunction();
}

5.定义常量

#define  I2C1_SCL_GPIO_PORT       CW_GPIOB
#define  I2C1_SCL_GPIO_PIN        GPIO_PIN_10   
#define  I2C1_SDA_GPIO_PORT       CW_GPIOB
#define  I2C1_SDA_GPIO_PIN        GPIO_PIN_11    
//EEPROM内部地址
uint8_t u8Addr = 0x00;        //地址字节
#define WRITELEN   8          //写数据长度
#define READLEN   8           //读数据长度
#define WriteReadCycle  35    //写读次数,每次写入数据为n+i(n为次数,i=0~7)
uint8_t u8Senddata[8] = {0x66,0x02,0x03,0x04,0x05,0x60,0x70,0x20};
uint8_t u8Senddata2[8] = {0x55,0xAA,0xAA,0x55,0x55,0xAA,0x55,0xAA};
uint8_t u8Recdata[16]= {0x00};
uint8_t u8SendLen=0;
uint8_t u8RecvLen=0;
uint8_t SendFlg = 0,Comm_flg = 0;
uint8_t u8recvflg=0;
uint8_t u8State = 0;
uint8_t receivedflag = 0;    //读取完成标志

6.主程序:利用I2C接口,采用中断方式读写EEPROM芯片(CW24C02)。

int32_t main(void)
{
    I2C_InitTypeDef I2C_InitStruct = {0};
    uint16_t tempcnt = 0 ;
    RCC_Configuration();//时钟初始化
    GPIO_Configuration();//IO口初始化
    //I2C初始化
    I2C_InitStruct.I2C_Baud = 0x01;//500K=(8000000/(8*(1+1)) ,波特率计数器配置
    I2C_InitStruct.I2C_BaudEn = ENABLE;// 波特率计数器使能
    I2C_InitStruct.I2C_FLT = DISABLE; //<FLT配置
    I2C_InitStruct.I2C_AA =  DISABLE; //<ACK配置
    I2C1_DeInit();
    I2C_Master_Init(CW_I2C1,&I2C_InitStruct);//初始化模块
    NVIC_Configuration();//中断设置
    //I2C模块开始工作
    I2C_Cmd(CW_I2C1,ENABLE);  //模块使能
    tempcnt =0;
    for(uint8_t i=0; i<8; i++)
    {
        u8Senddata[i] = i;
    }
    while(1)
    {
        I2C_GenerateSTART(CW_I2C1, ENABLE); //开始信号
        while(1)
        {
            while(!Comm_flg) ; //等待数据发送完成
            FirmwareDelay(3000);
            
            Comm_flg = 0; //启动读数据过程
            receivedflag=0;
            I2C_GenerateSTART(CW_I2C1, ENABLE); //开始信号
            while(!receivedflag) ; //等待数据读取完成
            receivedflag = 0; //初始化下一次写数据
            SendFlg = 0;
            u8RecvLen = 0;
            tempcnt++;
            for(uint8_t i=0; i<8; i++)
            {
                u8Senddata[i] =tempcnt+i;
            }
            break;
        }

        if(tempcnt >=WriteReadCycle) //测试次数完成,退出
        {
            break;
        }
    }
    while(1);
}

7.程序流程

程序完成I2C主设备配置后,先将u8Senddata数组中的内容写入到EEPROM的第1页(CW24C02每页8字节):发送START信号后,I2C模块会产生状态改变中断,在中断服务程序中根据不同状态值进行不同处理,直到完成CW24C02的页写模式所有数据字节以及STOP信号发送,发送完成后置写操作流程完成标志。主循环中判断到写操作流程完成后,启动从EERROM的第1页数据读取流程:发送启动信号后,I2C模块会产生状态改变中断,在中断服务程序中根据不同状态值进行不同处理,直到完成CW24C02的顺序读模式所有数据字节发送及读取,在发送完STOP信号后置读操作流程完成标志。主循环中判断读操作流程完成后,初始化u8Senddata数组内容,重复下一次测试过程。完成WriteReadCycle变量设置的测试次数后退出。

来源:武汉芯源半导体

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 31

之前有读者问过类似这样的问题:

1.EEPROM 和 FLASH有什么区别?

2.单片机中为什么很少有EEPROM呢?

3.ROM不是只读存储器吗?为什么 EEPROM 可以读写操作呢?

今天就来围绕EEPROM 和 FLASH展开描述,希望能解决你心中的疑惑。

ROM的发展

ROM:Read-Only Memory,只读存储器。

以非破坏性读出方式工作,只能读出无法写入信息,信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。---来自百度百科

最早的ROM是不能编程的,出厂时其存储内容(数据)就已经固定了,永远不能修改,也不灵活。

因为存在这种弊端,后来出现了PROM(Programmable read-only memory,可编程只读存储器),可以自己写入一次,要是写错了,只能换一块芯片。

1.jpg

因为只能写一次,还是存在很多不方便,于是出现了EPROM(Erasable Programmable Read-Only Memory,可擦除可编程只读存储器),这种存储器就可以多次擦除,但是这种可擦除的存储是通过紫外线进行擦除,擦除的时候也不是很方便。

引用一个比如:如果你往单片机下载一个程序之后发现有个地方需要加一句话,为此你要把单片机放紫外灯下照半小时,然后才能再下一次,这么折腾一天也改不了几次。

随着技术的不断进步,EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦除可编程只读存储器)来了,解决了ROM过去历史中存在一些问题。

早期的EEPROM:早期的EEPROM的特点是可以随机访问和修改任何一个字节,可以往每个bit中写入0或者1,现在基本以字节为单位了。

早期的EEPROM具有较高的可靠性,但是电路更复杂,其成本也更高,因此EEPROM的容量都很小,从几KB到几百KB不等。(有点类似前面说的因为工艺和制造成本的原因,RAM的容量也不大)。

如今的EEPROM支持连续多字节读写操作了,算是已经发展到很先进的水平了。

至此,大家今天看到的EEPROM,基本都是发展的很成熟的EEPROM了。

Flash的发展

Flash,又叫Flash Memory,即平时所说的“闪存”。

Flash结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的功能,还可以快速读取数据,具有NVRAM的优势(NVRAM:Non-Volatile Random Access Memory,非易失性随机访问存储器)。

在过去,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,Flash的出现,全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘、固态硬盘)。

2.png

Flash通常分为:NOR Flash 和 NAND Flash,它们各自有各自的优缺点。

1.NOR Flash

Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。
NOR Flash的读取和我们常见的SDRAM的读取是一样,即可以根据地址随机读写,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。因为其读取速度快,多用来存储程序、操作系统等重要信息。

2.NAND Flash

1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。

NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的制作Flash的成本更廉价。

用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flash以外,还作上了一块小的NOR Flash来运行启动代码。

3.比较

相比于 NOR Flash,NAND Flash 写入性能好,大容量下成本低。
目前,绝大部分手机和平板等移动设备中所使用的 eMMC 内部的 Flash Memory 都属于 NAND Flash。PC 中的固态硬盘中也是使用 NAND Flash。

EEPROM和FLASH区别

现在的 EEPROM 和 FLASH 都属于“可多次电擦除存储器”,但他们二者之间还是有很大差异。

首先,他们最大差异就是:FLASH按块/扇区进行读写操作,EEPROM支持按字节读写操作。

其次,容量大小不同:FLASH容量可以做到很大,但EEPROM容量一般都很小。

再次,就是它们的应用场景不同:EERPOM存储零散小容量数据,比如:标志位、一组数据等。

LASH存储大容量数据,比如:程序代码、图片信息等。

再次,内部结构不同,Flash结构更简单,成本更低,类似前面和大家分享的《单片机中RAM少的原因》。

当然,还有很多其他区别,但随着技术的提升,它们二者已经很接近了。以前它们不能满足的功能,现在基本都能满足了。

单片机中为啥很少有EEPROM?

通过上面的描述,相信大家基本都能明白,为什么单片机中很少有EEPROM了。

下面简单总结一下几点原因:

1.Flash容量更大,储存数据更多;

2.Flash速度更快,特别是读取速度;

3.同等容量,Flash成本更低;

4.Falsh体积更小,在单片机有限的空间Flash优势更明显;

5.随着RAM增加、CPU处理速度增快,能用Flash“模拟”EERPOM;

6.···

来源: 嵌入式专栏(作者:strongerHuang)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 158

春回大地千峰秀,日暖神州万木荣。今日,国内MCU厂商辉芒微电子传来喜讯!

经过数月的认证测试, 辉芒微电子MCU FT32A072RBBT3系列和EEPROM FT24A256A1系列顺利通过第三方测试认证机构SGS公司的AEC-Q100 Grade 1 (-40°C~125°C)车规级可靠性认证,这标志着辉芒微电子的MCU和EEPROM产品质量和可靠性已获得国际权威认证体系的认可和肯定。

1.png

2.png



FT32A072RBBT3是辉芒微电子为汽车电子应用研发的一款高性能和高可靠性的32位MCU。该款芯片基于ARM Cortex-M0内核,最高工作频率高达96 MHz,程序容量128 KB,12 KB闪存可用于存放启动代码,24 KB SRAM,55个高速I/O,同时片内集成高精度模拟模块(ADC、运放、比较器等),高速硬件加速模块(硬件乘除法器等),丰富的通讯接口(I2C, SPI, USART, USB 2.0 HS等),高灵敏度电容式触摸传感器(最大支持24个触摸按键)。丰富的配置和稳定的性能适用于各类汽车级应用,如氛围灯,阅读灯,电动尾门,传感器,后视镜,雨刷控制,车窗控制,空调控制,智能座椅控制等。

3.png


FT24A256A1是辉芒微电子为汽车电子应用研发的EEPROM(电可擦除可编程只读存储器),在断电情况下能长期保存用户存储的数据信息。FT24A256A1为两线串行通信接口,数据容量为256K-Bit。本产品适用于多种汽车车载应用,如用于存储氛围灯模式/亮度、阅读灯模式/亮度、电动尾门高度、空调风量/温度,座椅高度/位置、后视镜角度等用户个性化配置信息。首款产品成功上市后,辉芒将持续扩展其他容量EEPROM产品的研发,以适用于更多汽车车载的应用场景。

4.png


辉芒微电子是一家从事高性能模拟及数模混合信号集成电路设计的企业,专注于MCU、EEPROM和电源管理芯片的研发和销售,并提供基于以上产品的全套解决方案。公司2005年成立,为国家高新技术企业、国家级专精特新“小巨人”企业,总部坐落于高新技术企业云集的深圳南山科技园,在香港设有办事处,已吸引多家国际知名风险投资公司投资。

辉芒微电子拥有一批具有国内外先进半导体企业工作经历的研发人员组成的研发团队,拥有60余项自主核心发明专利,具备自主开发工艺的能力。因此,产品设计不仅仅停留在SOC集成层面,基于自身强大的全定制和半定制的数模混合芯片设计能力,我们将高性能、高可靠性和低成本理念始终贯穿于整个前后端设计、制程优化和生产测试流程。并且从工艺、设计、验证、生产、测试到应用,均建立了完善的操作、监控和应急流程,全方位掌控产品品质。

公司深耕多年,现已拥有业界当先的MCU、EEPROM和PMIC的技术基础和IP积累,我们立足中国应用市场,紧跟消费类、智能硬件、IOT和工控安防等应用领域的发展趋势,深入了解客户需求,精准定义芯片规格,快速推出新品,为客户提供具有竞争力的产品和服务,领引市场。

如需样品测试,请联系FMD或FMD代理商!

来源:辉芒微电子

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 32

EEPROM(Electrically Erasable Programmable readonly memory)是指带电可编程只读存储器。是一种掉电后数据不丢失的存储芯片。

中颖Flash型MCU都集成有EEPROM,EEPROM用来存放用户数据。EEROM大小可以通过option(代码选项)选择0~4K不等。EEPROM按照扇区进行划分,每个扇区的大小512字节(较早的产品,每个扇区大小256字节),最多支持8个扇区。

中颖的EEPROM编程/擦除次数:至少100000次

中颖的EEPROM数据保存年限:至少10年

中颖EEPROM的操作原则:

1、必须关闭所有中断

如果在操作EEPROM期间,不关闭中断,可能会导致程序跑飞或者其它异常情况;中颖MCU要求对于EEPROM的擦除和编程,需要按照规定关闭所有中断(EA=0),等到编程完成后再打开中断。

2、如何访问EEPROM

中颖芯片对于EEPROM的读、擦和写都是通过寄存器FLASHCON的FAC位置1来操作。当FAC=0时,MOVC指令或者SSP功能访问Main Block区域;当FAC=1时,MOVC指令或者SSP功能访问类EEPROM区域或信息存储区。

1.png

2.png

3、操作EEPROM前,清WDT

在对EEPROM的操作前,清WDT,保证操作期间不溢出

4、抗干扰

同时,为了抗干扰,防止误操作,EEPROM编程可以参考如下例程:

uchar ssp_flag;
voidEEPromSectorErase(UCHAR nAddrH)// 扇区擦除
{
    ssp_flag= 0xA5;
    _push_(IEN0);//中断控制压栈
    IEN0&=0x7F;//关总中断            
    FLASHCON = 0x01;  //访问EEPROM区
    RSTSTAT = 0;    //清WDT                               
    XPAGE= nAddrH<<1 ;                         
    
    IB_CON1   = 0xE6;           
    IB_CON2   = 0x05;         
    IB_CON3   = 0x0A;         
    IB_CON4   = 0x09;          
    if(ssp_flag!=0xA5)//增加flag判断,增强抗干扰                   
        goto Error;         
    IB_CON5   = 0x06;         
    _nop_();                                       
    _nop_();         
    _nop_();         
    _nop_();  
Error:         
    
    ssp_flag= 0;         
    IB_CON1= 0x00;         
    IB_CON2= 0x00;         
    IB_CON3= 0x00;         
    IB_CON4= 0x00;         
    IB_CON5= 0x00;                 
    
    FLASHCON= 0x00;//切回FLASH区    
    _pop_(IEN0);//恢复总中断
} 
    
voidEEPromByteProgram(UCHAR nAddrH,UCHAR nAddrL, UCHAR nData)  
// 扇区编程
{         
    ssp_flag= 0x5A;    
    _push_(IEN0); //中断控制压栈    
    IEN0&=0x7F;//关总中断              
    FLASHCON= 0x01; //访问EEPROM区         
    RSTSTAT = 0;    //清WDT         
    XPAGE= nAddrH; 
    IB_OFFSET= nAddrL;         
    IB_DATA= nData;  // 烧写内容   
           
    IB_CON1   = 0x6E;         
    IB_CON2   = 0x05;         
    IB_CON3   = 0x0A;         
    IB_CON4   = 0x09;          
    
    if(ssp_flag!=0x5A) //增加flag判断,增强抗干扰       
        goto Error;         
    IB_CON5   = 0x06;         
    _nop_();                  
    _nop_();         
    _nop_();         
    _nop_();
Error:         
    ssp_flag= 0;         
    IB_CON1= 0x00;         
    IB_CON2= 0x00;         
    IB_CON3= 0x00;         
    IB_CON4= 0x00;         
    IB_CON5= 0x00;            

    FLASHCON= 0x00; //切回FLASH区    
    _pop_(IEN0); //恢复总中断

来源:中颖电子(作者:丁晓明)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 42

EEPROM(Electrically Erasable Programmable readonly memory)是指带电可编程只读存储器。是一种掉电后数据不丢失的存储芯片。

中颖Flash型MCU都集成有EEPROM,EEPROM用来存放用户数据。EEROM大小可以通过option(代码选项)选择0~4K不等。EEPROM按照扇区进行划分,每个扇区的大小512字节(较早的产品,每个扇区大小256字节),最多支持8个扇区。

中颖的EEPROM编程/擦除次数:至少100000次

中颖的EEPROM数据保存年限:至少10年

中颖EEPROM的操作原则:

1 必须关闭所有中断

如果在操作EEPROM期间,不关闭中断,可能会导致程序跑飞或者其它异常情况;中颖MCU要求对于EEPROM的擦除和编程,需要按照规定关闭所有中断(EA=0),等到编程完成后再打开中断。

2 如何访问EEPROM

中颖芯片对于EEPROM的读、擦和写都是通过寄存器FLASHCON的FAC位置1来操作。当FAC=0时,MOVC指令或者SSP功能访问Main Block区域;当FAC=1时,MOVC指令或者SSP功能访问类EEPROM区域或信息存储区。

1.png

3 操作EEPROM前,清WDT

在对EEPROM的操作前,清WDT,保证操作期间不溢出

4  抗干扰

同时,为了抗干扰,防止误操作,EEPROM编程可以参考如下例程:

uchar ssp_flag;

voidEEPromSectorErase(UCHAR nAddrH)// 扇区擦除
{                                                                                                    

  ssp_flag= 0xA5;

  _push_(IEN0);//中断控制压栈

  IEN0&=0x7F;//关总中断   

  FLASHCON = 0x01;  //访问EEPROM区

  RSTSTAT = 0;    //清WDT                                                      

  XPAGE= nAddrH<<1 ;                                                  

  IB_CON1   = 0xE6;  

  IB_CON2   = 0x05;

  IB_CON3   = 0x0A;

  IB_CON4   = 0x09;     

  if(ssp_flag!=0xA5)//增加flag判断,增强抗干扰

   goto Error;

  IB_CON5   = 0x06;

  _nop_();                              

  _nop_();

  _nop_();  

 Error:

 ssp_flag= 0;

 IB_CON1= 0x00;

 IB_CON2= 0x00;

 IB_CON3= 0x00;

 IB_CON4= 0x00;

 IB_CON5= 0x00;
            
  FLASHCON= 0x00;//切回FLASH区

 _pop_(IEN0);//恢复总中断

}

 voidEEPromByteProgram(UCHAR nAddrH,UCHAR nAddrL, UCHAR nData)  // 扇区编程

{

  ssp_flag= 0x5A;

  _push_(IEN0); //中断控制压栈

  IEN0&=0x7F;//关总中断

  FLASHCON= 0x01; //访问EEPROM区

  RSTSTAT = 0;    //清WDT

  XPAGE= nAddrH;                                                  

  IB_OFFSET= nAddrL;

  IB_DATA= nData;  // 烧写内容

  IB_CON1   = 0x6E;

  IB_CON2   = 0x05;

  IB_CON3   = 0x0A;

  IB_CON4   = 0x09;

  if(ssp_flag!=0x5A) //增加flag判断,增强抗干扰

  goto Error;
                       
  IB_CON5   = 0x06;
             
  _nop_();

  _nop_();

  _nop_();

  _nop_();

 Error:

 ssp_flag= 0;

 IB_CON1= 0x00;

 IB_CON2= 0x00;

 IB_CON3= 0x00;

 IB_CON4= 0x00;

 IB_CON5= 0x00;

 FLASHCON= 0x00; //切回FLASH区

 _pop_(IEN0); //恢复总中断

来源:中颖电子(作者:丁晓明)

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 323

页面

订阅 RSS - EEPROM