forked from ohjeongwook/dumpflash
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFlashFile.py
More file actions
62 lines (51 loc) · 1.63 KB
/
FlashFile.py
File metadata and controls
62 lines (51 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import pprint
import struct
from ECC import *
class FlashFile:
def __init__(self,filename, page_size=0x200, oob_size=0x10, page_per_block=0x20):
self.DebugLevel=0
self.FileSize=0
self.UseAnsi=False
self.Open(filename)
self.SetPageInfo(page_size,oob_size,page_per_block)
def SetUseAnsi(self,use_ansi):
self.UseAnsi=use_ansi
def SetPageInfo(self, page_size, oob_size, page_per_block):
self.PageSize=page_size
self.OOBSize=oob_size
self.RawPageSize=self.PageSize+self.OOBSize
self.PagePerBlock=page_per_block
self.BlockSize=self.PageSize * self.PagePerBlock
self.RawBlockSize=self.RawPageSize * self.PagePerBlock
self.PageCount=(self.FileSize)/self.PageSize
self.BlockCount = self.PageCount/self.PagePerBlock
print 'PageSize: 0x%x' % self.PageSize
print 'OOBSize: 0x%x' % self.OOBSize
print 'PagePerBlock: 0x%x' % self.PagePerBlock
print 'BlockSize: 0x%x' % self.BlockSize
print 'RawPageSize: 0x%x' % self.RawPageSize
print 'PageCount: 0x%x' % self.PageCount
print 'FileSize: 0x%x' % self.FileSize
print ''
def Open(self,filename):
try:
self.fd=open(filename,'rb')
import os
self.FileSize=os.path.getsize(filename)
except:
print "Can't open a file:",filename
return False
return True
def Close(self):
self.fd.close()
def readPage(self,pageno,remove_oob=False):
self.fd.seek(pageno*self.RawPageSize)
if remove_oob:
return self.fd.read(self.PageSize)
else:
return self.fd.read(self.RawPageSize)
def readOOB(self,pageno):
self.fd.seek(pageno*self.RawPageSize+self.PageSize)
return self.fd.read(self.OOBSize)
def GetBlockOffset(self,block):
return block * self.RawBlockSize