I.MX RT1170之FlexSPI(3):NOR Flash手册分析和参数配置详解

news2024/9/20 20:20:09

在上一节中,我们分析了FlexSPI的相关参数:LUT表格的组成和FlexSPI结构体配置,这一节就以WINBOND的W25Q256JV NOR Flash为例,看一下如何根据这个NOR Flash的数据手册配置FlexSPI接口。

文章目录

  • 1 SDK代码
  • 2 NOR Flash配置流程
    • 2.1 时钟配置
    • 2.2 FlexSPI特性配置
    • 2.3 FlexSPI Flash配置
    • 2.4 LUT表格配置
  • 3 总结

1 SDK代码

上一节我们详细分析了FlexSPI的相关参数,但大部分的参数实际上我们保持默认就行,只需要配置一些典型的参数即可。所以首先就来看一下在官方SDK中是如何配置NOR Flash的,用到了哪些参数。

flexspi_device_config_t deviceconfig = {
    .flexspiRootClk       = 12000000,
    .flashSize            = FLASH_SIZE,
    .CSIntervalUnit       = kFLEXSPI_CsIntervalUnit1SckCycle,
    .CSInterval           = 2,
    .CSHoldTime           = 3,
    .CSSetupTime          = 3,
    .dataValidTime        = 0,
    .columnspace          = 0,
    .enableWordAddress    = 0,
    .AWRSeqIndex          = 0,
    .AWRSeqNumber         = 0,
    .ARDSeqIndex          = NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD,
    .ARDSeqNumber         = 1,
    .AHBWriteWaitUnit     = kFLEXSPI_AhbWriteWaitUnit2AhbCycle,
    .AHBWriteWaitInterval = 0,
};

void flexspi_nor_flash_init(FLEXSPI_Type *base)
{
    flexspi_config_t config;
    /* To store custom's LUT table in local. */
    uint32_t tempLUT[CUSTOM_LUT_LENGTH] = {0x00U};

    /* Copy LUT information from flash region into RAM region, because LUT update maybe corrupt read sequence(LUT[0])
     * and load wrong LUT table from FLASH region. */
    memcpy(tempLUT, customLUT, sizeof(tempLUT));

    flexspi_clock_init();

    /*Get FLEXSPI default settings and configure the flexspi. */
    FLEXSPI_GetDefaultConfig(&config);

    /*Set AHB buffer size for reading data through AHB bus. */
    config.ahbConfig.enableAHBPrefetch    = true;
    config.ahbConfig.enableAHBBufferable  = true;
    config.ahbConfig.enableReadAddressOpt = true;
    config.ahbConfig.enableAHBCachable    = true;
    config.rxSampleClock                  = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;
    FLEXSPI_Init(base, &config);

    /* Configure flash settings according to serial flash feature. */
    FLEXSPI_SetFlashConfig(base, &deviceconfig, FLASH_PORT);

    /* Update LUT table. */
    FLEXSPI_UpdateLUT(base, 0, tempLUT, CUSTOM_LUT_LENGTH);

    /* Do software reset. */
    FLEXSPI_SoftwareReset(base);
}

可以看到,FlexSPI的配置主要分为四步:时钟配置、FlexSPI特性配置、FlexSPI Flash配置和LUT表格配置。下面就来分析这四个步骤。

2 NOR Flash配置流程

2.1 时钟配置

FlexSPI的时钟需要正确配置,一是要看NOR Flash最高支持的读写频率,二是要看FlexSPI接口支持的最高频率。
(1)RT1176 FlexSPI时钟频率
这个再手册中似乎没有介绍,即FlexSPI的最高频率取决于其时钟源,FlexSPI的时钟源有以下几种,如下图所示:
在这里插入图片描述
可以看到,最高支持的频率为SYS_PLL2_CLK的528MHz。另外对于FlexSPI1的Secondary Pin Group来说,该组的最大支持频率为100MHz。
在这里插入图片描述

  • 图中写的是最大的Flash频率,实际上对于HyperRAM也是一样的有这个限制。

