@@ -58,18 +58,18 @@ type FlasherClient struct {
58
58
connected bool
59
59
}
60
60
61
- func NewFlasherClient (ct esp.ChipType , rc * rom_client.ROMClient , baudRate uint ) (* FlasherClient , error ) {
61
+ func NewFlasherClient (ct esp.ChipType , rc * rom_client.ROMClient , romBaudRate uint , baudRate uint ) (* FlasherClient , error ) {
62
62
if baudRate < 0 || baudRate > 4000000 {
63
63
return nil , errors .Errorf ("invalid flashing baud rate (%d)" , baudRate )
64
64
}
65
65
fc := & FlasherClient {ct : ct , s : rc .DataPort (), srw : common .NewSLIPReaderWriter (rc .DataPort ()), rom : rc }
66
- if err := fc .connect (baudRate ); err != nil {
66
+ if err := fc .connect (romBaudRate , baudRate ); err != nil {
67
67
return nil , errors .Trace (err )
68
68
}
69
69
return fc , nil
70
70
}
71
71
72
- func (fc * FlasherClient ) connect (baudRate uint ) error {
72
+ func (fc * FlasherClient ) connect (romBaudRate , baudRate uint ) error {
73
73
var stubJSON []byte
74
74
switch fc .ct {
75
75
case esp .ChipESP8266 :
@@ -81,7 +81,7 @@ func (fc *FlasherClient) connect(baudRate uint) error {
81
81
}
82
82
83
83
common .Reportf ("Running flasher @ %d..." , baudRate )
84
- err := fc .rom .RunStub (stubJSON , []uint32 {uint32 (baudRate )})
84
+ err := fc .rom .RunStub (stubJSON , []uint32 {uint32 (romBaudRate ), uint32 ( baudRate )})
85
85
if err != nil {
86
86
return errors .Annotatef (err , "failed to run flasher stub" )
87
87
}
@@ -91,6 +91,19 @@ func (fc *FlasherClient) connect(baudRate uint) error {
91
91
return errors .Annotatef (err , "failed to set serial speed to %d" , baudRate )
92
92
}
93
93
}
94
+ fc .s .SetReadTimeout (50 * time .Millisecond )
95
+ buf := make ([]byte , 100 )
96
+ if n , err := fc .srw .Read (buf ); err == nil && n == 4 {
97
+ var oldUARTDiv uint32
98
+ if binary .Read (bytes .NewBuffer (buf ), binary .LittleEndian , & oldUARTDiv ) == nil {
99
+ oldUARTdivF := float64 (oldUARTDiv )
100
+ if fc .ct == esp .ChipESP32 {
101
+ oldUARTdivF /= 16.0
102
+ }
103
+ masterCLK := uint32 (romBaudRate ) * uint32 (oldUARTdivF )
104
+ glog .V (1 ).Infof ("Previous UART divider: %.3f (0x%x), master clk: %d" , oldUARTdivF , oldUARTDiv , masterCLK )
105
+ }
106
+ }
94
107
if err = fc .Sync (); err != nil {
95
108
return errors .Annotatef (err , "failed to talk to flasher" )
96
109
}
0 commit comments