programmer.c

来自「一个非常有用的nand_flash的boot程序代码」· C语言 代码 · 共 48 行

C
48
字号
#include "example.h"
#include "nand.h"

void __attribute__((section(".programmer"))) program_booter()
{
	extern uint32 _booter_start, _booter_end, _programmer_end;
	void* start = (void*) KSEG1(KUSEG(&_booter_start));
	void* end = (void*) KSEG1(KUSEG(&_booter_end));
	void* scratch_pad = (void*) KSEG1(KUSEG(&_programmer_end));
	uint32 size = (uint32)end - (uint32)start;
	NandDevice* nand_device;
	
	printf("\n\nProgramming Boot Image\n");
	if(nand_device = (NandDevice*) nand_initialize())
	{
		progress_configure('.', '\t', 45, 512);
		printf("\tNand Device\n");
		printf("\tDescription: %s\n", nand_device->description);
		printf("\tModel:       %s\n", nand_device->model);
		printf("\tMaker:       0x%X\n", nand_device->maker);
		printf("\tDevice ID:   0x%X\n", nand_device->device_id);
		printf("\n");
		printf("\tImage Start: %X\n", start);
		printf("\tImage End: %X\n", end);
		printf("\tImage Size: %d bytes\n\n", size);
		
		printf("\tSwizzling Stage 1 Boot Loader\n");
		swizzle_memory(start, 512);
		
		printf("\tProgramming Nand\n");
		nand_program(start, size, 0, 0);
		
		/*
		printf("\tVerifying programmed data\n");
		nand_read(scratch_pad, size, 0, 0);

		if(compare_memory(start, scratch_pad, size))
			printf("Image programmed successfully\n");
		else
			printf("Error programming image!\n");
		*/
	}
	else
		printf("Error initializing nand device!\n");
		
	printf("\n\n");
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?