您尚未登录。

#1 Re: 全志 SOC » 用f1C200S加TF卡做了一个U盘程序,还差一个在电脑中鼠标右键"弹出"功能有问题 » 2023-11-16 21:02:37

jiaowoxiaolu 说:

弹出应该是电脑端的事情,底下不需要特别处理

现在遇到的问题是,电脑端弹出已经成功,但是还是能从电脑端打开u盘,跟市面上的u盘不一样。

#2 全志 SOC » 用f1C200S加TF卡做了一个U盘程序,还差一个在电脑中鼠标右键"弹出"功能有问题 » 2023-11-14 22:36:12

houge
回复: 2

接标题,PC机右键"弹出"时,USB口会产生什么中断或者PC机发送什么数据呢?f1C200S怎么检测PC机已经"弹出"了?

#3 Re: 全志 SOC » 求助F1C200S裸机程序下载到spi flash不运行,加载到dram则可以运行 » 2023-10-27 21:38:07

哇酷小二 说:

V3s SPI NAND u-boot @openwrt
https://whycan.com/t_3123.html#p26419

谢谢,原因找到了,是flash的问题,原来的flash是GD5F1GQ4UCYIG,换w25q128就可以了,但是还是没找到解决的办法,等我找到再发帖分享

#4 全志 SOC » 求助F1C200S裸机程序下载到spi flash不运行,加载到dram则可以运行 » 2023-10-22 20:04:14

houge
回复: 4

新手,做了一个boot裸机程序,使用keil编译器,编译了一个boot.bin文件,想烧录到spi flash中运行,步骤如下:
1.用gcc 将mksunxi.c生成mksunxi.exe

mksunxi.c代码如下:

struct boot_head_t {
	uint32_t instruction;
	uint8_t magic[8];
	uint32_t checksum;
	uint32_t length;
	uint8_t spl_signature[4];
	uint32_t fel_script_address;
	uint32_t fel_uenv_length;
	uint32_t dt_name_offset;
	uint32_t reserved1;
	uint32_t boot_media;
	uint32_t string_pool[13];
};

#define ALIGN(x,a)      __ALIGN_MASK((x),(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask)    (((x)+(mask))&~(mask))

#define SUN4I_SRAM_SIZE (24 * 1024)
#define SRAM_LOAD_MAX_SIZE (SUN4I_SRAM_SIZE - sizeof(boot_file_head_t))
#define BLOCK_SIZE 2048

int main (int argc, char *argv[])
{
	struct boot_head_t * h;
	FILE * fp;
	char * buffer;
	int buflen, filelen;
	uint32_t * p;
	uint32_t sum;
	int i, l, loop;
	
	if(argc != 2)
	{
		printf("Usage: mksunxi <bootloader>\n");
		return -1;
	}

	fp = fopen(argv[1], "r+b");
	if(fp == NULL)
	{
		printf("Open bootloader error\n");
		return -1;
	}
	fseek(fp, 0L, SEEK_END);
	filelen = ftell(fp);
	fseek(fp, 0L, SEEK_SET);
	
	if(filelen <= sizeof(struct boot_head_t))
	{
		fclose(fp);
		printf("The size of bootloader too small\n");
		return -1;
	}

	buflen = ALIGN(filelen, BLOCK_SIZE);
	buffer = malloc(buflen);
	memset(buffer, 0, buflen);
	if(fread(buffer, 1, filelen, fp) != filelen)
	{
		printf("Can't read bootloader\n");
		free(buffer);
		fclose(fp);
		return -1;
	}

	h = (struct boot_head_t *)buffer;
	p = (uint32_t *)h;
    h->length = ALIGN(h->length, BLOCK_SIZE);//align block size
	l = le32_to_cpu(h->length);
	h->checksum = cpu_to_le32(0x5F0A6C39);
	loop = l >> 2;
    printf("bootloader size= %x\n", h->length);
	for(i = 0, sum = 0; i < loop; i++)
		sum += le32_to_cpu(p[i]);
	h->checksum = cpu_to_le32(sum);
	
	fseek(fp, 0L, SEEK_SET);
	if(fwrite(buffer, 1, buflen, fp) != buflen)
	{
		printf("Write bootloader error\n");
		free(buffer);
		fclose(fp);
		return -1;
	}

	fclose(fp);
	printf("The bootloader head has been fixed\n");
	return 0;
}

其中#define BLOCK_SIZE 2048 //原来是512,我改成了2048,因为我使用的flash  页读写是2048bytes,不知道是不是这个地方没改对?

2.使用mksunxi.exe 修改boot.bin文件

3.使用 sunxi-fel.exe -p spiflash-write 0x0 boot.bin烧录到spi flash中,不能运行,还是在fel模式。

4.使用sunxi-fel.exe spl boot.bin加载到dram中,可以运行,debug串口正常打印。
不知道问题出在哪里了?

#5 Re: 全志 SOC » 分享一个自己做的T113-S3裸机IAR工程,有bootloader和led闪烁demo » 2023-10-21 21:41:29

我也用mksunxi.exe生成了bin文件,但是就是在nand flash跑不起来,是不是mksunxi.exe有什么要修改的?

#7 Re: 全志 SOC » 连续多个晚上熬夜,终于搞定F1C100S裸奔(从SPI Flash启动) » 2023-10-20 23:23:50

请问在哪里可以下载到mksunxi.exe,难怪我下载裸机程序到spi中,还是运行不了。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn