Removed romboot from tree - replaced by dfboot
SVN-Revision: 7500
This commit is contained in:
parent
c8f4767eaf
commit
04479e30ad
9 changed files with 0 additions and 3380 deletions
|
@ -9,13 +9,11 @@ include $(TOPDIR)/rules.mk
|
||||||
include $(INCLUDE_DIR)/image.mk
|
include $(INCLUDE_DIR)/image.mk
|
||||||
|
|
||||||
define Build/Clean
|
define Build/Clean
|
||||||
# $(MAKE) -C romboot clean
|
|
||||||
$(MAKE) -C dfboot clean
|
$(MAKE) -C dfboot clean
|
||||||
$(MAKE) -C u-boot clean
|
$(MAKE) -C u-boot clean
|
||||||
endef
|
endef
|
||||||
|
|
||||||
define Build/Compile
|
define Build/Compile
|
||||||
# $(MAKE) -C romboot compile
|
|
||||||
$(MAKE) -C dfboot compile
|
$(MAKE) -C dfboot compile
|
||||||
$(MAKE) -C u-boot compile
|
$(MAKE) -C u-boot compile
|
||||||
$(KDIR)/u-boot-1.1.4/tools/ubparams
|
$(KDIR)/u-boot-1.1.4/tools/ubparams
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
|
||||||
#
|
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
|
||||||
# See /LICENSE for more information.
|
|
||||||
#
|
|
||||||
# $Id$
|
|
||||||
|
|
||||||
include $(TOPDIR)/rules.mk
|
|
||||||
include $(INCLUDE_DIR)/kernel.mk
|
|
||||||
|
|
||||||
PKG_NAME:=romboot
|
|
||||||
PKG_VERSION:=0.1
|
|
||||||
PKG_RELEASE:=1
|
|
||||||
|
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)
|
|
||||||
PKG_SOURCE:=$(PKG_NAME).tar.gz
|
|
||||||
PKG_SOURCE_URL:=http://www.teest.com/at91
|
|
||||||
PKG_MD5SUM:=
|
|
||||||
PKG_CAT:=zcat
|
|
||||||
|
|
||||||
CRLF_WORKAROUND=1
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
|
||||||
|
|
||||||
define Build/InstallDev
|
|
||||||
dd if=$(PKG_BUILD_DIR)/romboot.bin of=$(PKG_BUILD_DIR)/romboot.block bs=32k count=1 conv=sync
|
|
||||||
endef
|
|
||||||
|
|
||||||
$(eval $(call Build/DefaultTargets))
|
|
|
@ -1,57 +0,0 @@
|
||||||
diff -uNr romboot/main.cpp romboot.new/main.cpp
|
|
||||||
--- romboot/main.cpp 2004-07-16 17:10:04.000000000 +0200
|
|
||||||
+++ romboot.new/main.cpp 2006-03-03 02:27:37.000000000 +0100
|
|
||||||
@@ -23,12 +23,12 @@
|
|
||||||
#define AT91C_UBOOT_DATAFLASH_ADDR 0xC0008000
|
|
||||||
|
|
||||||
// crystal= 18.432MHz
|
|
||||||
-//#define AT91C_PLLA_VALUE 0x2026BE04 // -> 179.712MHz
|
|
||||||
-//#define AT91C_PLLA_MCK 0x0000202
|
|
||||||
+#define AT91C_PLLA_VALUE 0x2026BE04 // -> 179.712MHz
|
|
||||||
+#define AT91C_PLLA_MCK 0x0000202
|
|
||||||
|
|
||||||
// crystal= 20.000MHz
|
|
||||||
-#define AT91C_PLLA_VALUE 0x2023BE04 // -> 180MHz
|
|
||||||
-#define AT91C_PLLA_MCK 0x0000202
|
|
||||||
+//#define AT91C_PLLA_VALUE 0x2023BE04 // -> 180MHz
|
|
||||||
+//#define AT91C_PLLA_MCK 0x0000202
|
|
||||||
|
|
||||||
#define DELAY_MAIN_FREQ 1000
|
|
||||||
#define DISP_LINE_LEN 16
|
|
||||||
@@ -151,7 +151,7 @@
|
|
||||||
//*-----------------------------------------------------------------------------
|
|
||||||
void AT91F_DisplayMenu(void)
|
|
||||||
{
|
|
||||||
- printf("\n\rATMEL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
|
||||||
+ printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
|
||||||
printf(menu_separ);
|
|
||||||
AT91F_DataflashPrintInfo();
|
|
||||||
printf(menu_separ);
|
|
||||||
@@ -306,6 +306,19 @@
|
|
||||||
AT91F_SetPLL();
|
|
||||||
}
|
|
||||||
|
|
||||||
+void LedCode(void)
|
|
||||||
+{
|
|
||||||
+ int *pRegister;
|
|
||||||
+ pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
|
||||||
+ *pRegister = 0x3c00;
|
|
||||||
+ pRegister = (int *)0xFFFFF810; // Output Enable reg
|
|
||||||
+ *pRegister = 0x3c00;
|
|
||||||
+ pRegister = (int *)0xFFFFF830; // Set data
|
|
||||||
+ *pRegister = 0x1400;
|
|
||||||
+ pRegister = (int *)0xFFFFF834; // Clear bits
|
|
||||||
+ *pRegister = 0x2800;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
|
||||||
{
|
|
||||||
printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
|
||||||
@@ -313,6 +326,7 @@
|
|
||||||
printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
|
||||||
//* Reset registers
|
|
||||||
AT91F_ResetRegisters();
|
|
||||||
+ LedCode();
|
|
||||||
Jump(AT91C_UBOOT_ADDR);
|
|
||||||
while(1);
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
--- romboot/Makefile.old 2007-03-18 09:29:20.000000000 +0100
|
|
||||||
+++ romboot/Makefile 2007-03-18 09:29:13.000000000 +0100
|
|
||||||
@@ -0,0 +1,47 @@
|
|
||||||
+LINKFLAGS= -T elf32-littlearm.lds -Ttext 0
|
|
||||||
+COMPILEFLAGS= -Os
|
|
||||||
+TARGET=romboot
|
|
||||||
+OBJFILES=cstartup_ram.o asm_isr.o jump.o at45.o com.o dataflash.o \
|
|
||||||
+ init.o main.o stdio.o _udivsi3.o _umodsi3.o div0.o
|
|
||||||
+LIBRARIES=
|
|
||||||
+INCLUDES= -Iinclude
|
|
||||||
+
|
|
||||||
+all:$(TARGET)
|
|
||||||
+
|
|
||||||
+$(TARGET): $(OBJFILES)
|
|
||||||
+ $(LD) $(OBJFILES) -o $(TARGET).out $(LINKFLAGS) -n
|
|
||||||
+ $(OBJCOPY) $(TARGET).out -O binary $(TARGET).bin
|
|
||||||
+
|
|
||||||
+asm_isr.o: asm_isr.S
|
|
||||||
+ $(CC) -c -Iinclude -o $@ $<
|
|
||||||
+
|
|
||||||
+cstartup_ram.o: cstartup_ram.S
|
|
||||||
+ $(CC) -c -Iinclude -o $@ $<
|
|
||||||
+
|
|
||||||
+jump.o: jump.S
|
|
||||||
+ $(CC) -c -Iinclude -o $@ $<
|
|
||||||
+
|
|
||||||
+_udivsi3.o: _udivsi3.S
|
|
||||||
+ $(CC) -c $<
|
|
||||||
+
|
|
||||||
+_umodsi3.o: _umodsi3.S
|
|
||||||
+ $(CC) -c $<
|
|
||||||
+
|
|
||||||
+#%.o: %.S
|
|
||||||
+# $(CC) -c $(INCLUDES) -o $@ $<
|
|
||||||
+
|
|
||||||
+%.o: %.cpp
|
|
||||||
+ $(CC) -c $(COMPILEFLAGS) $(INCLUDES) -o $@ $<
|
|
||||||
+
|
|
||||||
+div0.o: div0.c
|
|
||||||
+ $(CC) -c $(COMPILEFLAGS) $<
|
|
||||||
+
|
|
||||||
+clean:
|
|
||||||
+ rm $(OBJFILES) -f
|
|
||||||
+ rm *~ -f
|
|
||||||
+ rm $(TARGET) -f
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+#LD="$CROSS"ld
|
|
||||||
+
|
|
||||||
+
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,948 +0,0 @@
|
||||||
diff -urN romboot.old/init.cpp romboot/init.cpp
|
|
||||||
--- romboot.old/init.cpp 2007-03-24 13:34:19.000000000 +0100
|
|
||||||
+++ romboot/init.cpp 2007-03-24 12:23:19.000000000 +0100
|
|
||||||
@@ -207,9 +207,10 @@
|
|
||||||
AT91F_US_EnableRx((AT91PS_USART)AT91C_BASE_DBGU);
|
|
||||||
|
|
||||||
/* Enable PIO to access the LEDs */
|
|
||||||
- AT91C_BASE_PIOB->PIO_PER = AT91C_PIO_PB2;
|
|
||||||
- AT91C_BASE_PIOB->PIO_OER = AT91C_PIO_PB2;
|
|
||||||
- AT91C_BASE_PIOB->PIO_CODR = AT91C_PIO_PB2;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_PER = AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_OER = AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
|
||||||
|
|
||||||
// AT91F_DBGU_Printk("\n\rAT91F_LowLevelInit(): Debug channel initialized\n\r");
|
|
||||||
}
|
|
||||||
diff -urN romboot.old/main.cpp romboot/main.cpp
|
|
||||||
--- romboot.old/main.cpp 2007-03-24 13:34:19.000000000 +0100
|
|
||||||
+++ romboot/main.cpp 2007-03-24 12:28:55.000000000 +0100
|
|
||||||
@@ -13,6 +13,7 @@
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
#include <AT91RM9200.h>
|
|
||||||
#include <lib_AT91RM9200.h>
|
|
||||||
+#include <AT91C_MCI_Device.h>
|
|
||||||
|
|
||||||
#include "com.h"
|
|
||||||
#include "main.h"
|
|
||||||
@@ -39,16 +40,31 @@
|
|
||||||
extern void AT91F_DBGU_Printk(char *);
|
|
||||||
extern "C" void AT91F_ST_ASM_Handler(void);
|
|
||||||
extern "C" void Jump(unsigned int addr);
|
|
||||||
-extern int mci_main(void);
|
|
||||||
+extern int AT91F_MCI_Init(void);
|
|
||||||
+#define TRUE 1
|
|
||||||
+#define FALSE 0
|
|
||||||
+
|
|
||||||
+/* from trxhdr.h */
|
|
||||||
+
|
|
||||||
+#define TRX_MAGIC 0x30524448 /* "HDR0" */
|
|
||||||
+#define TRX_VERSION 1
|
|
||||||
+
|
|
||||||
+struct trx_header {
|
|
||||||
+ unsigned int magic;
|
|
||||||
+ unsigned int len;
|
|
||||||
+ unsigned int crc32;
|
|
||||||
+ unsigned int flag_version;
|
|
||||||
+ unsigned int offsets[3];
|
|
||||||
+};
|
|
||||||
|
|
||||||
//const char *menu_separ = "*----------------------------------------*\n\r";
|
|
||||||
|
|
||||||
const char *menu_dataflash = {
|
|
||||||
- "1: DL DF [ad]\n\r"
|
|
||||||
- "2: RD DF [ad]\n\r"
|
|
||||||
- "3: CP SD\n\r"
|
|
||||||
- "4: U-BOOT\n\r"
|
|
||||||
- "5: RM BL in DF\n\r"
|
|
||||||
+ "1: Download DF [addr]\n\r"
|
|
||||||
+ "2: Read DF [addr]\n\r"
|
|
||||||
+ "3: Copy SD-Card\n\r"
|
|
||||||
+ "4: Start U-BOOT\n\r"
|
|
||||||
+ "5: Clear bootloder\n\r"
|
|
||||||
};
|
|
||||||
|
|
||||||
//* Globales variables
|
|
||||||
@@ -155,14 +171,15 @@
|
|
||||||
//*-----------------------------------------------------------------------------
|
|
||||||
void AT91F_DisplayMenu(void)
|
|
||||||
{
|
|
||||||
- printf("\n\rFDL SD-Card LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
|
||||||
-// printf(menu_separ);
|
|
||||||
- AT91F_DataflashPrintInfo();
|
|
||||||
-// printf(menu_separ);
|
|
||||||
printf(menu_dataflash);
|
|
||||||
-// printf(menu_separ);
|
|
||||||
}
|
|
||||||
|
|
||||||
+void AT91F_DisplayIntro(void)
|
|
||||||
+{
|
|
||||||
+ printf("\n\rFDL LOADER %s %s %s\n\r", AT91C_VERSION, __DATE__, __TIME__);
|
|
||||||
+ AT91F_DataflashPrintInfo();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
//*-----------------------------------------------------------------------------
|
|
||||||
//* Function Name : AsciiToHex()
|
|
||||||
//* Object : ascii to hexa conversion
|
|
||||||
@@ -311,23 +328,24 @@
|
|
||||||
AT91F_SetPLL();
|
|
||||||
}
|
|
||||||
|
|
||||||
-/*void LedCode(void)
|
|
||||||
+/*
|
|
||||||
+void LedCode(void)
|
|
||||||
{
|
|
||||||
int *pRegister;
|
|
||||||
pRegister = (int *)0xFFFFF800; // Enable port C peripheral reg
|
|
||||||
- *pRegister = 0x3c00;
|
|
||||||
+ *pRegister = (AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15);
|
|
||||||
pRegister = (int *)0xFFFFF810; // Output Enable reg
|
|
||||||
- *pRegister = 0x3c00;
|
|
||||||
+ *pRegister = (AT91C_PIO_PC7 | AT91C_PIO_PC8 | AT91C_PIO_PC14 | AT91C_PIO_PC15);
|
|
||||||
pRegister = (int *)0xFFFFF830; // Set data
|
|
||||||
- *pRegister = 0x1400;
|
|
||||||
+ *pRegister = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
|
||||||
pRegister = (int *)0xFFFFF834; // Clear bits
|
|
||||||
- *pRegister = 0x2800;
|
|
||||||
+ *pRegister = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
+
|
|
||||||
void AT91F_StartUboot(unsigned int dummy, void *pvoid)
|
|
||||||
{
|
|
||||||
- //printf("Load U-BOOT from dataflash[%x] to SDRAM[%x]\n\r", AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_ADDR);
|
|
||||||
read_dataflash(AT91C_UBOOT_DATAFLASH_ADDR, AT91C_UBOOT_SIZE, (char *)(AT91C_UBOOT_ADDR));
|
|
||||||
//printf("Set PLLA to 180Mhz and Master clock to 60Mhz and start U-BOOT\n\r");
|
|
||||||
//* Reset registers
|
|
||||||
@@ -337,6 +355,67 @@
|
|
||||||
while(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define AT91C_MCI_TIMEOUT 1000000
|
|
||||||
+
|
|
||||||
+extern AT91S_MciDevice MCI_Device;
|
|
||||||
+
|
|
||||||
+extern void AT91F_MCIDeviceWaitReady(unsigned int);
|
|
||||||
+extern int AT91F_MCI_ReadBlockSwab(AT91PS_MciDevice, int, unsigned int *, int);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+int Program_From_MCI(void)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ unsigned int Max_Read_DataBlock_Length;
|
|
||||||
+ int block = 0;
|
|
||||||
+ int buffer = AT91C_DOWNLOAD_BASE_ADDRESS;
|
|
||||||
+ int bufpos = AT91C_DOWNLOAD_BASE_ADDRESS;
|
|
||||||
+ int NbPage = 0;
|
|
||||||
+ struct trx_header *p;
|
|
||||||
+ unsigned int data;
|
|
||||||
+
|
|
||||||
+ p = (struct trx_header *)bufpos;
|
|
||||||
+
|
|
||||||
+ Max_Read_DataBlock_Length = MCI_Device.pMCI_DeviceFeatures->Max_Read_DataBlock_Length;
|
|
||||||
+
|
|
||||||
+ AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
|
||||||
+
|
|
||||||
+ AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
|
||||||
+
|
|
||||||
+ if (p->magic != TRX_MAGIC)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ printf("Read SD-Card\n\r");
|
|
||||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
|
||||||
+ for (i=0; i<(p->len/512); i++) {
|
|
||||||
+ AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
|
||||||
+ block++;
|
|
||||||
+ bufpos += Max_Read_DataBlock_Length;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ NbPage = 0;
|
|
||||||
+ i = dataflash_info[0].Device.pages_number;
|
|
||||||
+ while(i >>= 1)
|
|
||||||
+ NbPage++;
|
|
||||||
+ i = ((p->offsets[1] - p->offsets[0])/ 512) + 1 + (NbPage << 13) + (dataflash_info[0].Device.pages_size << 17);
|
|
||||||
+ *(int *)(buffer + p->offsets[0] + AT91C_OFFSET_VECT6) = i;
|
|
||||||
+
|
|
||||||
+ printf("Write romboot\n\r");
|
|
||||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC14;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8;
|
|
||||||
+ write_dataflash(0xc0000000, buffer + p->offsets[0], p->offsets[1] - p->offsets[0]);
|
|
||||||
+ printf("Write u-boot\n\r");
|
|
||||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
|
||||||
+ write_dataflash(0xc0008000, buffer + p->offsets[1], p->offsets[2] - p->offsets[1]);
|
|
||||||
+ printf("Write knl/root\n\r");
|
|
||||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC8 | AT91C_PIO_PC15;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC7 | AT91C_PIO_PC14;
|
|
||||||
+ write_dataflash(0xc0042000, buffer + p->offsets[2], p->len - p->offsets[2]);
|
|
||||||
+ AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
|
||||||
+ AT91C_BASE_PIOC->PIO_SODR = AT91C_PIO_PC7 | AT91C_PIO_PC15;
|
|
||||||
+ return TRUE;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
//* Function Name : main
|
|
||||||
@@ -357,6 +436,7 @@
|
|
||||||
unsigned int crc1 = 0, crc2 = 0;
|
|
||||||
volatile int device;
|
|
||||||
int NbPage;
|
|
||||||
+ int mci_present;
|
|
||||||
|
|
||||||
stdin = fopen(0, at91_dbgu_getc);
|
|
||||||
stdout = fopen(at91_dbgu_putc, 0);
|
|
||||||
@@ -387,6 +467,15 @@
|
|
||||||
|
|
||||||
// DataFlash on SPI Configuration
|
|
||||||
AT91F_DataflashInit ();
|
|
||||||
+ AT91F_DisplayIntro();
|
|
||||||
+ mci_present = AT91F_MCI_Init();
|
|
||||||
+
|
|
||||||
+#ifdef PRODTEST
|
|
||||||
+ if (mci_present) {
|
|
||||||
+ Program_From_MCI();
|
|
||||||
+ AT91F_StartUboot(0, (void *)0);
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
|
||||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
|
||||||
@@ -396,7 +485,7 @@
|
|
||||||
|
|
||||||
// stop tempo
|
|
||||||
svcUbootTempo.Stop(&svcUbootTempo);
|
|
||||||
-
|
|
||||||
+
|
|
||||||
while(1) {
|
|
||||||
while(command == 0) {
|
|
||||||
AddressToDownload = AT91C_DOWNLOAD_BASE_ADDRESS;
|
|
||||||
@@ -444,7 +533,8 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case '3':
|
|
||||||
- mci_main();
|
|
||||||
+ if (mci_present)
|
|
||||||
+ Program_From_MCI();
|
|
||||||
command=0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -461,7 +551,6 @@
|
|
||||||
*i = 0;
|
|
||||||
}
|
|
||||||
write_dataflash(0xc0000000, 0x20000000, 0x4000);
|
|
||||||
- printf("BL CLR\r\n");
|
|
||||||
command = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
diff -urN romboot.old/main.h romboot/main.h
|
|
||||||
--- romboot.old/main.h 2007-03-24 13:34:19.000000000 +0100
|
|
||||||
+++ romboot/main.h 2007-03-23 19:06:52.000000000 +0100
|
|
||||||
@@ -27,7 +27,7 @@
|
|
||||||
|
|
||||||
#define AT91C_OFFSET_VECT6 0x14 //* Offset for ARM vector 6
|
|
||||||
|
|
||||||
-#define AT91C_VERSION "VER 1.02"
|
|
||||||
+#define AT91C_VERSION "VER 1.03"
|
|
||||||
// Global variables and functions definition
|
|
||||||
extern unsigned int GetTickCount(void);
|
|
||||||
#endif
|
|
||||||
diff -urN romboot.old/Makefile romboot/Makefile
|
|
||||||
--- romboot.old/Makefile 2007-03-24 13:34:19.000000000 +0100
|
|
||||||
+++ romboot/Makefile 2007-03-24 10:45:38.000000000 +0100
|
|
||||||
@@ -1,12 +1,17 @@
|
|
||||||
LINKFLAGS= -T elf32-littlearm.lds -Ttext 0
|
|
||||||
COMPILEFLAGS= -Os
|
|
||||||
TARGET=romboot
|
|
||||||
+TARGET2=rbptest
|
|
||||||
+
|
|
||||||
OBJFILES=cstartup_ram.o asm_isr.o asm_mci_isr.o jump.o at45.o com.o dataflash.o \
|
|
||||||
- mci_device.o mci_main.o init.o main.o stdio.o _udivsi3.o _umodsi3.o div0.o
|
|
||||||
+ mci_device.o init.o main.o stdio.o _udivsi3.o _umodsi3.o div0.o
|
|
||||||
+OBJFILES2=cstartup_ram.o asm_isr.o asm_mci_isr.o jump.o at45.o com.o dataflash.o \
|
|
||||||
+ mci_device.o init.o ptmain.o stdio.o _udivsi3.o _umodsi3.o div0.o
|
|
||||||
+
|
|
||||||
LIBRARIES=
|
|
||||||
INCLUDES= -Iinclude
|
|
||||||
|
|
||||||
-all:$(TARGET)
|
|
||||||
+all:$(TARGET) $(TARGET2)
|
|
||||||
|
|
||||||
$(TARGET): $(OBJFILES)
|
|
||||||
$(LD) $(OBJFILES) -o $(TARGET).out $(LINKFLAGS) -n
|
|
||||||
@@ -14,6 +19,12 @@
|
|
||||||
$(OBJDUMP) -h -s $(TARGET).out > $(TARGET).lss
|
|
||||||
$(NM) -n $(TARGET).out | grep -v '\( [aUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $(TARGET).map
|
|
||||||
|
|
||||||
+$(TARGET2): $(OBJFILES2)
|
|
||||||
+ $(LD) $(OBJFILES2) -o $(TARGET2).out $(LINKFLAGS) -n
|
|
||||||
+ $(OBJCOPY) $(TARGET2).out -O binary $(TARGET2).bin
|
|
||||||
+ $(OBJDUMP) -h -s $(TARGET2).out > $(TARGET2).lss
|
|
||||||
+ $(NM) -n $(TARGET2).out | grep -v '\( [aUw] \)\|\(__crc_\)\|\( \$[adt]\)' > $(TARGET2).map
|
|
||||||
+
|
|
||||||
asm_isr.o: asm_isr.S
|
|
||||||
$(CC) -c -Iinclude -o $@ $<
|
|
||||||
|
|
||||||
@@ -32,6 +43,12 @@
|
|
||||||
_umodsi3.o: _umodsi3.S
|
|
||||||
$(CC) -c $<
|
|
||||||
|
|
||||||
+main.o: main.cpp
|
|
||||||
+ $(CC) -c $(COMPILEFLAGS) $(INCLUDES) -o main.o $<
|
|
||||||
+
|
|
||||||
+ptmain.o: main.cpp
|
|
||||||
+ $(CC) -c $(COMPILEFLAGS) $(INCLUDES) -D PRODTEST -o ptmain.o $<
|
|
||||||
+
|
|
||||||
#%.o: %.S
|
|
||||||
# $(CC) -c $(INCLUDES) -o $@ $<
|
|
||||||
|
|
||||||
diff -urN romboot.old/mci_device.cpp romboot/mci_device.cpp
|
|
||||||
--- romboot.old/mci_device.cpp 2007-03-24 13:34:19.000000000 +0100
|
|
||||||
+++ romboot/mci_device.cpp 2007-03-24 11:23:38.000000000 +0100
|
|
||||||
@@ -16,14 +16,28 @@
|
|
||||||
#include <AT91C_MCI_Device.h>
|
|
||||||
#include "com.h"
|
|
||||||
|
|
||||||
-#define ENABLE_WRITE 1
|
|
||||||
+#define AT91C_MCI_TIMEOUT 1000000 /* For AT91F_MCIDeviceWaitReady */
|
|
||||||
+#define BUFFER_SIZE_MCI_DEVICE 512
|
|
||||||
+#define MASTER_CLOCK 60000000
|
|
||||||
+#define FALSE 0
|
|
||||||
+#define TRUE 1
|
|
||||||
+
|
|
||||||
+//* External Functions
|
|
||||||
+extern "C" void AT91F_ASM_MCI_Handler(void);
|
|
||||||
+extern "C" void AT91F_MCI_Device_Handler(AT91PS_MciDevice,unsigned int);
|
|
||||||
+//* Global Variables
|
|
||||||
+AT91S_MciDeviceFeatures MCI_Device_Features;
|
|
||||||
+AT91S_MciDeviceDesc MCI_Device_Desc;
|
|
||||||
+AT91S_MciDevice MCI_Device;
|
|
||||||
+
|
|
||||||
+#undef ENABLE_WRITE
|
|
||||||
#undef MMC
|
|
||||||
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
//* \fn AT91F_MCI_SendCommand
|
|
||||||
//* \brief Generic function to send a command to the MMC or SDCard
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SendCommand (
|
|
||||||
+int AT91F_MCI_SendCommand (
|
|
||||||
AT91PS_MciDevice pMCI_Device,
|
|
||||||
unsigned int Cmd,
|
|
||||||
unsigned int Arg)
|
|
||||||
@@ -63,7 +77,7 @@
|
|
||||||
//* \fn AT91F_MCI_SDCard_SendAppCommand
|
|
||||||
//* \brief Specific function to send a specific command to the SDCard
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SDCard_SendAppCommand (
|
|
||||||
+int AT91F_MCI_SDCard_SendAppCommand (
|
|
||||||
AT91PS_MciDevice pMCI_Device,
|
|
||||||
unsigned int Cmd_App,
|
|
||||||
unsigned int Arg )
|
|
||||||
@@ -98,7 +112,7 @@
|
|
||||||
//* \fn AT91F_MCI_GetStatus
|
|
||||||
//* \brief Addressed card sends its status register
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_GetStatus(AT91PS_MciDevice pMCI_Device,unsigned int relative_card_address)
|
|
||||||
+int AT91F_MCI_GetStatus(AT91PS_MciDevice pMCI_Device,unsigned int relative_card_address)
|
|
||||||
{
|
|
||||||
if (AT91F_MCI_SendCommand(pMCI_Device,
|
|
||||||
AT91C_SEND_STATUS_CMD,
|
|
||||||
@@ -139,10 +153,25 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
+//* \fn AT91F_MCI_Handler
|
|
||||||
+//* \brief MCI Handler
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+extern "C" void AT91F_MCI_Handler(void);
|
|
||||||
+
|
|
||||||
+void AT91F_MCI_Handler(void)
|
|
||||||
+{
|
|
||||||
+ int status;
|
|
||||||
+
|
|
||||||
+ status = ( AT91C_BASE_MCI->MCI_SR & AT91C_BASE_MCI->MCI_IMR );
|
|
||||||
+
|
|
||||||
+ AT91F_MCI_Device_Handler(&MCI_Device,status);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
//* \fn AT91F_MCI_ReadBlock
|
|
||||||
//* \brief Read an ENTIRE block or PARTIAL block
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_ReadBlock(
|
|
||||||
+int AT91F_MCI_ReadBlock(
|
|
||||||
AT91PS_MciDevice pMCI_Device,
|
|
||||||
int src,
|
|
||||||
unsigned int *dataBuffer,
|
|
||||||
@@ -205,7 +234,7 @@
|
|
||||||
//* \fn AT91F_MCI_WriteBlock
|
|
||||||
//* \brief Write an ENTIRE block but not always PARTIAL block !!!
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_WriteBlock(
|
|
||||||
+int AT91F_MCI_WriteBlock(
|
|
||||||
AT91PS_MciDevice pMCI_Device,
|
|
||||||
int dest,
|
|
||||||
unsigned int *dataBuffer,
|
|
||||||
@@ -268,7 +297,7 @@
|
|
||||||
//* \fn AT91F_MCI_MMC_SelectCard
|
|
||||||
//* \brief Toggles a card between the Stand_by and Transfer states or between Programming and Disconnect states
|
|
||||||
//*------------------------------------------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_MMC_SelectCard(AT91PS_MciDevice pMCI_Device, unsigned int relative_card_address)
|
|
||||||
+int AT91F_MCI_MMC_SelectCard(AT91PS_MciDevice pMCI_Device, unsigned int relative_card_address)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
|
|
||||||
@@ -302,7 +331,7 @@
|
|
||||||
//* \fn AT91F_MCI_GetCSD
|
|
||||||
//* \brief Asks to the specified card to send its CSD
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_GetCSD (AT91PS_MciDevice pMCI_Device, unsigned int relative_card_address , unsigned int * response)
|
|
||||||
+int AT91F_MCI_GetCSD (AT91PS_MciDevice pMCI_Device, unsigned int relative_card_address , unsigned int * response)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(AT91F_MCI_SendCommand(pMCI_Device,
|
|
||||||
@@ -322,7 +351,7 @@
|
|
||||||
//* \fn AT91F_MCI_SetBlocklength
|
|
||||||
//* \brief Select a block length for all following block commands (R/W)
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SetBlocklength(AT91PS_MciDevice pMCI_Device,unsigned int length)
|
|
||||||
+int AT91F_MCI_SetBlocklength(AT91PS_MciDevice pMCI_Device,unsigned int length)
|
|
||||||
{
|
|
||||||
return( AT91F_MCI_SendCommand(pMCI_Device, AT91C_SET_BLOCKLEN_CMD, length) );
|
|
||||||
}
|
|
||||||
@@ -332,7 +361,7 @@
|
|
||||||
//* \fn AT91F_MCI_MMC_GetAllOCR
|
|
||||||
//* \brief Asks to all cards to send their operations conditions
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_MMC_GetAllOCR (AT91PS_MciDevice pMCI_Device)
|
|
||||||
+int AT91F_MCI_MMC_GetAllOCR (AT91PS_MciDevice pMCI_Device)
|
|
||||||
{
|
|
||||||
unsigned int response =0x0;
|
|
||||||
|
|
||||||
@@ -357,7 +386,7 @@
|
|
||||||
//* \fn AT91F_MCI_MMC_GetAllCID
|
|
||||||
//* \brief Asks to the MMC on the chosen slot to send its CID
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_MMC_GetAllCID (AT91PS_MciDevice pMCI_Device, unsigned int *response)
|
|
||||||
+int AT91F_MCI_MMC_GetAllCID (AT91PS_MciDevice pMCI_Device, unsigned int *response)
|
|
||||||
{
|
|
||||||
int Nb_Cards_Found=-1;
|
|
||||||
|
|
||||||
@@ -391,7 +420,7 @@
|
|
||||||
//* \fn AT91F_MCI_MMC_Init
|
|
||||||
//* \brief Return the MMC initialisation status
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_MMC_Init (AT91PS_MciDevice pMCI_Device)
|
|
||||||
+int AT91F_MCI_MMC_Init (AT91PS_MciDevice pMCI_Device)
|
|
||||||
{
|
|
||||||
unsigned int tab_response[4];
|
|
||||||
unsigned int mult,blocknr;
|
|
||||||
@@ -454,7 +483,7 @@
|
|
||||||
//* \fn AT91F_MCI_SDCard_GetOCR
|
|
||||||
//* \brief Asks to all cards to send their operations conditions
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SDCard_GetOCR (AT91PS_MciDevice pMCI_Device)
|
|
||||||
+int AT91F_MCI_SDCard_GetOCR (AT91PS_MciDevice pMCI_Device)
|
|
||||||
{
|
|
||||||
unsigned int response =0x0;
|
|
||||||
|
|
||||||
@@ -479,7 +508,7 @@
|
|
||||||
//* \fn AT91F_MCI_SDCard_GetCID
|
|
||||||
//* \brief Asks to the SDCard on the chosen slot to send its CID
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SDCard_GetCID (AT91PS_MciDevice pMCI_Device, unsigned int *response)
|
|
||||||
+int AT91F_MCI_SDCard_GetCID (AT91PS_MciDevice pMCI_Device, unsigned int *response)
|
|
||||||
{
|
|
||||||
if(AT91F_MCI_SendCommand(pMCI_Device,
|
|
||||||
AT91C_ALL_SEND_CID_CMD,
|
|
||||||
@@ -498,7 +527,7 @@
|
|
||||||
//* \fn AT91F_MCI_SDCard_SetBusWidth
|
|
||||||
//* \brief Set bus width for SDCard
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SDCard_SetBusWidth(AT91PS_MciDevice pMCI_Device)
|
|
||||||
+int AT91F_MCI_SDCard_SetBusWidth(AT91PS_MciDevice pMCI_Device)
|
|
||||||
{
|
|
||||||
volatile int ret_value;
|
|
||||||
char bus_width;
|
|
||||||
@@ -529,7 +558,7 @@
|
|
||||||
//* \fn AT91F_MCI_SDCard_Init
|
|
||||||
//* \brief Return the SDCard initialisation status
|
|
||||||
//*----------------------------------------------------------------------------
|
|
||||||
-AT91S_MCIDeviceStatus AT91F_MCI_SDCard_Init (AT91PS_MciDevice pMCI_Device)
|
|
||||||
+int AT91F_MCI_SDCard_Init (AT91PS_MciDevice pMCI_Device)
|
|
||||||
{
|
|
||||||
unsigned int tab_response[4];
|
|
||||||
unsigned int mult,blocknr;
|
|
||||||
@@ -567,7 +596,7 @@
|
|
||||||
|
|
||||||
pMCI_Device->pMCI_DeviceFeatures->Memory_Capacity = pMCI_Device->pMCI_DeviceFeatures->Max_Read_DataBlock_Length * blocknr;
|
|
||||||
//// End of Compute Memory Capacity
|
|
||||||
- printf("BLK 0x%x", pMCI_Device->pMCI_DeviceFeatures->Max_Read_DataBlock_Length);
|
|
||||||
+ printf("SD-Card: %d Bytes\n\r", pMCI_Device->pMCI_DeviceFeatures->Memory_Capacity);
|
|
||||||
|
|
||||||
if( AT91F_MCI_SDCard_SetBusWidth(pMCI_Device) == AT91C_CMD_SEND_OK )
|
|
||||||
{
|
|
||||||
@@ -579,3 +608,141 @@
|
|
||||||
}
|
|
||||||
return AT91C_INIT_ERROR;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+//* \fn AT91F_CfgDevice
|
|
||||||
+//* \brief This function is used to initialise MMC or SDCard Features
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+void AT91F_CfgDevice(void)
|
|
||||||
+{
|
|
||||||
+ // Init Device Structure
|
|
||||||
+
|
|
||||||
+ MCI_Device_Features.Relative_Card_Address = 0;
|
|
||||||
+ MCI_Device_Features.Card_Inserted = AT91C_CARD_REMOVED;
|
|
||||||
+ MCI_Device_Features.Max_Read_DataBlock_Length = 0;
|
|
||||||
+ MCI_Device_Features.Max_Write_DataBlock_Length = 0;
|
|
||||||
+ MCI_Device_Features.Read_Partial = 0;
|
|
||||||
+ MCI_Device_Features.Write_Partial = 0;
|
|
||||||
+ MCI_Device_Features.Erase_Block_Enable = 0;
|
|
||||||
+ MCI_Device_Features.Sector_Size = 0;
|
|
||||||
+ MCI_Device_Features.Memory_Capacity = 0;
|
|
||||||
+
|
|
||||||
+ MCI_Device_Desc.state = AT91C_MCI_IDLE;
|
|
||||||
+ MCI_Device_Desc.SDCard_bus_width = AT91C_MCI_SCDBUS;
|
|
||||||
+
|
|
||||||
+ // Init AT91S_DataFlash Global Structure, by default AT45DB choosen !!!
|
|
||||||
+ MCI_Device.pMCI_DeviceDesc = &MCI_Device_Desc;
|
|
||||||
+ MCI_Device.pMCI_DeviceFeatures = &MCI_Device_Features;
|
|
||||||
+
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+//* \fn AT91F_MCI_Init
|
|
||||||
+//* \brief Initialsise Card
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+int AT91F_MCI_Init(void)
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
+///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+// MCI Init : common to MMC and SDCard
|
|
||||||
+///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
+
|
|
||||||
+ // Set up PIO SDC_TYPE to switch on MMC/SDCard and not DataFlash Card
|
|
||||||
+ AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,AT91C_PIO_PB7);
|
|
||||||
+ AT91F_PIO_SetOutput(AT91C_BASE_PIOB,AT91C_PIO_PB7);
|
|
||||||
+
|
|
||||||
+ // Init MCI for MMC and SDCard interface
|
|
||||||
+ AT91F_MCI_CfgPIO();
|
|
||||||
+ AT91F_MCI_CfgPMC();
|
|
||||||
+ AT91F_PDC_Open(AT91C_BASE_PDC_MCI);
|
|
||||||
+
|
|
||||||
+ // Disable all the interrupts
|
|
||||||
+ AT91C_BASE_MCI->MCI_IDR = 0xFFFFFFFF;
|
|
||||||
+
|
|
||||||
+ // Init MCI Device Structures
|
|
||||||
+ AT91F_CfgDevice();
|
|
||||||
+
|
|
||||||
+ // Configure MCI interrupt
|
|
||||||
+ AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
|
|
||||||
+ AT91C_ID_MCI,
|
|
||||||
+ AT91C_AIC_PRIOR_HIGHEST,
|
|
||||||
+ AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
|
|
||||||
+ AT91F_ASM_MCI_Handler);
|
|
||||||
+
|
|
||||||
+ // Enable MCI interrupt
|
|
||||||
+ AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_MCI);
|
|
||||||
+
|
|
||||||
+ // Enable Receiver
|
|
||||||
+ AT91F_US_EnableRx((AT91PS_USART) AT91C_BASE_DBGU);
|
|
||||||
+
|
|
||||||
+ AT91F_MCI_Configure(AT91C_BASE_MCI,
|
|
||||||
+ AT91C_MCI_DTOR_1MEGA_CYCLES,
|
|
||||||
+ AT91C_MCI_MR_PDCMODE, // 15MHz for MCK = 60MHz (CLKDIV = 1)
|
|
||||||
+ AT91C_MCI_SDCARD_4BITS_SLOTA);
|
|
||||||
+
|
|
||||||
+ if(AT91F_MCI_SDCard_Init(&MCI_Device) != AT91C_INIT_OK)
|
|
||||||
+ return FALSE;
|
|
||||||
+ else
|
|
||||||
+ return TRUE;
|
|
||||||
+
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+//* \fn AT91F_MCIDeviceWaitReady
|
|
||||||
+//* \brief Wait for MCI Device ready
|
|
||||||
+//*----------------------------------------------------------------------------
|
|
||||||
+void AT91F_MCIDeviceWaitReady(unsigned int timeout)
|
|
||||||
+{
|
|
||||||
+ volatile int status;
|
|
||||||
+
|
|
||||||
+ do
|
|
||||||
+ {
|
|
||||||
+ status = AT91C_BASE_MCI->MCI_SR;
|
|
||||||
+ timeout--;
|
|
||||||
+ }
|
|
||||||
+ while( !(status & AT91C_MCI_NOTBUSY) && (timeout>0) );
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+unsigned int swab32(unsigned int data)
|
|
||||||
+{
|
|
||||||
+ unsigned int res = 0;
|
|
||||||
+
|
|
||||||
+ res = (data & 0x000000ff) << 24 |
|
|
||||||
+ (data & 0x0000ff00) << 8 |
|
|
||||||
+ (data & 0x00ff0000) >> 8 |
|
|
||||||
+ (data & 0xff000000) >> 24;
|
|
||||||
+
|
|
||||||
+ return res;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+//*--------------------------------------------------------------------
|
|
||||||
+//* \fn AT91F_MCI_ReadBlockSwab
|
|
||||||
+//* \brief Read Block and swap byte order
|
|
||||||
+//*--------------------------------------------------------------------
|
|
||||||
+int AT91F_MCI_ReadBlockSwab(
|
|
||||||
+ AT91PS_MciDevice pMCI_Device,
|
|
||||||
+ int src,
|
|
||||||
+ unsigned int *databuffer,
|
|
||||||
+ int sizeToRead)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ unsigned char *buf = (unsigned char *)databuffer;
|
|
||||||
+
|
|
||||||
+ //* Read Block 1
|
|
||||||
+ for(i=0;i<BUFFER_SIZE_MCI_DEVICE;i++)
|
|
||||||
+ *buf++ = 0x00;
|
|
||||||
+ AT91F_MCI_ReadBlock(&MCI_Device,src,databuffer,sizeToRead);
|
|
||||||
+
|
|
||||||
+ //* Wait end of Read
|
|
||||||
+ AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
|
||||||
+
|
|
||||||
+ {
|
|
||||||
+ int index;
|
|
||||||
+ unsigned int *uiBuffer = databuffer;
|
|
||||||
+
|
|
||||||
+ for(index = 0; index < 512/4; index++)
|
|
||||||
+ uiBuffer[index] = swab32(uiBuffer[index]);
|
|
||||||
+ }
|
|
||||||
+ return(1);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
diff -urN romboot.old/mci_main.cpp romboot/mci_main.cpp
|
|
||||||
--- romboot.old/mci_main.cpp 2007-03-24 13:34:19.000000000 +0100
|
|
||||||
+++ romboot/mci_main.cpp 1970-01-01 01:00:00.000000000 +0100
|
|
||||||
@@ -1,317 +0,0 @@
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* ATMEL Microcontroller Software Support - ROUSSET -
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* The software is delivered "AS IS" without warranty or condition of any
|
|
||||||
-//* kind, either express, implied or statutory. This includes without
|
|
||||||
-//* limitation any warranty or condition with respect to merchantability or
|
|
||||||
-//* fitness for any particular purpose, or against the infringements of
|
|
||||||
-//* intellectual property rights of others.
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* File Name : main.c
|
|
||||||
-//* Object : main application written in C
|
|
||||||
-//* Creation : FB 21/11/2002
|
|
||||||
-//*
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-#include "com.h"
|
|
||||||
-#include "dataflash.h"
|
|
||||||
-#include <AT91C_MCI_Device.h>
|
|
||||||
-
|
|
||||||
-#define AT91C_MCI_TIMEOUT 1000000 /* For AT91F_MCIDeviceWaitReady */
|
|
||||||
-#define BUFFER_SIZE_MCI_DEVICE 512
|
|
||||||
-#define MASTER_CLOCK 60000000
|
|
||||||
-#define FALSE -1
|
|
||||||
-#define TRUE 1
|
|
||||||
-
|
|
||||||
-//* External Functions
|
|
||||||
-extern "C" void AT91F_ASM_MCI_Handler(void);
|
|
||||||
-extern "C" void AT91F_MCI_Device_Handler(AT91PS_MciDevice,unsigned int);
|
|
||||||
-extern AT91S_MCIDeviceStatus AT91F_MCI_SDCard_Init (AT91PS_MciDevice);
|
|
||||||
-extern AT91S_MCIDeviceStatus AT91F_MCI_SetBlocklength(AT91PS_MciDevice,unsigned int);
|
|
||||||
-extern AT91S_MCIDeviceStatus AT91F_MCI_ReadBlock(AT91PS_MciDevice,int,unsigned int *,int);
|
|
||||||
-extern AT91S_MCIDeviceStatus AT91F_MCI_WriteBlock(AT91PS_MciDevice,int,unsigned int *,int);
|
|
||||||
-//* Global Variables
|
|
||||||
-AT91S_MciDeviceFeatures MCI_Device_Features;
|
|
||||||
-AT91S_MciDeviceDesc MCI_Device_Desc;
|
|
||||||
-AT91S_MciDevice MCI_Device;
|
|
||||||
-
|
|
||||||
-unsigned int dlBuffer = 0x20000000;
|
|
||||||
-#undef MCI_TEST
|
|
||||||
-#ifdef MCI_TEST
|
|
||||||
-char TestString[] = "\r\nHello Hamish\r\n";
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* \fn AT91F_MCIDeviceWaitReady
|
|
||||||
-//* \brief Wait for MCI Device ready
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-void AT91F_MCIDeviceWaitReady(unsigned int timeout)
|
|
||||||
-{
|
|
||||||
- volatile int status;
|
|
||||||
-
|
|
||||||
- do
|
|
||||||
- {
|
|
||||||
- status = AT91C_BASE_MCI->MCI_SR;
|
|
||||||
- timeout--;
|
|
||||||
- }
|
|
||||||
- while( !(status & AT91C_MCI_NOTBUSY) && (timeout>0) );
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-unsigned int swab32(unsigned int data)
|
|
||||||
-{
|
|
||||||
- unsigned int res = 0;
|
|
||||||
-
|
|
||||||
- res = (data & 0x000000ff) << 24 |
|
|
||||||
- (data & 0x0000ff00) << 8 |
|
|
||||||
- (data & 0x00ff0000) >> 8 |
|
|
||||||
- (data & 0xff000000) >> 24;
|
|
||||||
-
|
|
||||||
- return res;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-AT91S_MCIDeviceStatus readblock(
|
|
||||||
- AT91PS_MciDevice pMCI_Device,
|
|
||||||
- int src,
|
|
||||||
- unsigned int *databuffer,
|
|
||||||
- int sizeToRead)
|
|
||||||
-{
|
|
||||||
- int i;
|
|
||||||
- unsigned char *buf = (unsigned char *)databuffer;
|
|
||||||
-
|
|
||||||
- //* Read Block 1
|
|
||||||
- for(i=0;i<BUFFER_SIZE_MCI_DEVICE;i++)
|
|
||||||
- *buf++ = 0x00;
|
|
||||||
- AT91F_MCI_ReadBlock(&MCI_Device,src,databuffer,sizeToRead);
|
|
||||||
-
|
|
||||||
- //* Wait end of Read
|
|
||||||
- AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
|
||||||
-
|
|
||||||
- {
|
|
||||||
- int index;
|
|
||||||
- unsigned int *uiBuffer = databuffer;
|
|
||||||
-
|
|
||||||
- for(index = 0; index < 512/4; index++)
|
|
||||||
- uiBuffer[index] = swab32(uiBuffer[index]);
|
|
||||||
- }
|
|
||||||
- return(1);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-#if 0
|
|
||||||
-void printdata(unsigned int bufpos)
|
|
||||||
- {
|
|
||||||
- unsigned int *uip;
|
|
||||||
- int linebytes = 16;
|
|
||||||
- int nbytes = 64;
|
|
||||||
- int size = 4;
|
|
||||||
- int i;
|
|
||||||
-
|
|
||||||
- uip = (unsigned int *)bufpos;
|
|
||||||
-
|
|
||||||
- do {
|
|
||||||
-
|
|
||||||
- for(i=0; i<linebytes; i+=size) {
|
|
||||||
- printf(" %08x", *uip++);
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- printf("\n\r");
|
|
||||||
- nbytes -= linebytes;
|
|
||||||
- } while (nbytes > 0);
|
|
||||||
- }
|
|
||||||
-#endif
|
|
||||||
-//extern char message[40];
|
|
||||||
-
|
|
||||||
-int notnull(int bufpos, unsigned int len)
|
|
||||||
-{
|
|
||||||
- int i;
|
|
||||||
- unsigned char * bp = (unsigned char *)bufpos;
|
|
||||||
-
|
|
||||||
- for (i=0; i<len; i++)
|
|
||||||
- if (bp[i] != '\0')
|
|
||||||
- return(1);
|
|
||||||
-
|
|
||||||
- return(0);
|
|
||||||
-}
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* \fn AT91F_Test
|
|
||||||
-//* \brief Test Functions
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-int AT91F_Test(void)
|
|
||||||
-{
|
|
||||||
- int i;
|
|
||||||
- unsigned int Max_Read_DataBlock_Length;
|
|
||||||
- int block = 0;
|
|
||||||
- int bufpos = dlBuffer;
|
|
||||||
- int lastvalid = 0;
|
|
||||||
- int NbPage = 0;
|
|
||||||
-
|
|
||||||
-
|
|
||||||
- Max_Read_DataBlock_Length = MCI_Device.pMCI_DeviceFeatures->Max_Read_DataBlock_Length;
|
|
||||||
-
|
|
||||||
- //* ReadBlock & WriteBlock Test -> Entire Block
|
|
||||||
-
|
|
||||||
- //* Wait MCI Device Ready
|
|
||||||
- AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
|
||||||
-
|
|
||||||
-#ifdef MCI_TEST
|
|
||||||
- //* Read Block 1
|
|
||||||
- for(i=0;i<BUFFER_SIZE_MCI_DEVICE;i++) Buffer[i] = 0x00;
|
|
||||||
- AT91F_MCI_ReadBlock(&MCI_Device,(1*Max_Read_DataBlock_Length),(unsigned int*) Buffer,Max_Read_DataBlock_Length);
|
|
||||||
-
|
|
||||||
- //* Wait end of Read
|
|
||||||
- AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
|
||||||
-
|
|
||||||
- // Write Page 1
|
|
||||||
-// sprintf(Buffer,"\n\rThis sentence is written in your device... Congratulations\n\r");
|
|
||||||
- for(i=0; i<16; i++)
|
|
||||||
- Buffer[i] = TestString[i];
|
|
||||||
- AT91F_MCI_WriteBlock(&MCI_Device,(1*Max_Read_DataBlock_Length),(unsigned int*) Buffer,Max_Read_DataBlock_Length);
|
|
||||||
-
|
|
||||||
- //* Wait end of Write
|
|
||||||
- AT91F_MCIDeviceWaitReady(AT91C_MCI_TIMEOUT);
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
- for(i=0; i<64; i++) {
|
|
||||||
- readblock(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
|
||||||
- if (notnull(bufpos, Max_Read_DataBlock_Length))
|
|
||||||
- lastvalid++;
|
|
||||||
- block++;
|
|
||||||
- bufpos += 512;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- i = dataflash_info[0].Device.pages_number;
|
|
||||||
- while(i>>=1)
|
|
||||||
- NbPage++;
|
|
||||||
- i = lastvalid + (NbPage << 13) + (dataflash_info[0].Device.pages_size << 17);
|
|
||||||
- *(int *)(dlBuffer + 0x14) = i;
|
|
||||||
-
|
|
||||||
- for(i=0; i<4688; i++) {
|
|
||||||
- readblock(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
|
||||||
- block++;
|
|
||||||
- bufpos += 512;
|
|
||||||
- }
|
|
||||||
- write_dataflash(0xc0000000, dlBuffer, 512 * block);
|
|
||||||
- //* End Of Test
|
|
||||||
- printf("DONE %d\n\r", lastvalid);
|
|
||||||
-
|
|
||||||
-// printf(Buffer);
|
|
||||||
-
|
|
||||||
- return TRUE;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* \fn AT91F_CfgDevice
|
|
||||||
-//* \brief This function is used to initialise MMC or SDCard Features
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-void AT91F_CfgDevice(void)
|
|
||||||
-{
|
|
||||||
- // Init Device Structure
|
|
||||||
-
|
|
||||||
- MCI_Device_Features.Relative_Card_Address = 0;
|
|
||||||
- MCI_Device_Features.Card_Inserted = AT91C_CARD_REMOVED;
|
|
||||||
- MCI_Device_Features.Max_Read_DataBlock_Length = 0;
|
|
||||||
- MCI_Device_Features.Max_Write_DataBlock_Length = 0;
|
|
||||||
- MCI_Device_Features.Read_Partial = 0;
|
|
||||||
- MCI_Device_Features.Write_Partial = 0;
|
|
||||||
- MCI_Device_Features.Erase_Block_Enable = 0;
|
|
||||||
- MCI_Device_Features.Sector_Size = 0;
|
|
||||||
- MCI_Device_Features.Memory_Capacity = 0;
|
|
||||||
-
|
|
||||||
- MCI_Device_Desc.state = AT91C_MCI_IDLE;
|
|
||||||
- MCI_Device_Desc.SDCard_bus_width = AT91C_MCI_SCDBUS;
|
|
||||||
-
|
|
||||||
- // Init AT91S_DataFlash Global Structure, by default AT45DB choosen !!!
|
|
||||||
- MCI_Device.pMCI_DeviceDesc = &MCI_Device_Desc;
|
|
||||||
- MCI_Device.pMCI_DeviceFeatures = &MCI_Device_Features;
|
|
||||||
-
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* \fn AT91F_Test_SDCard
|
|
||||||
-//* \brief Configure MCI for SDCard and complete SDCard init, then jump to Test Functions
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-int AT91F_Test_SDCard(void)
|
|
||||||
-{
|
|
||||||
- //////////////////////////////////////////////////////////
|
|
||||||
- //* For SDCard Init
|
|
||||||
- //////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
- AT91F_MCI_Configure(AT91C_BASE_MCI,
|
|
||||||
- AT91C_MCI_DTOR_1MEGA_CYCLES,
|
|
||||||
- AT91C_MCI_MR_PDCMODE, // 15MHz for MCK = 60MHz (CLKDIV = 1)
|
|
||||||
- AT91C_MCI_SDCARD_4BITS_SLOTA);
|
|
||||||
-
|
|
||||||
- if(AT91F_MCI_SDCard_Init(&MCI_Device) != AT91C_INIT_OK)
|
|
||||||
- return FALSE;
|
|
||||||
-
|
|
||||||
- printf("\n\rINI OK: TST\n\r");
|
|
||||||
-
|
|
||||||
- // Enter Main Tests
|
|
||||||
- return(AT91F_Test());
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* \fn AT91F_MCI_Handler
|
|
||||||
-//* \brief MCI Handler
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-extern "C" void AT91F_MCI_Handler(void);
|
|
||||||
-
|
|
||||||
-void AT91F_MCI_Handler(void)
|
|
||||||
-{
|
|
||||||
- int status;
|
|
||||||
-
|
|
||||||
- status = ( AT91C_BASE_MCI->MCI_SR & AT91C_BASE_MCI->MCI_IMR );
|
|
||||||
-
|
|
||||||
- AT91F_MCI_Device_Handler(&MCI_Device,status);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-//* \fn main
|
|
||||||
-//* \brief main function
|
|
||||||
-//*----------------------------------------------------------------------------
|
|
||||||
-int mci_main(void)
|
|
||||||
-{
|
|
||||||
-// printf("MCI Test\n\r");
|
|
||||||
-
|
|
||||||
-///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// MCI Init : common to MMC and SDCard
|
|
||||||
-///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
-// printf("\n\rInit MCI Interface\n\r");
|
|
||||||
-
|
|
||||||
- // Set up PIO SDC_TYPE to switch on MMC/SDCard and not DataFlash Card
|
|
||||||
- AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,AT91C_PIO_PB7);
|
|
||||||
- AT91F_PIO_SetOutput(AT91C_BASE_PIOB,AT91C_PIO_PB7);
|
|
||||||
-
|
|
||||||
- // Init MCI for MMC and SDCard interface
|
|
||||||
- AT91F_MCI_CfgPIO();
|
|
||||||
- AT91F_MCI_CfgPMC();
|
|
||||||
- AT91F_PDC_Open(AT91C_BASE_PDC_MCI);
|
|
||||||
-
|
|
||||||
- // Disable all the interrupts
|
|
||||||
- AT91C_BASE_MCI->MCI_IDR = 0xFFFFFFFF;
|
|
||||||
-
|
|
||||||
- // Init MCI Device Structures
|
|
||||||
- AT91F_CfgDevice();
|
|
||||||
-
|
|
||||||
- // Configure MCI interrupt
|
|
||||||
- AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
|
|
||||||
- AT91C_ID_MCI,
|
|
||||||
- AT91C_AIC_PRIOR_HIGHEST,
|
|
||||||
- AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,
|
|
||||||
- AT91F_ASM_MCI_Handler);
|
|
||||||
-
|
|
||||||
- // Enable MCI interrupt
|
|
||||||
- AT91F_AIC_EnableIt(AT91C_BASE_AIC,AT91C_ID_MCI);
|
|
||||||
-
|
|
||||||
-///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-// Enter Test Menu
|
|
||||||
-///////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
-
|
|
||||||
- // Enable Receiver
|
|
||||||
- AT91F_US_EnableRx((AT91PS_USART) AT91C_BASE_DBGU);
|
|
||||||
-
|
|
||||||
- if(AT91F_Test_SDCard() == TRUE)
|
|
||||||
- printf("\n\rTST OK\n\r");
|
|
||||||
- else
|
|
||||||
- printf("\n\rTST Fail\n\r");
|
|
||||||
- return(1);
|
|
||||||
-}
|
|
|
@ -1,423 +0,0 @@
|
||||||
diff -urN romboot.old/com.cpp romboot/com.cpp
|
|
||||||
--- romboot.old/com.cpp 2004-07-04 21:37:05.000000000 +0200
|
|
||||||
+++ romboot/com.cpp 2007-04-04 04:30:12.000000000 +0200
|
|
||||||
@@ -27,7 +27,7 @@
|
|
||||||
//*-----------------------------------------------------------------------------
|
|
||||||
void AT91F_ClrScr(void)
|
|
||||||
{
|
|
||||||
- puts(CLRSCREEN);
|
|
||||||
+ putstr(CLRSCREEN);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -47,12 +47,12 @@
|
|
||||||
|
|
||||||
if (*(--p) == '\t') { /* will retype the whole line */
|
|
||||||
while (*colp > plen) {
|
|
||||||
- puts(erase_seq);
|
|
||||||
+ putstr(erase_seq);
|
|
||||||
(*colp)--;
|
|
||||||
}
|
|
||||||
for (s=buffer; s<p; ++s) {
|
|
||||||
if (*s == '\t') {
|
|
||||||
- puts(tab_seq+((*colp) & 07));
|
|
||||||
+ putstr(tab_seq+((*colp) & 07));
|
|
||||||
*colp += 8 - ((*colp) & 07);
|
|
||||||
} else {
|
|
||||||
++(*colp);
|
|
||||||
@@ -60,7 +60,7 @@
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
- puts(erase_seq);
|
|
||||||
+ putstr(erase_seq);
|
|
||||||
(*colp)--;
|
|
||||||
}
|
|
||||||
(*np)--;
|
|
||||||
@@ -85,7 +85,7 @@
|
|
||||||
|
|
||||||
/* print prompt */
|
|
||||||
if(prompt)
|
|
||||||
- puts(prompt);
|
|
||||||
+ putstr(prompt);
|
|
||||||
col = plen;
|
|
||||||
|
|
||||||
for (;;)
|
|
||||||
@@ -97,7 +97,7 @@
|
|
||||||
case '\r': /* Enter */
|
|
||||||
case '\n':
|
|
||||||
*p = '\0';
|
|
||||||
- puts ("\r\n");
|
|
||||||
+ putstr ("\r\n");
|
|
||||||
return (p - console_buffer);
|
|
||||||
|
|
||||||
case 0x03: /* ^C - break */
|
|
||||||
@@ -107,7 +107,7 @@
|
|
||||||
case 0x15: /* ^U - erase line */
|
|
||||||
while (col > plen)
|
|
||||||
{
|
|
||||||
- puts(erase_seq);
|
|
||||||
+ putstr(erase_seq);
|
|
||||||
--col;
|
|
||||||
}
|
|
||||||
p = console_buffer;
|
|
||||||
@@ -152,7 +152,7 @@
|
|
||||||
void AT91F_WaitKeyPressed(void)
|
|
||||||
{
|
|
||||||
int c;
|
|
||||||
- puts("Hit a Key!");
|
|
||||||
+ putstr("Hit a Key!");
|
|
||||||
c = getc();
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -urN romboot.old/main.cpp romboot/main.cpp
|
|
||||||
--- romboot.old/main.cpp 2007-04-03 12:12:33.000000000 +0200
|
|
||||||
+++ romboot/main.cpp 2007-04-04 05:56:39.000000000 +0200
|
|
||||||
@@ -382,8 +382,10 @@
|
|
||||||
|
|
||||||
AT91F_MCI_ReadBlockSwab(&MCI_Device, block*Max_Read_DataBlock_Length, (unsigned int *)bufpos, Max_Read_DataBlock_Length);
|
|
||||||
|
|
||||||
- if (p->magic != TRX_MAGIC)
|
|
||||||
+ if (p->magic != TRX_MAGIC) {
|
|
||||||
+ printf("Invalid Image 0x%08x\n\r");
|
|
||||||
return FALSE;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
printf("Read SD-Card\n\r");
|
|
||||||
AT91C_BASE_PIOC->PIO_CODR = AT91C_PIO_PC7 | AT91C_PIO_PC15 | AT91C_PIO_PC8 | AT91C_PIO_PC14;
|
|
||||||
@@ -438,9 +440,6 @@
|
|
||||||
int NbPage;
|
|
||||||
int mci_present;
|
|
||||||
|
|
||||||
- stdin = fopen(0, at91_dbgu_getc);
|
|
||||||
- stdout = fopen(at91_dbgu_putc, 0);
|
|
||||||
-
|
|
||||||
pAT91 = AT91C_ROM_BOOT_ADDRESS;
|
|
||||||
|
|
||||||
// Tempo Initialisation
|
|
||||||
@@ -472,16 +471,18 @@
|
|
||||||
|
|
||||||
#ifdef PRODTEST
|
|
||||||
if (mci_present) {
|
|
||||||
- Program_From_MCI();
|
|
||||||
- AT91F_StartUboot(0, (void *)0);
|
|
||||||
+ if (Program_From_MCI())
|
|
||||||
+ AT91F_StartUboot(0, (void *)0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// start tempo to start Uboot in a delay of 1 sec if no key pressed
|
|
||||||
svcUbootTempo.Start(&svcUbootTempo, 1000, 0, AT91F_StartUboot, (void *)0);
|
|
||||||
|
|
||||||
+#ifndef PRODTEST
|
|
||||||
printf("press key\n\r");
|
|
||||||
getc();
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
// stop tempo
|
|
||||||
svcUbootTempo.Stop(&svcUbootTempo);
|
|
||||||
@@ -601,3 +602,10 @@
|
|
||||||
AT91F_WaitKeyPressed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+int puts(const char *str)
|
|
||||||
+{
|
|
||||||
+ putstr(str);
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
diff -urN romboot.old/stdio.cpp romboot/stdio.cpp
|
|
||||||
--- romboot.old/stdio.cpp 2004-07-04 22:36:10.000000000 +0200
|
|
||||||
+++ romboot/stdio.cpp 2007-04-04 04:29:25.000000000 +0200
|
|
||||||
@@ -1,117 +1,32 @@
|
|
||||||
#include "stdio.h"
|
|
||||||
|
|
||||||
extern int at91_dbgu_putc(int ch);
|
|
||||||
+extern int at91_dbgu_getc();
|
|
||||||
|
|
||||||
-FILE *stdout = (FILE *)0;
|
|
||||||
-FILE *stdin = (FILE *)0;
|
|
||||||
-
|
|
||||||
-FILE __filedesc[FILEDESCS];
|
|
||||||
-
|
|
||||||
-FILE *fopen(int (*put)(int), int (*get)())
|
|
||||||
-{
|
|
||||||
- static int init = 1;
|
|
||||||
-
|
|
||||||
- if(init != 0)
|
|
||||||
- {
|
|
||||||
- for(int i = 0; i < FILEDESCS; i++)
|
|
||||||
- {
|
|
||||||
- __filedesc[i].active = false;
|
|
||||||
- __filedesc[i].put = 0;
|
|
||||||
- __filedesc[i].get = 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- init = 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- for(int i = 0; i < FILEDESCS; i++)
|
|
||||||
- {
|
|
||||||
- if(!__filedesc[i].active)
|
|
||||||
- {
|
|
||||||
- __filedesc[i].put = put;
|
|
||||||
- __filedesc[i].get = get;
|
|
||||||
-
|
|
||||||
- __filedesc[i].active = true;
|
|
||||||
-
|
|
||||||
- return &__filedesc[i];
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return (FILE *)0;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-int fclose(FILE *fp)
|
|
||||||
+int putstr(const char *str)
|
|
||||||
{
|
|
||||||
- for(int i = 0; i < FILEDESCS; i++)
|
|
||||||
- if(&__filedesc[i] == fp || fp->active)
|
|
||||||
- {
|
|
||||||
- fp->active = false;
|
|
||||||
-
|
|
||||||
- fp->put = 0;
|
|
||||||
- fp->get = 0;
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- return -1;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-int fputs(const char *str, FILE *fp)
|
|
||||||
-{
|
|
||||||
- if(fp == (FILE *)0)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
- if(fp->put == (void *)0)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
- while(*str != 0)
|
|
||||||
- {
|
|
||||||
- fp->put(*str);
|
|
||||||
- str++;
|
|
||||||
- }
|
|
||||||
+ while (*str != 0)
|
|
||||||
+ {
|
|
||||||
+ putc(*str);
|
|
||||||
+ str++;
|
|
||||||
+ }
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int fputc(int c, FILE *fp)
|
|
||||||
-{
|
|
||||||
- if(fp == (FILE *)0)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
- if(fp->put == (void *)0)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
- return fp->put(c);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-int fgetc(FILE *fp)
|
|
||||||
-{
|
|
||||||
- if(fp == (FILE *)0)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
- if(fp->get == (void *)0)
|
|
||||||
- return -1;
|
|
||||||
-
|
|
||||||
- return fp->get();
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-int puts(const char *str)
|
|
||||||
+int putchar(int c)
|
|
||||||
{
|
|
||||||
- return fputs(str, stdout);
|
|
||||||
+ return putc(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
int putc(int c)
|
|
||||||
{
|
|
||||||
- return fputc(c, stdout);
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-int putchar(int c)
|
|
||||||
-{
|
|
||||||
- return fputc(c, stdout);
|
|
||||||
+ at91_dbgu_putc(c);
|
|
||||||
+ return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int getc()
|
|
||||||
{
|
|
||||||
- return fgetc(stdin);
|
|
||||||
+ return at91_dbgu_getc();
|
|
||||||
}
|
|
||||||
|
|
||||||
int strlen(const char *str)
|
|
||||||
@@ -139,7 +54,7 @@
|
|
||||||
__res; \
|
|
||||||
})
|
|
||||||
|
|
||||||
-int number(FILE *fp, int num, int base, int size, int precision, int type)
|
|
||||||
+int number(int num, int base, int size, int precision, int type)
|
|
||||||
{
|
|
||||||
char c, sign, tmp[66];
|
|
||||||
const char *digits="0123456789abcdef";
|
|
||||||
@@ -173,28 +88,28 @@
|
|
||||||
|
|
||||||
if(!(type&(ZEROPAD+LEFT)))
|
|
||||||
while(size-->0)
|
|
||||||
- fputc(' ', fp);
|
|
||||||
+ putc(' ');
|
|
||||||
|
|
||||||
if(sign)
|
|
||||||
- fputc(sign, fp);
|
|
||||||
+ putc(sign);
|
|
||||||
|
|
||||||
if (!(type & LEFT))
|
|
||||||
while (size-- > 0)
|
|
||||||
- fputc(c, fp);
|
|
||||||
+ putc(c);
|
|
||||||
|
|
||||||
while (i < precision--)
|
|
||||||
- fputc('0', fp);
|
|
||||||
+ putc('0');
|
|
||||||
|
|
||||||
while (i-- > 0)
|
|
||||||
- fputc(tmp[i], fp);
|
|
||||||
+ putc(tmp[i]);
|
|
||||||
|
|
||||||
while (size-- > 0)
|
|
||||||
- fputc(' ', fp);;
|
|
||||||
+ putc(' ');;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int vfprintf(FILE *fp, const char *fmt, va_list va)
|
|
||||||
+int vprintf(const char *fmt, va_list va)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
|
|
||||||
@@ -231,33 +146,33 @@
|
|
||||||
case 's' :
|
|
||||||
s = va_arg(va, char *);
|
|
||||||
if(!s)
|
|
||||||
- fputs("<NULL>", fp);
|
|
||||||
+ putstr("<NULL>");
|
|
||||||
else
|
|
||||||
- fputs(s, fp);
|
|
||||||
+ putstr(s);
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
case 'c' :
|
|
||||||
- fputc(va_arg(va, int), fp);
|
|
||||||
+ putc(va_arg(va, int));
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
case 'd' :
|
|
||||||
- number(fp, va_arg(va, int), 10, 0, precision, type);
|
|
||||||
+ number(va_arg(va, int), 10, 0, precision, type);
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
case 'x' :
|
|
||||||
- number(fp, va_arg(va, int), 16, 0, precision, type);
|
|
||||||
+ number(va_arg(va, int), 16, 0, precision, type);
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
case 'X' :
|
|
||||||
- number(fp, va_arg(va, int), 16, 0, precision, type | LARGE);
|
|
||||||
+ number(va_arg(va, int), 16, 0, precision, type | LARGE);
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
case '%' :
|
|
||||||
- fputc(*fmt, fp);
|
|
||||||
+ putc(*fmt);
|
|
||||||
done = true;
|
|
||||||
default:
|
|
||||||
- fputc('%', fp);
|
|
||||||
- fputc(*fmt, fp);
|
|
||||||
+ putc('%');
|
|
||||||
+ putc(*fmt);
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -265,7 +180,7 @@
|
|
||||||
while(!done);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- fputc(*fmt, fp);
|
|
||||||
+ putc(*fmt);
|
|
||||||
|
|
||||||
fmt++;
|
|
||||||
}
|
|
||||||
@@ -274,25 +189,13 @@
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-int fprintf(FILE *fp, const char *fmt, ...)
|
|
||||||
-{
|
|
||||||
- va_list ap;
|
|
||||||
- int i;
|
|
||||||
-
|
|
||||||
- va_start(ap, fmt);
|
|
||||||
- i = fprintf(fp, fmt, ap);
|
|
||||||
- va_end(ap);
|
|
||||||
-
|
|
||||||
- return i;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
int printf(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
va_start(ap, fmt);
|
|
||||||
- i = vfprintf(stdout, fmt, ap);
|
|
||||||
+ i = vprintf(fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
|
|
||||||
return i;
|
|
||||||
diff -urN romboot.old/stdio.h romboot/stdio.h
|
|
||||||
--- romboot.old/stdio.h 2004-07-04 22:04:27.000000000 +0200
|
|
||||||
+++ romboot/stdio.h 2007-04-04 04:29:48.000000000 +0200
|
|
||||||
@@ -1,31 +1,12 @@
|
|
||||||
#include <stdarg.h>
|
|
||||||
|
|
||||||
-struct FILE
|
|
||||||
-{
|
|
||||||
- bool active;
|
|
||||||
- int (*put)(int); /* function to write one char to device */
|
|
||||||
- int (*get)(); /* function to read one char from device */
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
-#define FILEDESCS 8
|
|
||||||
-
|
|
||||||
-FILE *fopen(int (*put)(int), int (*get)());
|
|
||||||
-int fclose(FILE *fp);
|
|
||||||
-
|
|
||||||
-int puts(const char *str);
|
|
||||||
+int putstr(const char *str);
|
|
||||||
int putc(int c);
|
|
||||||
int putchar(int c);
|
|
||||||
int getc();
|
|
||||||
|
|
||||||
-int fputs(const char *str, FILE *fp);
|
|
||||||
-int fputc(int c, FILE *fp);
|
|
||||||
-int fgetc(FILE *fp);
|
|
||||||
int strlen(const char *str);
|
|
||||||
|
|
||||||
-int fprintf(FILE *fp, const char *fmt, ...);
|
|
||||||
-int vfprintf(FILE *fp, const char *fmt, va_list ap);
|
|
||||||
+int vprintf(const char *fmt, va_list ap);
|
|
||||||
|
|
||||||
int printf(const char *fmt, ...);
|
|
||||||
-
|
|
||||||
-extern FILE *stdout;
|
|
||||||
-extern FILE *stdin;
|
|
|
@ -1,37 +0,0 @@
|
||||||
--- romboot.old/main.cpp 2007-04-05 15:51:51.000000000 +0200
|
|
||||||
+++ romboot/main.cpp 2007-04-10 10:33:10.000000000 +0200
|
|
||||||
@@ -34,7 +34,7 @@
|
|
||||||
#define DELAY_MAIN_FREQ 1000
|
|
||||||
#define DISP_LINE_LEN 16
|
|
||||||
|
|
||||||
-#define COMPACT 1
|
|
||||||
+//#define COMPACT 1
|
|
||||||
|
|
||||||
//* prototypes
|
|
||||||
extern void AT91F_DBGU_Printk(char *);
|
|
||||||
@@ -65,6 +65,7 @@
|
|
||||||
"3: Copy SD-Card\n\r"
|
|
||||||
"4: Start U-BOOT\n\r"
|
|
||||||
"5: Clear bootloder\n\r"
|
|
||||||
+ "6: Erase entire flash\n\r"
|
|
||||||
};
|
|
||||||
|
|
||||||
//* Globales variables
|
|
||||||
@@ -555,6 +556,17 @@
|
|
||||||
command = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case '6':
|
|
||||||
+ {
|
|
||||||
+ int *i;
|
|
||||||
+
|
|
||||||
+ for(i = (int *)0x20000000; i < (int *)0x20840000; i++)
|
|
||||||
+ *i = 0;
|
|
||||||
+ }
|
|
||||||
+ write_dataflash(0xc0000000, 0x20000000, 0x840000);
|
|
||||||
+ command = 0;
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
default:
|
|
||||||
command = 0;
|
|
||||||
break;
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- romboot.old/main.cpp 2007-04-10 12:35:02.000000000 +0200
|
|
||||||
+++ romboot/main.cpp 2007-04-10 12:35:15.000000000 +0200
|
|
||||||
@@ -561,7 +561,7 @@
|
|
||||||
int *i;
|
|
||||||
|
|
||||||
for(i = (int *)0x20000000; i < (int *)0x20840000; i++)
|
|
||||||
- *i = 0;
|
|
||||||
+ *i = 0xffffffff;
|
|
||||||
}
|
|
||||||
write_dataflash(0xc0000000, 0x20000000, 0x840000);
|
|
||||||
command = 0;
|
|
Loading…
Reference in a new issue