Closed GoogleCodeExporter closed 8 years ago
Brian, I am unable to reproduce this issue.
I load the prop with PropForthKernel.spin, version stamp is PropForth v4.3
2011FEB28,19:10 0
I set the fstop to 20000 ( I deduce this from the fact that fsls shows 98304
bytes free
I load fs.f
and all works properly.
Can you give ma any additional details to reproduce this issue.
Original comment by salsa...@gmail.com
on 13 Mar 2011 at 4:50
1. Load PropForthKernal.spin to EEPROM
2. Copy/Paste fs.f (doesn't matter if fstop is 10000 or 20000)
3. execute fsclear
4. execute fsls twice in a row
--------------------------------
Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
fsls
CON:Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
fsls
CON:Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 ok
--------------------------------
5. Executing fsls twice in a row triggers error, reset clears whatever, fsls
will run OK again, but run it second time and it blows again.
6. Now, Load PropForthBootKernal.spin to EEPROM
7. Copy/Paste fs.f (doesn't matter if fstop is 10000 or 20000)
8. execute fsclear
9. execute fsls twice in a row
--------------------------------
Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
fsls
8000 bytes free in files system
Prop0 Cog6 ok
fsls
8000 bytes free in files system
Prop0 Cog6 ok
decimal
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
--------------------------------
10. NO ERROR
11. Hypothesis, I notice a bunch of "ifndef"s in fs.f . I assume they cover
words in propforth.f and not in the BootKernel. Could it be that one of these
words in propforth.f got damaged in the act of copying it out to fs.f ?????
The fact that the error does not occur with fs.f and the BootKernel seems to
point at the culprit is in propforth.f .
Original comment by brianbri...@gmail.com
on 22 Mar 2011 at 10:14
I don't know if it has any bearing, but I forgot to add to my above comment
that I also did
1. Loaded PropForthKernal.spin to EEPROM
2. Copy/Paste fs.f (doesn't matter if fstop is 10000 or 20000)
3. execute saveforth
4. execute reboot
5. same sequences of words executed above, produced same errors in same fashion
Original comment by brianbri...@gmail.com
on 23 Mar 2011 at 5:55
prof_braino was not able to reproduce the error using the instructions above.
See attached test log. Used protoboard, demoboard, SCHMART board, Pro
Development board, and spineret.
Question: What EEPROMs are needed to reproduce the issue?
My tests all showed
32768 bytes free in files system not 98304 bytes free.
Are three parts of 64k on the test unit that had the error?
Part number, size, datasheet, number of parts present, please.
Original comment by prof.bra...@gmail.com
on 28 Mar 2011 at 12:44
Attachments:
1. Host hardware/software
- Apple iMac 2.66 GHZ 4 GB RAM - Mac OS X Snow Leopard v10.6.7
- Propeller IDE - BST v19.3 (latest stable)
- terminal program - Zterm v1.1b7
2. Propeller Hardware
- Original (through hole version) Propeller Platform @80 MHz
- 2 24LC512 EEPROMs one each at adr 0 and adr 1.
3. Start with a clean fresh load to EEPROM of PropForthKernal.spin
4. Copy/Paste fs.f with fstop set to 20000
5. Execute - all execute as expected
- fsclear
- 8000 100 edump
- 10000 100 edump
- fsls
6. Execute - all execute as expected without error
- 8000 100 edump
- 10000 100 edump
- fsls
7. Execute - as soon as you do fsls two in a row the Error occurs. Something in
the edump word 'clears' the problem.
- fsls
-------------------------
Prop0 Cog6 ok
hex
Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
80000 100 edump
080000 000100:
080000: 000 0B4 0C4 004 06F 00C 010 000 0A4 07F 0AC 07F 040 07F 0B4 07F
.4D.o...$,@4
080010: 094 07F 002 000 030 07F 004 000 0F0 0B1 0BC 0A0 0F0 0A5 0BC 0A0
..0..p1< p%<
080020: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
080030: 004 0B0 0FC 080 058 0A2 0BC 008 0F0 0A7 0BC 0A0 053 0A8 0BC 0A0
.0|X"<.p'< S(<
080040: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
080050: 03E 0AE 0FC 0A0 051 0EC 0BF 068 056 0AA 0BC 05C 0F2 0A1 03C 062 >.|
Ql?hV*<\r!<b
080060: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
080070: 0F1 0BB 0BC 080 04F 0BA 0BC 080 056 0AA 0BC 05C 05D 0B0 0BC 0A0
q;<O:<V*<\]0<
080080: 0F1 0B1 0BC 084 000 0B0 07C 0C1 018 000 04C 05C 0F2 0A1 03C 061
q1<.0|A..L\r!<a
080090: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0800A0: 0FF 0B6 0FC 060 052 09A 0BC 080 04D 0B6 03C 000 052 09A 0BC 084
6|`R<M6<.R<
0800B0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0800C0: 053 0BE 0BC 004 000 0BF 07C 062 029 000 054 05C 000 0B1 0FC 0A0
S><..?|b).T\.1|
0800D0: 053 0B0 03C 004 000 0BF 0FC 068 002 0BE 0FC 02C 001 0BE 0FC 068
S0<..?|h.>|,.>|h
0800E0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0800F0: 04F 0C2 0BC 080 057 0AC 0BC 05C 061 0B0 0BC 0A0 0F1 0B1 0BC 084
OB<W,<\a0< q1<
Prop0 Cog6 ok
8000 100 edump
008000 000100:
008000: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008010: 00D 00D 068 065 078 00D 00D 031 020 077 063 06F 06E 073 074 061
..hex..1 wconsta
008020: 06E 074 020 062 075 069 06C 064 05F 070 072 06F 070 066 06F 072 nt
build_propfor
008030: 074 068 00D 00D 00D 00D 05B 069 066 020 063 074 072 061 00D 031
th....[if ctra.1
008040: 046 038 009 077 063 06F 06E 073 074 061 06E 074 020 063 074 072
F8.wconstant ctr
008050: 061 020 05D 00D 00D 05B 069 066 020 063 074 072 062 00D 031 046 a
]..[if ctrb.1F
008060: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008070: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008080: 009 077 063 06F 06E 073 074 061 06E 074 020 066 072 071 061 020
.wconstant frqa
008090: 05D 00D 00D 05B 069 066 020 066 072 071 062 00D 031 046 042 009
]..[if frqb.1FB.
0080A0: 077 063 06F 06E 073 074 061 06E 074 020 066 072 071 062 020 05D
wconstant frqb ]
0080B0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0080C0: 063 06F 06E 073 074 061 06E 074 020 070 068 073 061 020 05D 00D
constant phsa ].
0080D0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0080E0: 06F 06E 073 074 061 06E 074 020 070 068 073 062 020 05D 00D 00D
onstant phsb ]..
0080F0: 05B 069 066 020 076 063 066 067 00D 031 046 045 009 077 063 06F [if
vcfg.1FE.wco
Prop0 Cog6 ok
10000 100 edump
010000 000100:
010000: 020 065 06C 073 065 020 030 020 00D 020 020 020 020 020 020 020 else
0 .
010010: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010020: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010030: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010040: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010050: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010060: 020 020 020 074 068 065 06E 020 00D 075 06E 074 069 06C 00D 064
then .until.d
010070: 075 06D 06D 079 00D 00D 034 038 020 073 064 05F 073 068 069 066
ummy..48 sd_shif
010080: 074 05F 06F 075 074 020 020 020 020 020 020 020 020 020 020 020 t_out
010090: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0100A0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0100B0: 073 068 069 066 074 05F 06F 075 074 020 06C 06F 06F 070 020 064
shift_out loop d
0100C0: 072 06F 070 00D 031 020 073 064 05F 073 068 069 066 074 05F 06F rop.1
sd_shift_o
0100D0: 075 074 00D 061 061 020 073 064 05F 073 068 069 066 074 05F 06F ut.aa
sd_shift_o
0100E0: 075 074 00D 038 037 020 073 064 05F 073 068 069 066 074 05F 06F ut.87
sd_shift_o
0100F0: 075 074 00D 00D 062 065 067 069 06E 020 073 064 05F 073 068 069
ut..begin sd_shi
Prop0 Cog6 ok
fsls
18000 bytes free in files system
Prop0 Cog6 ok
8000 100 edump
008000 000100:
008000: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008010: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008020: 06E 074 020 062 075 069 06C 064 05F 070 072 06F 070 066 06F 072 nt
build_propfor
008030: 074 068 00D 00D 00D 00D 05B 069 066 020 063 074 072 061 00D 031
th....[if ctra.1
008040: 046 038 009 077 063 06F 06E 073 074 061 06E 074 020 063 074 072
F8.wconstant ctr
008050: 061 020 05D 00D 00D 05B 069 066 020 063 074 072 062 00D 031 046 a
]..[if ctrb.1F
008060: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008070: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
008080: 009 077 063 06F 06E 073 074 061 06E 074 020 066 072 071 061 020
.wconstant frqa
008090: 05D 00D 00D 05B 069 066 020 066 072 071 062 00D 031 046 042 009
]..[if frqb.1FB.
0080A0: 077 063 06F 06E 073 074 061 06E 074 020 066 072 071 062 020 05D
wconstant frqb ]
0080B0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0080C0: 063 06F 06E 073 074 061 06E 074 020 070 068 073 061 020 05D 00D
constant phsa ].
0080D0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0080E0: 06F 06E 073 074 061 06E 074 020 070 068 073 062 020 05D 00D 00D
onstant phsb ]..
0080F0: 05B 069 066 020 076 063 066 067 00D 031 046 045 009 077 063 06F [if
vcfg.1FE.wco
Prop0 Cog6 ok
10000 100 edump
010000 000100:
010000: 020 065 06C 073 065 020 030 020 00D 020 020 020 020 020 020 020 else
0 .
010010: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010020: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010030: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010040: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010050: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
010060: 020 020 020 074 068 065 06E 020 00D 075 06E 074 069 06C 00D 064
then .until.d
010070: 075 06D 06D 079 00D 00D 034 038 020 073 064 05F 073 068 069 066
ummy..48 sd_shif
010080: 074 05F 06F 075 074 020 020 020 020 020 020 020 020 020 020 020 t_out
010090: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0100A0: 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
................
0100B0: 073 068 069 066 074 05F 06F 075 074 020 06C 06F 06F 070 020 064
shift_out loop d
0100C0: 072 06F 070 00D 031 020 073 064 05F 073 068 069 066 074 05F 06F rop.1
sd_shift_o
0100D0: 075 074 00D 061 061 020 073 064 05F 073 068 069 066 074 05F 06F ut.aa
sd_shift_o
0100E0: 075 074 00D 038 037 020 073 064 05F 073 068 069 066 074 05F 06F ut.87
sd_shift_o
0100F0: 075 074 00D 00D 062 065 067 069 06E 020 073 064 05F 073 068 069
ut..begin sd_shi
Prop0 Cog6 ok
fsls
18000 bytes free in files system
Prop0 Cog6 ok
fsls
CON:Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 ok
-------------------------
Original comment by brianbri...@gmail.com
on 29 Mar 2011 at 9:02
It occurs to me that this may be a bug in the BST compiler. I will journey over
to "the Dark Side" and dust off my Winders stuff and compile and build an
EEPROM binary there and load that and see how that goes.
Original comment by brianbri...@gmail.com
on 29 Mar 2011 at 9:10
fsclear is a pretty simple word, it writes FFFF at the base of the eeprom,
so if the data is correct, we are seeing an error writing to the eeprom.
It may be possible the forth routines to drive the eeprom are out of spec.
So if I may suggest a path:
fsclr - writes blanks to the eeprom
8000 100 edump
10000 100 edump
-1 8000 EW!
8000 100 edump
10000 100 edump
This should verify we can read and write to the eeprom.
After that we can try to figure out if we have a bug in the eeprom driver
or it is something else.
Original comment by salsa...@gmail.com
on 29 Mar 2011 at 10:22
NOPE!
1. I went to WinXP
- compiled and loaded with Propeller Tool 1.2.7.
2. I went back to the Mac OS
- Copy/Pasted fs.s into Zterm
3. Executed - it errored after second fsls
- fsclear
- fsls
- fsls
Original comment by brianbri...@gmail.com
on 29 Mar 2011 at 10:30
OK, Sal, I did as you asked
1. On my standard board (24LC512) using EW! and fsclr ad eddump
- -1 8000 EW! works
- -1 8002 EW! gets an EEPROM Write Error (or any other address)
- fsclr, only writes blanks to $8000-$83ff regardless of fstop setting.
2. ON a different board with an AT24C512
- -1 8000 EW! works
- -1 8002 EW! works (or any other address)
- fsclr, still only writes blanks to $8000-$83ff regardless of fstop setting.
3. I have attached the data sheet for the 24LC512
4. The problem appears to be EEPROM specific, but I'll be darned of I can figure out why $8000 can be written to but not other addresses and why blanks got written (residue from past versions?)
5. second problem, possibly un related, why does fsclr stop at $83ff?
6. I am going to set both boards back to 4.0 and check this out. I know, because I saw residue of my 4.0 files while this, that I had fswritten well into the upper reaches of the second eeprom
Original comment by brianbri...@gmail.com
on 30 Mar 2011 at 12:08
Attachments:
My earlier mistake, fsclr does only clear out the first 1k bytes.
Used to clear out whole eeprom, but it took too long, and was really only for
debugging.
The first word, which is FFFF, for the last file is all that is really
necessary.
One other thought, make sure the board has pullup resistors. The routines put
the pins to input when the eeprom is not being used, this allows multiple cogs
to use the eeproms, but could leave the eeprom is a strange state. I had an
with eeproms similar to this on a breadboard.
Otherwise:
if the eeprom is in a strange state, this should fix it, and that will
help narrow the cause
repeat the test with these slightly modified routines:
fl
\ eereset ( -- ) initialize the eeprom in case it is in a weird state
[ifndef eereset
: eereset _eestart _sdah 9 0 do _sclh _scll loop _eestart _eestop ; ]
\
\
\ eewritepage ( eeAddr addr u -- t/f ) return true if there was an error, use
lock 1
: eewritepage
begin
1 lockset 0=
until
\ resets the eeprom if it is in a starnge state
eereset
1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift
_eestart A0 or _eewrite swap _eewrite or swap _eewrite or
rot2 bounds
do
i C@ _eewrite or
loop
_eestop 10 delms
1 lockclr drop
;
\
\
\ EW! ( n1 eeAddr -- )
: EW!
swap t0 W! t0 2 eewritepage
if
A ERR
then
;
Original comment by salsa...@gmail.com
on 30 Mar 2011 at 5:43
1. My standard 2 x 24lc512 hardware setup
2. V4.3 PropForthKernal.spin with fs.f applied and saveforth-ed
3. Your code above Copy/Pasted (had to add hex word inside the fl word)
-------------------------------------
CON:Prop0 PROP REBOOT PropForth v4.3 2011FEB28 19:10 1
CON:Prop0 Cog0 RESET - last status: 0 ok
CON:Prop0 Cog1 RESET - last status: 0 ok
CON:Prop0 Cog2 RESET - last status: 0 ok
CON:Prop0 Cog3 RESET - last status: 0 ok
CON:Prop0 Cog4 RESET - last status: 0 ok
CON:Prop0 Cog5 RESET - last status: 0 ok
CON:Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 ok
fl
Prop0 Cog0 ok
hex
Prop0 Cog0 ok
Prop0 Cog0 ok
[ifndef eereset
Prop0 Cog0 ok
: eereset _eestart _sdah 9 0 do _sclh _scll loop _eestart _eestop ; ]
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog0 ok
: eewritepage
begin
1 lockset 0=
until
eereset
1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift
_eestart A0 or _eewrite swap _eewrite or swap _eewrite or
rot2 bounds
do
i C@ _eewrite or
loop
_eestop 10 delms
1 lockclr drop
;
Prop0 Cog0 ok
: EW!
swap t0 W! t0 2 eewritepage
if
A ERR
then
;
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
hex
Prop0 Cog6 ok
8000 40 edump
008000 000040:
008000: 0FF 0FF 020 020 020 020 020 020 020 020 020 020 020 020 020 020
008010: 020 020 020 020 020 020 020 020 020 020 020 020 020 020 020 020
008020: 020 020 020 020 020 020 020 020 020 020 020 020 020 020 020 020
008030: 020 020 020 020 020 020 020 020 020 020 020 020 020 020 020 020
Prop0 Cog6 ok
fsls
008000 002020
00A080 002020
00C100 002020
00E180 002020
CON:Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 ok
fsls
CON:Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 ok
-------------------------------------
Original comment by brianbri...@gmail.com
on 1 Apr 2011 at 1:28
Ok, it is fairly clear we have an error on the read. I think I see a path. Will
post some code to verify tomorrow, just want to test it first.
Original comment by salsa...@gmail.com
on 1 Apr 2011 at 2:15
Current hypothesis:
The eeprom goes into a strange state for whatever reason:
Test: load the following routines right after forth is installed, and before
fs, or the saveforth. If it changes behavior, we can pursue this path. If it
does
not, then something is out of spec, and we will have to take a different path.
fl
hex
\ eereset ( -- ) initialize the eeprom in case it is in a weird state
: eereset _eestart _sdah 9 0 do _sclh _scll loop _eestart _eestop ;
\
\
\ eewritepage ( eeAddr addr u -- t/f ) return true if there was an error, use
lock 1
: eewritepage
begin
1 lockset 0=
until
\ resets the eeprom if it is in a strange state
eereset
1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift
_eestart A0 or _eewrite swap _eewrite or swap _eewrite or
rot2 bounds
do
i C@ _eewrite or
loop
_eestop 10 delms
1 lockclr drop
;
\
\
\ EW! ( n1 eeAddr -- )
: EW!
swap t0 W! t0 2 eewritepage
if
A ERR
then
;
\ _eeread ( t/f -- c1 ) read a byte from the eeprom, ackbit in, byte out
: _eeread _sdai 0 8 0 do 1 lshift _sclh _sda? _scll if 1 or then loop
swap if _sdah else _sdal then _sdao _sclh _scll _sdal ;
\ the eereadpage and eewritePage words assume the eeprom are 64kx8 and will
address up to
\ 8 sequential eeproms
\ eereadpage ( eeAddr addr u -- t/f ) return true if there was an error, use
lock 1
: eereadpage
begin
1 lockset 0=
until
\ resets the eeprom if it is in a strange state
eereset
1 max rot dup ff and swap dup 8 rshift ff and swap 10 rshift 7 and 1 lshift dup
>r
_eestart A0 or _eewrite swap _eewrite or swap _eewrite or
_eestart r> A1 or _eewrite or
rot2 bounds
do lasti? _eeread i C! loop _eestop 1 lockclr drop ;
\
\ saveforth( -- ) write the running image to eeprom UPDATES THE CURRENT VERSION
STR
: saveforth
c" here" find
if
version W@ dup C@ + dup C@ 1+ swap C!
pfa>nfa here W@ swap
begin dup W@ over EW! 2+ dup 3F and 0= until
do
ibound i - 40 min dup i dup rot
eewritepage if 8003 ERR then _p? if 2e emit then
+loop
else
drop
then
_p?
if
cr
then
;
Original comment by salsa...@gmail.com
on 1 Apr 2011 at 2:30
1. I followed the instructions in Comment 13 to the letter using my standard 2
x 24lc512 platform and code from 4.3 . All _appeared_ well. Then I tried to
Copy/Paste the demo code in the front of fs.f and that _appeared_ to go well.
2. Then I did fsload demo and it all came unglued. Unsure if the fswrites
were good and the reads in the fslaods were bad, ,or the fswrites were bad and
reads were good, or both were bad.
3. I then took my alternate platform with the surface mount prop and single sm
at24c512 and loaded the same setup. I copy/pasted the fs.f demo code and did
fsload demo and it worked fine no errors at all.
4. I then went back to my standard platform and loaded PF4.0a
02-propforth.spin, 22-fs.f,and saveforth-ed. Then I used the same fs.f demo. It
worked without error. I did an fswrite of 23-propforth.f to get a big file
write and an fsload propforth.f to get a big file read ....all OK.
5. Same hardware works under 4.0a, blows up under 4.3 ... I have to ask the
question, what changes to fs.f from 4.0 to 4.3 ???? ... changes that work on
some EEPROMs and not on others ... adjust a timeout??? ... send a sequence too
fast/too slow ???
Original comment by brianbri...@gmail.com
on 2 Apr 2011 at 4:20
I still have not been able to reproduce this bug.
There were no changes between 4.0 and 4.3. So my current hypothesis
is we have a timing bug. It explains the weirdness, I did some analysis
and think I have found a bug in how bits are read. Do not know whether or not
this
is the cause of what we are seeing, but it is a deviation from spec.
I will cut a new drop tonight with the fix for the deviation, test it, and post
it here.
Original comment by salsa...@gmail.com
on 4 Apr 2011 at 4:29
The failing board has 10K pullups on both SDA and SCL.
Original comment by brianbri...@gmail.com
on 4 Apr 2011 at 7:58
I have cut a new version. Just test it on the board that failed, it has passed
on all the system I have.
It should fail, there have been no timing changes. We will use this as a
baseline
for changes.
compile and load PropForthKernelA.spin into eeprom
load the demo files
fsload demo
Here is my test run:
reboot
CON:Prop0 Cog0 RESET - last status: 0 ok
CON:Prop0 Cog1 RESET - last status: 0 ok
CON:Prop0 Cog2 RESET - last status: 0 ok
CON:Prop0 Cog3 RESET - last status: 0 ok
CON:Prop0 Cog4 RESET - last status: 0 ok
CON:Prop0 PROP REBOOT PropForth v4.4EEBUG-A 2011APR04 16:15 0
CON:Prop0 Cog5 RESET - last status: 0 ok
CON:Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
fl
Prop0 Cog0 ok
fswrite demo
fsload hello.f
fsload bye.f
fsload aloha.f
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog0 ok
fswrite hello.f
: hello ." Hello world" cr ;
Prop0 Cog0 ok
Prop0 Cog0 ok
fswrite bye.f
: bye ." Goodbye world" cr ;
Prop0 Cog0 ok
Prop0 Cog0 ok
fswrite aloha.f
: aloha if ." Hello" else ." Goodbye" then ." world" cr ;
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 ok
fsload demo
fsload hello.f
: hello ." Hello world" cr ;
Prop0 Cog1 ok
Prop0 Cog0 ok
fsload bye.f
: bye ." Goodbye world" cr ;
Prop0 Cog1 ok
Prop0 Cog0 ok
fsload aloha.f
: aloha if ." Hello" else ." Goodbye" then ." world" cr ;
Prop0 Cog1 ok
Prop0 Cog0 ok
Prop0 Cog6 ok
hello
Hello world
Prop0 Cog6 ok
bye
Goodbye world
Prop0 Cog6 ok
0 aloha
Goodbye world
Prop0 Cog6 ok
1 aloha
Hello world
Prop0 Cog6 ok
Original comment by salsa...@gmail.com
on 5 Apr 2011 at 1:44
Attachments:
As per Comment 17
------------------------
Prop0 Cog6 ok
CON:Prop0 Cog0 RESET - last status: 0 ok
CON:Prop0 Cog1 RESET - last status: 0 ok
CON:Prop0 Cog2 RESET - last status: 0 ok
CON:Prop0 Cog3 RESET - last status: 0 ok
CON:Prop0 Cog4 RESET - last status: 0 ok
CON:Prop0 PROP REBOOT PropForth v4.4EEBUG-A 2011APR04 16:15 0
CON:Prop0 Cog5 RESET - last status: 0 ok
CON:Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
fsls
32768 bytes free in files system
Prop0 Cog6 ok
fsls
CON:Prop0 Cog6 RESET - last status: 144 UNKNOWN ERROR
Prop0 Cog6 RESET - last status: 144 UNKNOWN ERROR
Prop0 Cog6 ok
reboot
CON:Prop0 Cog0 RESET - last status: 0 ok
CON:Prop0 Cog1 RESET - last status: 0 ok
CON:Prop0 Cog2 RESET - last status: 0 ok
CON:Prop0 Cog3 RESET - last status: 0 ok
CON:Prop0 Cog4 RESET - last status: 0 ok
CON:Prop0 PROP REBOOT PropForth v4.4EEBUG-A 2011APR04 16:15 0
CON:Prop0 Cog5 RESET - last status: 0 ok
CON:Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 ok
fl
Prop0 Cog0 ok
fswrite demo
fsload hello.f
fsload bye.f
fsload aloha.f
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog0 ok
fswrite hello.f
: hello ." Hello world" cr ;
Prop0 Cog0 ok
Prop0 Cog0 ok
fswrite bye.f
: bye ." Goodbye world" cr ;
Prop0 Cog0 ok
Prop0 Cog0 ok
fswrite aloha.f
: aloha if ." Hello" else ." Goodbye" then ." world" cr ;
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 ok
fsload demo
CON:Prop0 Cog6 RESET - last status: 144 UNKNOWN ERROR
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 RESET - last status: 144 UNKNOWN ERROR
UNDEFINED WORD Prop0
Prop0 Cog0 ok
hex
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 ok
UNDEFINED WORD Prop0
Prop0 Cog0 ok
8000 100 edump
8000 0100:
8000: 2B 00 04 64 65 6D 6F 66 73 6C 6F 61 64 20 68 65 +..demofsload he
8010: 6C 6C 6F 2E 66 0D 66 73 6C 6F 61 64 20 62 79 65 llo.f.fsload bye
8020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8030: 20 20 20 20 20 20 20 20 20 20 1D 00 07 68 65 6C ...hel
8040: 1D 00 07 68 65 6C 6C 6F 2E 66 3A 20 68 65 6C 6C ...hello.f: hell
8050: 6F 20 2E 22 20 48 65 6C 6C 6F 20 77 6F 72 6C 64 o ." Hello world
8060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8070: 20 20 20 20 20 20 20 20 20 20 1D 00 05 62 79 65 ...bye
8080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8090: 20 47 6F 6F 64 62 79 65 20 77 6F 72 6C 64 22 20 Goodbye world"
80A0: 63 72 20 3B 0D 20 20 20 20 20 20 20 20 20 20 20 cr ;.
80B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3B 00 07 ;..
80C0: 3B 00 07 61 6C 6F 68 61 2E 66 3A 20 61 6C 6F 68 ;..aloha.f: aloh
80D0: 61 20 69 66 20 2E 22 20 48 65 6C 6C 6F 22 20 65 a if ." Hello" e
80E0: 6C 73 65 20 2E 22 20 47 6F 6F 64 62 79 65 22 20 lse ." Goodbye"
80F0: 74 68 65 6E 20 2E 22 20 20 77 6F 72 6C 64 22 20 then ." world"
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog0 ok
8000 0100:
UNDEFINED WORD 0100:
Prop0 Cog0 ok
fsls
8000 002B demo
CON:Prop0 Cog0 RESET - last status: 144 UNKNOWN ERROR
Prop0 Cog0 RESET - last status: 144 UNKNOWN ERROR
CON:Prop0 Cog6P oRES ECTo g- 0 oak
t status: 144 UNKNOWN ERROR
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 RESET - last status: 144 UNKNOWN ERROR
UNDEFINED WORD Prop0
Prop0 Cog0 ok
fsls
32768 00043 demo
CON:Prop0 Cog0 RESET - last status: 144 UNKNOWN ERROR
Prop0 Cog0 RESET - last status: 144 UNKNOWN ERROR
CON:Prop0 Cog6P oRES ECTo g- 0 oak
t status: 144 UNKNOWN ERROR
Prop0 Cog0 ok
Prop0 Cog0 ok
Prop0 Cog6 RESET - last status: 144 UNKNOWN ERROR
UNDEFINED WORD Prop0
Prop0 Cog0 ok
Original comment by brianbri...@gmail.com
on 5 Apr 2011 at 11:09
I am uploading a test program to run on the version of forth in the last
comment.
It does the fs operations while using cog 0 to scope the sda and scl pins. If
there is any timing strangeness, it should show up.
Can you please run on the failing board and send me the output.
Load PropForthKernelA.spin on the board
Paste in the contents of eebugtest.f
run test
Original comment by salsa...@gmail.com
on 5 Apr 2011 at 11:18
Attachments:
Console output of "test" attached
Original comment by brianbri...@gmail.com
on 6 Apr 2011 at 12:36
Attachments:
executed test then watchsee - console attached
Original comment by brianbri...@gmail.com
on 6 Apr 2011 at 1:05
Attachments:
The traces were a great help.
I have been through the traces, and from what I can see the pullup on the SDA
line is flaky. There are multiple places where it oscillates when there is no
reason. Trace 1 around cycle 2304, 2944, 3072. Specifically trace 2 around
cycle 24064. The _eestop clearly sends the stop to the eeprom and sets SDA and
SCL to inputs. SCL goes high, and SDA seems to float up and down and then wind
up lo.
This will definitely cause the next operation to fail, because the SDA line is
never driven high so the next start sequence is invalid. It is expected to
already be pulled high. This was the possible timing problem I referred to
earlier. While we could fix this in SW, the floating line could cause data
errors.
If I had the board present my next step would involve analogue tests. Can you
check the SDA pullup please and let me know if this is the issue, or we have
something else
really weird going on, like a device misbehaving on the serial bus.
I will try to come up with other tests to try and isolate further.
Original comment by salsa...@gmail.com
on 7 Apr 2011 at 3:04
I got somewhat diverted by real life ... I am back. I am still trying to get a
good 'look' at the pullups. IN the meantime I blew the dust off my PPDB (Prop
is DIP40 also, EEPROM only has one 10K pull up on P29/SDA) and pulled the
24LC256 and put in a 24LC512 and repeated the last test
1. loaded PropForthKernalA.spin
2. c/p-ed fs demo, then fsload demo, etc ... all ran well well
3. c/p-ed eebugtest.f then executed test
4. console output attached
Do you want me to run it with a pullup on P28/SCL ?
Random thought ... bad P28 and/or P29 on Propeller? Maybe I should try swapping
new CPUs and/or EEPROM in/out.
Original comment by brianbri...@gmail.com
on 10 Apr 2011 at 8:18
Attachments:
Real life, is that is the time between soldering and programming :)?
The trace is exactly what I would expect, SDA line goes high, and SCL goes lo,
which is OK. The SDA pin on the eeprom is an open collector output, so it is
the only one that really requires the pullup.
All I can say for sure (with 95% confidence, as there is always some chance
something else is causing the issue) is that the prop does not see the SDA line
high, so I am assuming the eeprom does not either, since it fails, and that is
exactly what we would expect.
Might be a flaky pin, but I would put highest odds on pullup / pullup
connection. Once that is eliminated, I would go after the prop, and then the
actual eeproms.
Thank you for following up.
Original comment by salsa...@gmail.com
on 10 Apr 2011 at 11:44
Unless there is further feedback on this one I suggest we close this issue.
Original comment by salsa...@gmail.com
on 5 Jul 2011 at 2:47
Developer has determined the issue and made necessary fix.
Moved to 'Fixed'
Waiting on originator to report fix is satisfactory (or not)
[If no response and not other reports of error after fix, we will move to
"Done']
Original comment by prof.bra...@gmail.com
on 8 Jul 2011 at 7:00
will test fix in lates code revision tonight 7/8/2011
Original comment by brianbri...@gmail.com
on 8 Jul 2011 at 2:58
Does not appear to be fixed. Used v4.5 ... is there newer code? TRied two
different PP boards, both of which work under 4.0a
0 - using original Propeller Platform board with two 24LC512s
1 - fresh load of PropForthKernal.spin v4.5
2 - copy/paste fs.f (fstop edited to $20000)
3 - saveforth
4 - fsclear
5 - fsls
6 - terminal output
-------------------
Prop0 Cog6 ok
saveforth
................................................................................
..........................................
................................................................................
.......................
Prop0 Cog6 ok
reset
CON:Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 ok
reboot
CON:Prop0 Cog0 RESET - last status: 0 ok
CON:Prop0 Cog1 RESET - last status: 0 ok
CON:Prop0 Cog2 RESET - last status: 0 ok
CON:Prop0 Cog3 RESET - last status: 0 ok
CON:Prop0 Cog4 RESET - last status: 0 ok
CON:Prop0 PROP REBOOT PropForth v4.5 2011MAY31 17:30 1
CON:Prop0 Cog5 RESET - last status: 0 ok
CON:Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 RESET - last status: 0 ok
Prop0 Cog6 ok
fsls
CON:Prop0 Cog6 RESET - last status: 10 EEPROM WRITE ERROR
Prop0 Cog6 RESET - last status: 10 EEPROM WRITE ERROR
Prop0 Cog6 ok
-------------------
7 - unable to test issue 22 because of this.
Original comment by brianbri...@gmail.com
on 8 Jul 2011 at 10:32
Original comment by prof.bra...@gmail.com
on 14 Jul 2011 at 1:37
The one offending board is now permanently mounted and doing regression test
duty. Version 5.0 fs filesystem regression test passes.
Original comment by salsa...@gmail.com
on 20 Jan 2012 at 2:19
Original issue reported on code.google.com by
brianbri...@gmail.com
on 7 Mar 2011 at 2:31