RISCV_IMI使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 02/17/2022

    1. 概述

    本文讲述Sigmastar IMI驱动在riscv下的使用方法,IMI驱动提供了往IMI中写入和读取数据的接口,保存在IMI中的数据,系统warm reset以及被看门狗重启后,数据不会丢失。

    2. RISCV代码及配置

    2.1. SYSDESC节点

    IMI对应的sysdesc节点如下所示。

    1. <imi>
    2.  [offset_u32] 0x35000;
    3.  [size_u32] 0x5000;
    4.  [status_u8] 0;
    

    2.2. 节点属性含义

    SYSDESC节点各属性含义如下表所示。

    属性值 描述 备注
    offset_u32 用于指定从IMI起始地址开始,偏移多少bytes作为IMI驱动使用的存储空间起始地址 需要时进行调整
    size_u32 用于指定IMI驱动可以使用的存储空间大小 需要时进行调整,用户实际可以存储的数据量是这里size_u32减去4(最后4字节作为checksum校验的存储空间)
    status_u8 选择是否使能IMI驱动 根据需要修改

    3. API使用说明

    3.1 返回值说明

    返回值 说明
    DRV_IMI_SUCCESS 操作成功
    DRV_IMI_PARAM_INVALID DrvIMIWrite和DrvIMIRead的参数u16Size超过了最大允许的值(大于前面"节点属性含义"中size_u32定义的值减去4个bytes的大小)
    DRV_IMI_CONFIG_INVALID "节点属性"定义的值不合法,比如size_u32小于等于4
    DRV_IMI_CORRUPTED DrvIMIRead发现内容CRC32校验失败时,会返回这个值
    DRV_IMI_UNKNOWN 其他未知的错误

    3.2 drv_imi_write

    /**
     * DrvIMIWrite - write data into IMI
     * @pu8Buffer: data buffer;
     * @u16Size: data size
     *
     * Returns DRV_IMI_SUCCESS on success, or other error numbers on failure.
     */
    imi_error_code drv_imi_write(u8 *pu8Buffer, u16 u16Size);
    

    3.3 drv_imi_read

    /**
     * DrvIMIRead - read data from IMI
     * @pu8Buffer: data buffer;
     * @u16Size: buffer size
     *
     * Returns DRV_IMI_SUCCESS on success, or other error numbers on failure.
     */
    imi_error_code drv_imi_read(u8 *pu8Buffer, u16 u16Size);
    

    4. 测试

    4.1. RISCV imi test cmd

    参考 DrvIMITest函数的实现代码(sc/driver/sysdriver/imi/drv/drv_imi.c)

    imi write cmd会往IMI存储空间写入指定数量的pattern数据;

    imi read cmd则会读取指定数量的pattern数据,并判断数据是否被破坏。

    imi read和imi write配套使用,可以用于测试IMI驱动。