Skip to content

Commit 1d0aca9

Browse files
committed
Increasing the operating speed of DataFlash chips
1 parent 13fbc23 commit 1d0aca9

1 file changed

Lines changed: 26 additions & 32 deletions

File tree

IMSProg_programmer/spi_nor_flash.c

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@
7878

7979

8080
struct xxx {
81-
uint8_t ibuf[512];
82-
uint8_t obuf[512];
81+
uint8_t ibuf[548];
82+
uint8_t obuf[548];
8383
} spi_buf;
8484

8585

@@ -822,6 +822,7 @@ int at45_read_param(unsigned char *buf, unsigned long from, unsigned long len, u
822822
unsigned char addrLen = 9;
823823
unsigned int sector_addr = 0;
824824
int retval;
825+
uint8_t *ptr = spi_buf.obuf;
825826

826827
programmerType = progType;
827828

@@ -846,38 +847,35 @@ int at45_read_param(unsigned char *buf, unsigned long from, unsigned long len, u
846847
physical_read_addr = read_addr;
847848
data_offset = (physical_read_addr % (sector_size));
848849

849-
850850
SPI_CONTROLLER_Chip_Select_Low(programmerType);
851+
*ptr++ = 0xe8;
852+
*ptr++ = (physical_read_addr >> 16) & 0xff;
853+
*ptr++ = (physical_read_addr >> 8) & 0xff;
854+
*ptr++ = physical_read_addr & 0xff;
855+
*ptr++ = 0xff;
856+
*ptr++ = 0xff;
857+
*ptr++ = 0xff;
858+
*ptr++ = 0xff;
851859

852-
//SPI_CONTROLLER_Write_One_Byte(0x52); //read command
853-
SPI_CONTROLLER_Write_One_Byte(0xE8, programmerType); //read command
854-
SPI_CONTROLLER_Write_One_Byte((physical_read_addr >> 16) & 0xff, programmerType);
855-
SPI_CONTROLLER_Write_One_Byte((physical_read_addr >> 8) & 0xff, programmerType);
856-
SPI_CONTROLLER_Write_One_Byte(physical_read_addr & 0xff, programmerType);
857-
858-
SPI_CONTROLLER_Write_One_Byte(0xff, programmerType);
859-
SPI_CONTROLLER_Write_One_Byte(0xff, programmerType);
860-
SPI_CONTROLLER_Write_One_Byte(0xff, programmerType);
861-
SPI_CONTROLLER_Write_One_Byte(0xff, programmerType);
862-
860+
retval = SPI_CONTROLLER_Write_NByte(spi_buf.obuf, 8, SPI_CONTROLLER_SPEED_SINGLE, programmerType);
863861
retval = SPI_CONTROLLER_Read_NByte(&buf[0],sector_size,SPI_CONTROLLER_SPEED_SINGLE, programmerType);
864862

865863
if (retval)
866864
{
867-
return 0;//error
865+
return 0; //error
868866
}
869-
SPI_CONTROLLER_Chip_Select_High(programmerType);
867+
868+
SPI_CONTROLLER_Chip_Select_High(programmerType);
870869
return 1;
871870
}
872871

873-
874872
int at45_write_param(unsigned char *buf, unsigned long from, unsigned long len, unsigned int sector_size, unsigned char currentAlgorithm, u8 progType)
875-
{ u32 physical_read_addr, remain_len, data_offset;
873+
{ u32 physical_read_addr;
876874
u32 read_addr;
877-
unsigned char algorythm = (currentAlgorithm & 0xf0) >> 8;
878875
unsigned char addrLen = 9;
879876
unsigned int sector_addr = 0;
880877
int retval;
878+
uint8_t *ptr = spi_buf.obuf;
881879

882880
programmerType = progType;
883881

@@ -895,28 +893,24 @@ int at45_write_param(unsigned char *buf, unsigned long from, unsigned long len,
895893
sector_addr = read_addr / sector_size;
896894
read_addr = read_addr % len;
897895
read_addr = read_addr + (sector_addr << addrLen);
898-
remain_len = (u32)len;
899896

900897
physical_read_addr = read_addr;
901-
data_offset = (physical_read_addr % (sector_size));
902-
903898

904899
SPI_CONTROLLER_Chip_Select_Low(programmerType);
905900

906-
SPI_CONTROLLER_Write_One_Byte(0x82, programmerType); //write command
907-
SPI_CONTROLLER_Write_One_Byte((physical_read_addr >> 16) & 0xff, programmerType);
908-
SPI_CONTROLLER_Write_One_Byte((physical_read_addr >> 8) & 0xff, programmerType);
909-
SPI_CONTROLLER_Write_One_Byte(physical_read_addr & 0xff, programmerType);
910-
911-
//SPI_CONTROLLER_Write_One_Byte(0xff);
912-
913-
retval = SPI_CONTROLLER_Write_NByte(buf, sector_size, SPI_CONTROLLER_SPEED_SINGLE, programmerType);
901+
*ptr++ = 0x82;
902+
*ptr++ = (physical_read_addr >> 16) & 0xff;
903+
*ptr++ = (physical_read_addr >> 8) & 0xff;
904+
*ptr++ = physical_read_addr & 0xff;
905+
memcpy(ptr, buf, sector_size);
914906

907+
retval = SPI_CONTROLLER_Write_NByte(spi_buf.obuf, 4 + sector_size, SPI_CONTROLLER_SPEED_SINGLE, programmerType);
915908
if (retval)
916909
{
917-
return 0;//error
910+
return 0; //error
918911
}
919-
SPI_CONTROLLER_Chip_Select_High(programmerType);
912+
913+
SPI_CONTROLLER_Chip_Select_High(programmerType);
920914

921915
return 1;
922916
}

0 commit comments

Comments
 (0)