(2)W25Q256JV时钟频率
在这里插入图片描述
可以看到在该NOR Flash作为最基本的SPI半双工使用时,有133MHz;对于Dual I/O,即DIDO同时用于传输数据,速率可以达到266MHz;而对于Quad I/O,即在Dual I/O的基础上还有两个I/O引脚,则速率可以达到532MHz。

(3)时钟频率的选择
我们可以根据硬件的连接进行选择,比如是Quad I/O连接的,则可以选择更高的频率。但是我们在调程序的阶段还是保险地选择低一点的频率,这里选择100MHz。

2.2 FlexSPI特性配置

接下来是调用FLEXSPI_GetDefaultConfig获取一些针对FlexSPI特性结构体flexspi_config_t的一些默认配置,这个结构体中的每一个参数我在上一篇文章中有详细地介绍,由于参数非常多,而这个默认配置具有一定的普遍性,能兼容大部分的FlexSPI设备,这里就简单地回顾一下,上面的代码在默认参数的基础上修改的这几个参数:

config.ahbConfig.enableAHBPrefetch    = true;
config.ahbConfig.enableAHBBufferable  = true;
config.ahbConfig.enableReadAddressOpt = true;
config.ahbConfig.enableAHBCachable    = true;
config.rxSampleClock                  = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;

(1)enableAHBPrefetch:在完成当前AHB突发读取后,预先读取一些额外的数据到缓冲区中以加快后续读取,但这会增加功耗
(2)enableAHBBufferable :是否开启AHB写缓冲访问,在执行写命令后,不等待其执行完毕就返回,允许后续指令继续执行,提高系统的并发性
(3)enableReadAddressOpt:控制是否移除AHB读取突发起始地址对齐限制,若使能,突发读取地址没有字节对齐限制
(4)enableAHBCachable:使能AHB总线缓存读取,若命中则从缓存中读取,但要确保数据的一致性
(5)rxSampleClock:读数据使用的时钟源,对于四线的QSPI NOR Flash来说,一般没有DQS引脚。

  • DQS(Data Strobe Signal)数据选通信号,一般在八线的存储设备中会有这个引脚,且在SCLK双边沿采样时使用,用于Flash通知FlexSPI接收数据

对于W25Q256JV来说,没有DQS引脚,所以这里我们需要将rxSampleClock设置为kFLEXSPI_ReadSampleClkLoopbackInternally,即采样时钟信号是通过FlexSPI控制器内部产生的,并在内部回路中循环反馈。相比DQS引脚的Flash来说,内部循环反馈方式的采样速率会更低一些。

2.3 FlexSPI Flash配置

然后是对于特定Flash的一个配置,相关参数在flexspi_device_config_t中。来看一下这个结构体:

typedef struct _flexspi_device_config
{
    uint32_t flexspiRootClk;
    bool isSck2Enabled;
    uint32_t flashSize;
    flexspi_cs_interval_cycle_unit_t CSIntervalUnit;
    uint16_t CSInterval;
    uint8_t CSHoldTime;
    uint8_t CSSetupTime;
    uint8_t dataValidTime;
    uint8_t columnspace;
    bool enableWordAddress;
    uint8_t AWRSeqIndex;
    uint8_t AWRSeqNumber;
    uint8_t ARDSeqIndex;
    uint8_t ARDSeqNumber;
    /* AHB写等待单位 */
    flexspi_ahb_write_wait_unit_t AHBWriteWaitUnit;
    /* AHB写等待间隔,乘以AHB写等待单位得到AHB写等待周期数,即写完后等待外部存储器处理完数据的时间 */
    uint16_t AHBWriteWaitInterval;
    /* 是否启用写入屏蔽。指示在向外部设备写入数据时是否将FLEXSPI的DQS引脚用作写入屏蔽 */
    bool enableWriteMask;
} flexspi_device_config_t;

