o add crc check
This commit is contained in:
parent
b5f111fa41
commit
d58d3439ec
@ -44,7 +44,7 @@ extern FILE uart_stdout;
|
|||||||
//#define FILENAME "rom.smc" //ok
|
//#define FILENAME "rom.smc" //ok
|
||||||
//#define FILENAME "supert.smc"
|
//#define FILENAME "supert.smc"
|
||||||
//#define FILENAME "vortex.smc"
|
//#define FILENAME "vortex.smc"
|
||||||
//#define FILENAME "mrdo.smc"
|
#define FILENAME "mrdo.smc"
|
||||||
//#define FILENAME "spacei.smc"
|
//#define FILENAME "spacei.smc"
|
||||||
//#define FILENAME "bank01.smc" //ok
|
//#define FILENAME "bank01.smc" //ok
|
||||||
//#define FILENAME "bank02.smc" //ok
|
//#define FILENAME "bank02.smc" //ok
|
||||||
@ -55,7 +55,7 @@ extern FILE uart_stdout;
|
|||||||
//#define FILENAME "bank07.smc" //ok
|
//#define FILENAME "bank07.smc" //ok
|
||||||
//#define FILENAME "banklo.smc" //ok
|
//#define FILENAME "banklo.smc" //ok
|
||||||
//#define FILENAME "bankhi.smc" //ok
|
//#define FILENAME "bankhi.smc" //ok
|
||||||
#define FILENAME "vram2.smc" //ok
|
//#define FILENAME "vram2.smc" //ok
|
||||||
|
|
||||||
#define DUMPNAME "dump256.smc"
|
#define DUMPNAME "dump256.smc"
|
||||||
#define BUFFER_SIZE 512
|
#define BUFFER_SIZE 512
|
||||||
@ -65,6 +65,42 @@ extern FILE uart_stdout;
|
|||||||
uint8_t read_buffer[BUFFER_SIZE];
|
uint8_t read_buffer[BUFFER_SIZE];
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t crc_xmodem_update (uint16_t crc, uint8_t data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
crc = crc ^ ((uint16_t)data << 8);
|
||||||
|
for (i=0; i<8; i++)
|
||||||
|
{
|
||||||
|
if (crc & 0x8000)
|
||||||
|
crc = (crc << 1) ^ 0x1021;
|
||||||
|
else
|
||||||
|
crc <<= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t do_crc(uint8_t * data,uint16_t size)
|
||||||
|
{
|
||||||
|
uint16_t crc =0;
|
||||||
|
uint16_t i;
|
||||||
|
for (i=0; i<size; i++){
|
||||||
|
crc = crc_xmodem_update(crc,data[i]);
|
||||||
|
//printf("%x : %x\n",crc,data[i]);
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t do_crc_update(uint16_t crc,uint8_t * data,uint16_t size)
|
||||||
|
{
|
||||||
|
uint16_t i;
|
||||||
|
for (i=0; i<size; i++)
|
||||||
|
crc = crc_xmodem_update(crc,data[i]);
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){
|
void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){
|
||||||
uint16_t i,j;
|
uint16_t i,j;
|
||||||
uint16_t sum = 0;
|
uint16_t sum = 0;
|
||||||
@ -246,9 +282,9 @@ int main(void)
|
|||||||
uint8_t fat_attrib = 0;
|
uint8_t fat_attrib = 0;
|
||||||
uint32_t fat_size = 0;
|
uint32_t fat_size = 0;
|
||||||
uint32_t rom_addr = 0;
|
uint32_t rom_addr = 0;
|
||||||
uint32_t skip_block = 0;
|
|
||||||
uint8_t bank_cnt = 0;
|
uint8_t bank_cnt = 0;
|
||||||
|
uint16_t crc = 0;
|
||||||
|
uint16_t block_cnt;
|
||||||
uart_init();
|
uart_init();
|
||||||
stdout = &uart_stdout;
|
stdout = &uart_stdout;
|
||||||
|
|
||||||
@ -258,14 +294,24 @@ int main(void)
|
|||||||
spi_init();
|
spi_init();
|
||||||
printf("SPI Init\n");
|
printf("SPI Init\n");
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
uint8_t t[] = "david";
|
||||||
|
printf("Test CRC %x\n",do_crc(t,5));
|
||||||
|
while(1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
sram_clear(0x000000, 0x80000);
|
sram_clear(0x000000, 0x80000);
|
||||||
printf("sram_clear\n");
|
printf("sram_clear\n");
|
||||||
#endif
|
#endif
|
||||||
//printf("read 0x0f0f\n");
|
|
||||||
//sram_read(0x0f0f);
|
#if 0
|
||||||
//printf("write 0x0f0f\n");
|
printf("read 0x0f0f\n");
|
||||||
//sram_write(0x0f0f,0xaa);
|
sram_read(0x0f0f);
|
||||||
|
printf("write 0x0f0f\n");
|
||||||
|
sram_write(0x0f0f,0xaa);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
rom_addr = 0x4aaaa;
|
rom_addr = 0x4aaaa;
|
||||||
@ -291,20 +337,19 @@ int main(void)
|
|||||||
read_buffer) == 1) {
|
read_buffer) == 1) {
|
||||||
|
|
||||||
|
|
||||||
for (uint16_t block_cnt=0; block_cnt<BLOCKS; block_cnt++) {
|
for (block_cnt=0; block_cnt<BLOCKS; block_cnt++) {
|
||||||
fat_read_file (fat_cluster,read_buffer,block_cnt);
|
fat_read_file (fat_cluster,read_buffer,block_cnt);
|
||||||
|
|
||||||
if (block_cnt && block_cnt % 64 == 0){
|
if (block_cnt && block_cnt % 64 == 0){
|
||||||
printf("Write Ram Bank: 0x%x Addr: 0x%lx Skipped: %li\n",bank_cnt,rom_addr,skip_block);
|
|
||||||
bank_cnt++;
|
bank_cnt++;
|
||||||
skip_block=0;
|
printf("Write Ram Bank: 0x%x Addr: 0x%lx Block: %x CRC: %x\n",bank_cnt,rom_addr,block_cnt,crc);
|
||||||
|
crc = 0;
|
||||||
}
|
}
|
||||||
//if (sram_check(read_buffer,512))
|
crc = do_crc_update(crc,read_buffer,512);
|
||||||
sram_copy(rom_addr,read_buffer,512);
|
sram_copy(rom_addr,read_buffer,512);
|
||||||
//else
|
|
||||||
// skip_block +=1;
|
|
||||||
rom_addr += 512;
|
rom_addr += 512;
|
||||||
}
|
}
|
||||||
printf("Write Ram Bank: 0x%x Addr: 0x%lx Skipped: %li\n",bank_cnt,rom_addr,skip_block);
|
printf("Write Ram Bank: 0x%x Addr: 0x%lx Block: %x CRC: %x\n",bank_cnt,rom_addr,block_cnt,crc);
|
||||||
printf("Done\n");
|
printf("Done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,6 +370,24 @@ int main(void)
|
|||||||
printf("\nDone 0x%lx\n",rom_addr);
|
printf("\nDone 0x%lx\n",rom_addr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
block_cnt = 0;
|
||||||
|
crc = 0;
|
||||||
|
rom_addr = 0x000000;
|
||||||
|
for (block_cnt=0; block_cnt<BLOCKS; block_cnt++) {
|
||||||
|
sram_read_buffer(rom_addr,read_buffer,512);
|
||||||
|
if (block_cnt && block_cnt % 64 == 0){
|
||||||
|
bank_cnt++;
|
||||||
|
printf("Read Ram Bank: 0x%x Addr: 0x%lx Block: %x CRC: %x\n",bank_cnt,rom_addr,block_cnt,crc);
|
||||||
|
crc = 0;
|
||||||
|
}
|
||||||
|
crc = do_crc_update(crc,read_buffer,512);
|
||||||
|
rom_addr += 512;
|
||||||
|
}
|
||||||
|
printf("Read Ram Bank: 0x%x Addr: 0x%lx Block: %x CRC: %x\n",bank_cnt,rom_addr,block_cnt,crc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
printf("Look for %s\n",DUMPNAME);
|
printf("Look for %s\n",DUMPNAME);
|
||||||
|
|||||||
64
scripts/crc_xmodem.py
Normal file
64
scripts/crc_xmodem.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
|
||||||
|
import ctypes
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
def crc_xmodem_update(crc,data):
|
||||||
|
crc = ctypes.c_uint16(crc.value ^ data.value << 8)
|
||||||
|
for i in range(0,8):
|
||||||
|
if crc.value & 0x8000:
|
||||||
|
crc = ctypes.c_uint16((crc.value << 1) ^ 0x1021);
|
||||||
|
else:
|
||||||
|
crc = ctypes.c_uint16(crc.value << 1);
|
||||||
|
return crc
|
||||||
|
|
||||||
|
|
||||||
|
def do_crc(data):
|
||||||
|
crc = ctypes.c_uint16(0)
|
||||||
|
for idx,char in enumerate(data):
|
||||||
|
crc = crc_xmodem_update(crc,ctypes.c_uint8(ord(char)))
|
||||||
|
return crc.value
|
||||||
|
|
||||||
|
|
||||||
|
def test_performance():
|
||||||
|
data=str()
|
||||||
|
fd = open("/dev/urandom")
|
||||||
|
for i in range(0,256):
|
||||||
|
data+= fd.read(1024)
|
||||||
|
sys.stdout.write("*")
|
||||||
|
sys.stdout.flush()
|
||||||
|
print
|
||||||
|
fd.close()
|
||||||
|
print "%s" % do_crc(data)
|
||||||
|
|
||||||
|
|
||||||
|
def test_algo():
|
||||||
|
data='david'
|
||||||
|
print "%x" % do_crc(data)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
#import cProfile
|
||||||
|
#cProfile.run('test_performance()')
|
||||||
|
|
||||||
|
size = os.stat(sys.argv[1])[6]
|
||||||
|
fd = open(sys.argv[1])
|
||||||
|
addr = 0x0000
|
||||||
|
step = 2**15
|
||||||
|
result = []
|
||||||
|
while addr < size:
|
||||||
|
try:
|
||||||
|
block = fd.read(step)
|
||||||
|
addr += step
|
||||||
|
except:
|
||||||
|
print "Done"
|
||||||
|
break
|
||||||
|
crc = do_crc(block)
|
||||||
|
print "Bank: 0x%02x Addr: 0x%06x Block: 0x%04x CRC 0x%04x" % (addr/(2**15),addr,addr/512, ctypes.c_uint16(crc).value)
|
||||||
|
result.append(hex(ctypes.c_uint16(crc).value))
|
||||||
|
#print result
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user