|
|
2 лет назад | |
|---|---|---|
| .github | 2 лет назад | |
| docs | 3 лет назад | |
| inc | 2 лет назад | |
| port | 2 лет назад | |
| src | 2 лет назад | |
| LICENSE | 3 лет назад | |
| SConscript | 3 лет назад | |
| gen_pack.sh | 2 лет назад | |
| kk.flash_blob.pdsc | 2 лет назад | |
| readme.md | 2 лет назад |
利用MDK的FLM文件快速生成通用flash驱动。
片内 Flash 和 SPI Flash 的后端实现。extern bool target_flash_init(uint32_t flash_start, int32_t size);
extern bool target_flash_uninit(uint32_t flash_start);
extern int32_t target_flash_write(uint32_t addr, const uint8_t *buf, int32_t size);
extern int32_t target_flash_erase(uint32_t addr, int32_t size);
extern int32_t target_flash_read(uint32_t addr, const uint8_t *buf, int32_t size);
| doc | 文档 |
|---|---|
| src | 源代码 |
| inc | 头文件 |
| tools | 驱动生成工具 |
Agile Upgrade 遵循 Apache-2.0 许可,详见 LICENSE 文件。
在rtthread软件包中找到flash_blob,然后添加进工程。
添加对应芯片的代码进工程,如果有多个flash器件,可以连续添加。
注意:多个设备的话每个flash的FlashDevice 的设备起始地址不可重叠,flash抽象层根据地址,自动选择相应的驱动。
以上步骤完成后,就可以快速使用了,例如将YMODEM接收到的数据,写到flash中,代码如下:
uint8_t *ymodem_call_back_receive(uint8_t *pchBuffer, uint16_t hwSize)
{
static char *s_pchFileName = NULL, *s_pchFileSize = NULL;
static uint32_t s_wFileSize = 0, s_wRemainLen = 0, s_wOffSet = 0;
static enum {
START = 0,
RECEIVE,
END,
} s_tState = {START};
switch(s_tState) {
case START:
s_wOffSet = 0;
s_pchFileName = (char *)&pchBuffer[0];
s_pchFileSize = (char *)&pchBuffer[strlen(s_pchFileName) + 1];
s_wFileSize = atol(s_pchFileSize);
LOG_D("Ymodem file_name:%s", s_pchFileName);
LOG_D("Ymodem file_size:%d", s_wFileSize);
if(target_flash_init(APP_PART_ADDR, s_wFileSize) == false) {
LOG_E("target flash uninit.");
return NULL;
}
if(target_flash_erase(APP_PART_ADDR, s_wFileSize) < 0) {
LOG_E("target flash erase error.");
return NULL;
}
s_tState = RECEIVE;
break;
case RECEIVE:
s_wRemainLen = s_wFileSize - s_wOffSet;
if(hwSize > s_wRemainLen) {
hwSize = s_wRemainLen;
s_tState = END;
}
if(target_flash_write(APP_PART_ADDR + s_wOffSet, pchBuffer, hwSize) < 0) {
LOG_E("target flash write data error.");
return NULL;
}
s_wOffSet += hwSize;
break;
case END:
target_flash_uninit(APP_PART_ADDR);
s_tState = START;
break;
}
return s_chBuffer;
}