(1)flexspiRootClk:需要和前面设置的FlexSPI的时钟频率一致,建议还没调通前设置小一点
(2)isSck2Enabled:用在并行模式中,即硬件上在FlexSPI的PortA和PortB各接一个Flash,Flash的读写操作在Port A和Port B并行完成,FlexSPI将自动合并/拆分Flash读写的数据,此时需要使能SCK2时钟,这里设置为false就行。
(3)flashSize:Flash的大小,以KB为单位。对于W25Q256JV来说,有256Mb=32MB=32*1024KB。
(4)CSIntervalUnit和CSInterval:二者相乘即CS片选线的保持时间,有的芯片(特别是FPGA)对连续两次片选之间的间隔时间有一定的限制。对于W25Q256JV来说,没有这个限制,填0也行,这里就填一个大多数Flash都支持的默认间隔参数。
在这里插入图片描述
(5)CSHoldTime和CSSetupTime:即数据的保持时间和建立时间,来看一下W25Q256JV的手册:
在这里插入图片描述
可以看到,数据在CLK的上升沿被采样,在这之前数据应该至少建立1ns。而在CLK上升沿后,数据还需至少保持3ns。由于这里我们设置的FlexSPI频率很低,所以这两个参数随便设置,这里都设为典型值3,即3/12000000=250ns,完全足够了。
(6)columnspace:有些设备是采用行/列的方式寻址的,需要指定列地址寻址使用的位数。对于W25Q256JV来说,它没有列地址的概念,直接使用32位地址来寻址,所以columnspace设置为0。
在这里插入图片描述
(7)enableWordAddress:有的设备支持按字寻址,若使能,访问Flash的起始地址和数据长度都应该2字节对齐,若没有对齐,FlexSPI不会穿最低位给外部Flash,即会自动向下对齐。
在这里插入图片描述
对于W25Q256JV来说,在手册中没有看到按字寻址的相关内容,它只支持按字节寻址。

(8)AWRSeqIndex,AWRSeqNumber,ARDSeqIndex,ARDSeqNumber:即写/读序列的序列索引和数量。
其中序列索引xxxSeqIndex来说,它对应LUT表格中的指令索引。而对于某些存储设备(例如HyperFlash/HyperRam/Serial NAND),Flash编程访问是通过几个命令序列完成,也就是说AHB命令还将触发LUT中xxxSeqIndex后面的xxxSeqNumber-1个命令序列。

这里AWRSeqIndexAWRSeqNumber都设置为0,表示这里禁止了AHB直接写Flash的操作,用户可以使用IP指令调用LUT表格中的序列写Flash。ARDSeqIndexARDSeqNumber都设置为1,表示LUT表格中索引1处为读操作的序列。

(9)AHBWriteWaitUnit和AHBWriteWaitInterval:二者相乘为Flash写操作后需要等待的时间。W25Q256JV的page program时间如下:
在这里插入图片描述
可以看到没有最小值的限制,这里程序中就将AHBWriteWaitInterval赋0。

2.4 LUT表格配置

下面是LUT表格的代码示例,具体格式可以参考LUT表格的组成和FlexSPI结构体配置。这里实现了很多命令,除了读写命令可以在_flexspi_device_config中配置后由AHB访问外,其它的命令需要使用IP指令访问。一般来说,我们在_flexspi_device_config设置一个读命令,这样ROM BootLoader可以从NOR Flash读取程序并运行,而其它的命令,我们就使用IP指令访问。

#define NOR_CMD_LUT_SEQ_IDX_READ_NORMAL        7
#define NOR_CMD_LUT_SEQ_IDX_READ_FAST          13
#define NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD     0
#define NOR_CMD_LUT_SEQ_IDX_READSTATUS         1
#define NOR_CMD_LUT_SEQ_IDX_WRITEENABLE        2
#define NOR_CMD_LUT_SEQ_IDX_ERASESECTOR        3
#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE 6
#define NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD   4
#define NOR_CMD_LUT_SEQ_IDX_READID             8
#define NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG     9
#define NOR_CMD_LUT_SEQ_IDX_ENTERQPI           10
#define NOR_CMD_LUT_SEQ_IDX_EXITQPI            11
#define NOR_CMD_LUT_SEQ_IDX_READSTATUSREG      12
#define NOR_CMD_LUT_SEQ_IDX_ERASECHIP          5

