写STM8flash和写外部flash EN25Q16A-104HIP 的函数小纪

写外部flash EN25Q16A-104HIP 的函数

uint8 program_data(uint16 flash_addr, uint8 buffer[], uint8 len)
{
    uint8 i,flagstatus;
    uint16 address;
    int8 trycnt=1;
    //u16 timeout = 0xFFFF;
    
retry_lbl:
    if(trycnt-- <= 0) return(0);

    FLASH->CR1 &= (u8)(~0x01);
    FLASH->CR1 |= (u8)0x00;

    address  = flash_addr;
    for(i = 0; i < len; i++)
    {
        clr_watchdog(NULL);
        /* Unlock Program memory */
        FLASH_Unlock(FLASH_MEMTYPE_PROG);
        *((uint8 *) address) = buffer[i];
        while (flagstatus == 0x00)
        {
            flagstatus = (u8)(FLASH->IAPSR & ((u8)(0x04) |(u8)(0x01)));
            //timeout--;
        }
        FLASH_Lock(FLASH_MEMTYPE_PROG);
        address++;
    }
    address = flash_addr;
    for(i = 0; i < len; i++)
    {
        if(*((u8*) address) != buffer[i]) goto retry_lbl;
        address++;
    }
    return(1);
}

STM8 FLASH

oid flash_write(u16 addr, const void *in, u8 len)
{
    //FLASH->CR1 &= (u8) (~0x01);


    const u8 *data = (const u8 *)in;
    FLASH_Unlock(FLASH_MEMTYPE_PROG);
    while (len--)
    {
        *((u8*) addr++) = *data++;
        while (!(u8) (FLASH->IAPSR & ((u8) (0x04) | (u8) (0x01))))
            IWDG->KR = IWDG_KEY_REFRESH;
    }
    FLASH_Lock(FLASH_MEMTYPE_PROG);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SPI编程器支持芯片列表 由于各个厂商的SPI Flash 的编程接口的统一,芯片支持只存在其容量不同问题。很多时候,我们只需把整个文件Flash就可以了。编程器支持的芯片如下: AMIC A25L05P A25L512 A25L10P A25L010 A25L020 A25L20P A25L40P A25L040 A25L080 A25L80P A25L016 A25L16P A25L032 ATMEL AT25F512B AT25F512A AT25F512 AT25F1024 AT25FS010 AT25F1024A AT25DF021 AT25F2048 AT26DF041A AT26F004 AT25F4096 AT25FS040 AT25DF041A AT26DF081A AT26DF161 AT26DF161A AT25DF161 AT25DF321A AT25DF321 AT26DF321 AT25DF641 COMMON 25X005 25X05 25X10 25X20 25X40 25X80 25X16 25X32 25X64 EON EN25LF05 EN25P05 EN25B05T EN25F05 EN25B05 EN25LF10 EN25F10 EN25D10 EN25P10 EN25D20 EN25LF20 EN25F20 EN25LF40 EN25F40 EN25D40 EN25F80 EN25D80 EN25T80 EN25P80 EN25Q80 EN25D16 EN25T16 EN25B16 EN25F16 EN25B16T EN25Q16 EN25Q32 EN25B32T EN25B32 EN25P32 EN25F32 EN25F64 EN25B64 EN25B64T EN25Q64 ES ES25P10 ES25P20 ES25M40A ES25P40 ES25M40 ES25M80A ES25M80 ES25P80 ES25M16A ES25P16 ES25M16 ES25P32 ESMT F25L04UA F25L004A F25L08PA F25L008A F25L016A F25L16PA F25L32PA F25L32QA GIGADEVICE GD25Q512 GD25Q10 GD25Q20 GD25D40 GD25F40 GD25T80 GD25Q80 GD25D80 GD25F80 GD25Q16 GD25Q32 GD25Q64 KH KH25L8036D MSHINE MS25X05 MS25X10 MS25X20 MS25X40 MS25X80 MS25X16 MS25X32 MS25X64 MXIC MX25L512 MX25V512 MX25L1005 MX25L2005 MX25V4035 MX25L4005A MX25V4005 MX25V8006E MX25L8005 MX25V8005 MX25L8035E MX25V8035 MX25L8006E MX25L8036E MX25U8035 MX25U8033E MX25L1608D MX25L1635E MX25L1636D MX25L1633E MX25L1606E MX25U1635E MX25L1605D MX25L1636E MX25L3236D MX25L3225D MX25L3208D MX25U3235F MX25L3206E MX25U3235E MX25L3205D MX25L3237D MX25L3235D MX25L6405D MX25L6408D MX25L6455E MX25L6445E MX25L6406E MX25L6436E NEXFLASH NX25P10 NX25P20 NX25P40 NX25P80 NX25P16 NX25P32 PMC PM25LV512A PM25LV010A PM25LV020 PM25LV040 PM25LV080B PM25LV016B SAIFUN SA25F005 SA25F010 SA25F020 SA25F040 SA25F080 SA25F160 SA25F320 SPANSION S25FL001D S25FL040 S25FL004 S25FL002D S25FL008 S25FL016 S25FL160 S25FL032 S25FL064 ST M25P05A M25PE10 M25P10A M25P20 M25PE20 M25PE40 M25P40 M25PX80 M25PE80 M25P80 M25P16 M25PX16 M25PE16 M25P32 M25PE32 M25PX32 M25P64 M25PE64 M25PX64 WINBOND W25X10A W25P10 W25X10AL W25X10 W25X10L W25X20L W25P20 W25X20A W25X20AL W25X20 W25X40AL W25P40 W25Q40BV W25X40L W25X40A W25X40 W25P80 W25X80A W25X80 W25Q80BV W25X80L W25X80AL W25Q80V W25Q16BV W25Q16V W25P16 W25X16 W25X32 W25Q32V W25P32 W25Q32BV W25Q64BV W25X64 W25P64
STC8H单片机可以使用SPI接口来读W25Q16闪存芯片的程序。 首先,我们需要配置STC8H单片机的SPI接口。首先设置SPI的工作模式为主机模式,并设置时钟频率。然后,配置SPI引脚的I/O口,并使能SPI模块。 接下来,在入数据之前,我们需要向W25Q16发送使能命令,以激活操作。使用SPI发送使能命令后,等待W25Q16的应答,以确保入操作准备就绪。 然后,将要入的数据传输到W25Q16中。使用SPI接口将数据发送给W25Q16的指定地址。通过读取W25Q16的状态寄存器,可以确定操作是否成功完成。 在读取数据时,首先向W25Q16发送读取命令,并指定读取的起始地址。然后,使用SPI接口从W25Q16的指定地址读取数据,并将数据保存到STC8H单片机的内存中。 在读操作完成后,我们可以关闭SPI接口,以释放资源并降低功耗。 需要注意的是,对于W25Q16芯片来说,SPI的操作需要擦除数据块(Sector)然后再入新数据。因此,在进行操作之前,需要首先将要入的数据块擦除。 总结起来,STC8H单片机通过SPI接口与W25Q16闪存芯片进行通信,可以实现对W25Q16的读操作。首先配置SPI接口和相应的GPIO引脚。然后通过SPI接口发送使能命令,并进行数据的入操作。读取数据时,首先发送读取命令,并读取指定地址的数据。完成读操作后,关闭SPI接口。同时,需要注意擦除数据块的操作,以确保入的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值