@armink
2016-11-08T08:24:06.000000Z
字数 1975
阅读 1824
EasyFlash
Flash 设备初始化
rt_spi_flash_device_t w25q128;
w25q128 = rt_sfud_flash_probe("W25Q128", "spi30");
ymodem
MSH 命令,直接使用 SFUD 的 Flash 操作方法,默认从 0 地址开始下载
#include <rthw.h>
#include <rtthread.h>
#include <ymodem.h>
#include <finsh.h>
#include <shell.h>
#include <spi_flash.h>
#include <sfud.h>
#define FILE_FLASH_ADDR 0 /* 传输的 Flash 目标地址 */
#define FILE_SFUD_INDEX SFUD_W25Q128_DEVICE_INDEX
static uint32_t ymodem_file_total_size, ymodem_file_cur_size;
extern rt_spi_flash_device_t w25q128;
static enum rym_code ymodem_on_begin(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len) {
char *file_name, *file_size;
/* calculate and store file size */
file_name = (char *) &buf[0];
file_size = (char *) &buf[rt_strlen(file_name) + 1];
ymodem_file_total_size = atol(file_size);
ymodem_file_cur_size = 0;
/* erase flash */
if (sfud_erase((sfud_flash_t)(w25q128->user_data), FILE_FLASH_ADDR, ymodem_file_total_size)
!= SFUD_SUCCESS) {
/* if erase fail then quit this session */
return RYM_CODE_CAN;
}
return RYM_CODE_ACK;
}
static enum rym_code ymodem_on_data(struct rym_ctx *ctx, rt_uint8_t *buf, rt_size_t len) {
/* write file to flash */
if (sfud_write((sfud_flash_t)(w25q128->user_data), FILE_FLASH_ADDR + ymodem_file_cur_size, len, buf)
!= SFUD_SUCCESS) {
/* if write fail then quit this session */
return RYM_CODE_CAN;
}
ymodem_file_cur_size += len;
return RYM_CODE_ACK;
}
static void ymodem(uint8_t argc, char **argv) {
struct rym_ctx rctx;
rt_kprintf("Please select a file and use Ymodem to send.\r\n");
/* close finsh echo */
finsh_set_echo(false);
if (!rym_recv_on_device(&rctx, rt_device_find(RT_CONSOLE_DEVICE_NAME), RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND)) {
/* wait some time for terminal response finish */
rt_thread_delay(RT_TICK_PER_SECOND);
rt_kprintf("Write file to flash success.\n");
} else {
/* wait some time for terminal response finish */
rt_thread_delay(RT_TICK_PER_SECOND);
rt_kprintf("Write file to flash failed.\n");
}
/* reopen finsh echo */
finsh_set_echo(true);
}
MSH_CMD_EXPORT(ymodem, save file to flash by ymodem)
引脚 | ART_WiFi | IotCamera |
---|---|---|
MISO | A1 | 底板 MISO |
MOSI | A0 | 底板 MOSI |
SCK | A2 | 底板 SCK |
CS | A3 | 核心板 P7:3 |
GND | GND | 底板 GND |