const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
    /* Normal read mode -SDR */
    [4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x03, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
    [4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL + 1] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

    /* Fast read mode - SDR */
    [4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x0B, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
    [4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST + 1] = FLEXSPI_LUT_SEQ(
        kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_1PAD, 0x08, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

    /* Fast read quad mode - SDR */
    [4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xEB, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_4PAD, 0x18),
    [4 * NOR_CMD_LUT_SEQ_IDX_READ_FAST_QUAD + 1] = FLEXSPI_LUT_SEQ(
        kFLEXSPI_Command_DUMMY_SDR, kFLEXSPI_4PAD, 0x06, kFLEXSPI_Command_READ_SDR, kFLEXSPI_4PAD, 0x04),

    /* Read extend parameters */
    [4 * NOR_CMD_LUT_SEQ_IDX_READSTATUS] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x81, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

    /* Write Enable */
    [4 * NOR_CMD_LUT_SEQ_IDX_WRITEENABLE] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

    /* Erase Sector  */
    [4 * NOR_CMD_LUT_SEQ_IDX_ERASESECTOR] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xD7, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),

    /* Page Program - single mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x02, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
    [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_SINGLE + 1] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

    /* Page Program - quad mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
    [4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

    /* Read ID */
    [4 * NOR_CMD_LUT_SEQ_IDX_READID] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x9F, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

    /* Enable Quad mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x31, kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04),

    /* Enter QPI mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_ENTERQPI] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x35, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

    /* Exit QPI mode */
    [4 * NOR_CMD_LUT_SEQ_IDX_EXITQPI] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_4PAD, 0xF5, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

    /* Read status register */
    [4 * NOR_CMD_LUT_SEQ_IDX_READSTATUSREG] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x05, kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04),

    /* Erase whole chip */
    [4 * NOR_CMD_LUT_SEQ_IDX_ERASECHIP] =
        FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0xC7, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),
};
  • LUT中的每个Sequence可以有8个指令,如果不及8个指令可以留空,则默认全为0,正好表示停止指令序列:kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0x00,其中kFLEXSPI_Command_STOPkFLEXSPI_1PAD都是0。

下面就挑两个时序来分析一下,具体的LUT参数含义在LUT表格的组成和FlexSPI结构体配置。

(1)Normal read mode -SDR

[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL] =
   FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x03, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_READ_NORMAL + 1] =
   FLEXSPI_LUT_SEQ(kFLEXSPI_Command_READ_SDR, kFLEXSPI_1PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

来看一下时序图:
在这里插入图片描述

首先我们需要发发生指令码kFLEXSPI_Command_SDR,参数为0x03。接着,我们需要传输访问的地址,在W25Q256JV中传输行地址kFLEXSPI_Command_RADDR_SDR即可,参数为地址的宽度,为0x18=24。然后就可以调用kFLEXSPI_Command_READ_SDR来读取数据了,参数0x04表示读取四字节的数据,时序图后面省略了剩余的三字节的读取。其中第二个参数是数据传输使用的引脚个数,从图中可以看出都是一次传8位的,所以都设置为kFLEXSPI_1PAD

(2)Page Program - quad mode
quad mode顾名思义就是四线模式,QSPI有三种硬件连接方式及其对应的工作模式:Single-Bit SPI、Dual SPI、Quad SPI。其中Single-Bit SPI就是SPI接口(MISO和MOSI都是单向的),Dual SPI也是四个引脚,只不过它的MISO和MOSI都是双向的,而对于Quad SPI来说,就是在Dual SPI的基础上还多了两根数据线,如下图所示,左边是W25Q256JV的封装,右边是硬件连接方式。
在这里插入图片描述
现在来看一下quad mode下写数据的时序图:
在这里插入图片描述
这个指令允许一次写256字节的数据(写之前要先擦除),LUT时序如下,和前面的读指令很相似,就是kFLEXSPI_Command_WRITE_SDR的pad应该设置为kFLEXSPI_4PAD

[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD] =
   FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x32, kFLEXSPI_Command_RADDR_SDR, kFLEXSPI_1PAD, 0x18),
