2015-08-25 17:30:38 -04:00
#!/usr/bin/env python
#
# Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.
#
# This file is part of PortaPack.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not, write to
# the Free Software Foundation, Inc., 51 Franklin Street,
# Boston, MA 02110-1301, USA.
#
import sys
usage_message = """
PortaPack SPI flash image generator
2016-07-01 13:37:22 -04:00
Usage : < command > < bootstrap_path > < baseband_path > < application_path > < output_path >
2015-08-25 17:30:38 -04:00
Where paths refer to the . bin files for each component project .
"""
def read_image ( path ) :
f = open ( path , ' rb ' )
data = f . read ( )
f . close ( )
return data
def write_image ( data , path ) :
f = open ( path , ' wb ' )
f . write ( data )
f . close ( )
2016-07-01 13:37:22 -04:00
if len ( sys . argv ) != 5 :
2015-08-25 17:30:38 -04:00
print ( usage_message )
sys . exit ( - 1 )
2015-08-25 18:11:22 -04:00
bootstrap_image = read_image ( sys . argv [ 1 ] )
2016-07-01 13:37:22 -04:00
baseband_image = read_image ( sys . argv [ 2 ] )
application_image = read_image ( sys . argv [ 3 ] )
output_path = sys . argv [ 4 ]
2015-08-25 18:11:22 -04:00
2015-08-25 17:30:38 -04:00
spi_size = 1048576
images = (
{
' name ' : ' bootstrap ' ,
' data ' : bootstrap_image ,
2016-08-06 02:49:45 -04:00
' size ' : 0x10000 ,
2015-08-25 17:30:38 -04:00
} ,
{
' name ' : ' baseband ' ,
' data ' : baseband_image ,
2016-08-06 02:49:45 -04:00
' size ' : 0x70000 ,
2015-08-25 17:30:38 -04:00
} ,
{
' name ' : ' application ' ,
' data ' : application_image ,
' size ' : len ( application_image ) ,
}
)
2015-08-25 17:56:50 -04:00
spi_image = bytearray ( )
spi_image_default_byte = bytearray ( ( 255 , ) )
2015-08-25 17:30:38 -04:00
for image in images :
if len ( image [ ' data ' ] ) > image [ ' size ' ] :
2016-08-06 02:49:45 -04:00
raise RuntimeError ( ' data for image " %(name)s " is longer than 0x %(size)x bytes 0x %(sz)x ' % { ' name ' : image [ ' name ' ] , ' size ' : image [ ' size ' ] , ' sz ' : len ( image [ ' data ' ] ) } )
2015-08-25 17:30:38 -04:00
pad_size = image [ ' size ' ] - len ( image [ ' data ' ] )
padded_data = image [ ' data ' ] + ( spi_image_default_byte * pad_size )
spi_image + = padded_data
if len ( spi_image ) > spi_size :
raise RuntimeError ( ' SPI flash image size of %d exceeds device size of %d bytes ' % ( len ( spi_image ) , spi_size ) )
write_image ( spi_image , output_path )