7878
7979
8080struct 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-
874872int 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