[4 * NOR_CMD_LUT_SEQ_IDX_PAGEPROGRAM_QUAD + 1] =
   FLEXSPI_LUT_SEQ(kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_4PAD, 0x04, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

注意,在使用IP指令执行写操作的时候,还需要保证QE位为1且Write Enable指令已经执行,如下图所示:
在这里插入图片描述
这两个操作就对应了LUT表格中的Enable Quad mode和Write Enable两条指令:

/* Enable Quad mode */
[4 * NOR_CMD_LUT_SEQ_IDX_WRITESTATUSREG] =
   FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x31, kFLEXSPI_Command_WRITE_SDR, kFLEXSPI_1PAD, 0x04),
/* Write Enable */
[4 * NOR_CMD_LUT_SEQ_IDX_WRITEENABLE] =
   FLEXSPI_LUT_SEQ(kFLEXSPI_Command_SDR, kFLEXSPI_1PAD, 0x06, kFLEXSPI_Command_STOP, kFLEXSPI_1PAD, 0),

手册中这两条指令的描述如下图所示:
在这里插入图片描述
可以看到Write Enable就直接执行0x06指令就行了,而Enable Quad mode要写状态寄存器2,写的长度为0x04,即4个字节,使用IP指令时,将写入内容设置为0x02U(bit1为QE)即可进入Quad mode

3 总结

本文通过W25Q256JV手册解释了使用FlexSPI初始化W25Q256JV NOR Flash的步骤,实际上就是根据手册中的命令来配置LUT表格,其它的一些时序参数在FlexSPI时钟低的时候随便设置都没有问题,因为肯定能满足。实际调这些外部存储器的时候,我的建议是把时钟降低,读寄存器中的Chip ID,这个读对了,再接下去调别的读写时序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。

问题 java.lang.IllegalArgumentException: 找到多个名为spring_web的片段。这是不合法的相对排序。 详细问题 笔者使用ServletJSP技术框架进行项目开发,对于项目进行国际化(即i18n,实现中英文页面转换),需要引入 下…

【C语言初阶(9)】函数2

文章目录 1. 函数的嵌套调用和链式访问1.1 嵌套调用1.2 链式访问 2. 函数的声明和定义2.1 函数定义2.2 函数声明2.3 函数的实际应用 3. 函数递归3.1 什么是递归?3.2 递归使用条件3.3 递归的案例3.4 递归的优缺点 4. 递归练习题 1. 函数的嵌套调用和链式访问 函数和函…

悟道·天鹰 Aquila + 天秤 FlagEval,打造大模型能力与评测标准双标杆

为推动大模型在产业落地和技术创新,智源研究院发布“开源商用许可语言大模型系列开放评测平台” 2 大重磅成果,打造“大模型进化流水线”,持续迭代、持续开源开放。 开源商用许可语言大模型系列 悟道天鹰(Aquila) 语…

教师资格证考试(高中数学)-考什么

目录 考什么 及格线 科一-综合素质 ​编辑 科二-教育知识与能力 科三-学科知识与教学能力(数学) 题型 考什么 及格线 大家要明确3个分数: ✅卷面分数:满分为150分,也就是大家平时拿到的试卷及真题卷面分数。 ✅报告分数:…

React 之 组件化开发

本文主讲解类组件,函数组件会在后续文章中学习 一、组件化开发 1. 概念 组件化是一种分而治之的思想: 如果将一个页面中所有的处理逻辑放在一起,处理起来会变得非常复杂,不利于后续的管理以及扩展 但如果讲一个页面拆分成一个个小…

Web安全-AntSword(中国蚁剑)Webshell管理工具使用

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 工具下载地址02 工具介绍03 使用案例04 参考资料 01 工具下载地址 https://github.com/AntSwordProject/蚂剑工具的下载分为两个部分,一个是项目核心源码antSword,另一个是…

【算法】树形DP ①(树的直径)

文章目录 知识准备例题543. 二叉树的直径124. 二叉树中的最大路径和2246. 相邻字符不同的最长路径 相关题目练习687. 最长同值路径 https://leetcode.cn/problems/longest-univalue-path/solution/shi-pin-che-di-zhang-wo-zhi-jing-dpcong-524j4/1617. 统计子树中城市之间最大…

测试的流程,jira工具的使用

目录: 测试流程价值与体系测试计划业务架构分析思路bug基本概念bug处理流程测试总结业务架构分析工具plantuml测试流程管理jira系统-测试流程定制测试流程管理 jira 系统-Bug管理流程定制 1.测试流程价值与体系 软件测试流程 完成软件测试工作的必要步骤 测试流…

