RISCV_IMI使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 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驱动。