用图计算解密大脑,蚂蚁技术研究院与复旦联手启动类脑研究

大脑为什么会产生意识?我们为什么会失眠?帕金森、阿尔兹海默等神经性疾病如何有效治疗?这一切谜题的背后都绕不开脑科学。可以说脑科学问题是人类面临的基础科学问题之一,是我们解密人类自身的“终极疆域”。 我们的大脑由大约86…

第十二章线程池

文章目录 享元模式手写数据库连接池 为什么需要线程池自定义线程池自定义拒绝策略接口自定义任务队列自定义线程池 JDK中的线程池常用的线程池的类和接口的之间的关系线程池状态构造方法线程池的工作流程拒绝策略 ExecuctorsnewFixedThreadPoolnewCachedThreadPoolnewSingleThr…

【Matlab】智能优化算法_平衡优化器算法EO

【Matlab】智能优化算法_平衡优化器算法EO 1.背景介绍2.数学模型2.1 初始化和功能评估2.2 平衡池和候选者(Ceq)2.3 指数项(F)2.3 生成率(G) 3.文件结构4.伪代码5.详细代码及注释5.1 EO.m5.2 Get_Functions_…

Linux基础服务7——lamp架构

文章目录 一、基本了解二、单机部署LAMP2.1 安装httpd2.2 安装mysql2.3 安装php环境2.4 配置apache 三、分离部署四、脚本单机部署 一、基本了解 LAMP架构介绍: lamp是由LinuxApacheMysql/MariaDBPhp/Perl/Python的一组动态网站或者服务器的开源软件。LAMP指Linux&a…

多元回归预测 | Matlab基于深度置信网络(DBN)回归预测,matlab代码回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab多元回归预测 | Matlab基于深度置信网络(DBN)回归预测,matlab代码回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分…

原来工作18年的企业大佬都是这样自定义企业微信扫码登录的样式

前言 由于企业微信扫码登录都是固定样式和模板,每个公司在前期使用的时候可能会使用原样的模版,随着业务场景的复杂及细分场景优化,这个固定样式的模版满足不了企业的需求,所以需要对模版进行改造,使它更加贴合企业业务…

【elementplus】解决el-table开启show-overflow-tooltip后,tooltip的显示会被表格边框遮挡的问题

如图所示: 原因: 1. el-table没有设置高度;2.就是被遮住了 解决: 方法一:给el-table设置高度 方法二: .el-table {overflow: visible !important;}如果不想给el-table设置高度,就直接使用方法二解决即可

Pycharm使用Anoconda配置虚拟环境

目录 1.Anoconda的介绍 2.Anaconda的作用 3.Anaconda的安装 4.Anaconda的配置 4.1添加镜像源 4.2创建、使用并切换虚拟环境 5.pycharm的集成 1.Anoconda的介绍 Anaconda是一个可用于科学计算的 Python 发行版,可以便捷获取和管理包,同时对环境进行…

Java内存结构分析

一、Java内存结构划分 Java虚拟机的运行时数据区域主要包括程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。 (1)程序计数器(Program Counter Register) 它是一块较小的内存空间,它可以看作是当前线程所执行的字…

SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议哦)

目录 前言 技术栈 功能展示 一、springboot项目添加netty依赖 二、netty服务端 三、netty客户端 四、测试 五、代码仓库地址 专属小彩蛋:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家…

OLS回归分析理论基础

前言 由于目前的实证研究中需要对变量间的因果关系进行定量分析,所以以伍德里奇和陈强两版本计量经济学教材为基础,有针对性的整理出OLS回归的相关知识,以解决实证分析中的实际问题。 1)本文重点:本文重点研究OLS下面板…

vs code koroFileHeader插件相关配置

https://www.cnblogs.com/melodyjerry/p/14449990.html 一、安装插件 koroFileHeader 插件作用:在文件顶部添加头部注释 VS Code 中搜索并安装插件 koroFileHeader; 点击插件右下方的 设置 按钮 > 扩展设置 > 点击 在settings.json 中编辑&…