baconwaifu / propforth

Automatically exported from code.google.com/p/propforth
0 stars 0 forks source link

UNkown ERROR 90 - fsls PF 4.3 #25

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1.Fresh load of 4.3 Beta
2.reboot
3.copy/paste fs.f

--------------
decimal         \ last line of fs.f copy/paste
Prop0 Cog0 ok

Prop0 Cog0 ok

Prop0 Cog0 ok

Prop0 Cog6 ok
fsclear
Prop0 Cog6 ok
fsls

98304  bytes free in files system

Prop0 Cog6 ok
decimal
Prop0 Cog6 ok
fsls

CON:Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR

Prop0 Cog6 RESET - last status: 90 UNKNOWN ERROR
Prop0 Cog6 ok
hex
Prop0 Cog6 ok
fsls

18000  bytes free in files system

Prop0 Cog6 ok

--------------

Original issue reported on code.google.com by brianbri...@gmail.com on 7 Mar 2011 at 2:31

GoogleCodeExporter commented 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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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:

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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:

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
The failing board has 10K pullups on both SDA and SCL.

Original comment by brianbri...@gmail.com on 4 Apr 2011 at 7:58

GoogleCodeExporter commented 8 years ago
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:

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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:

GoogleCodeExporter commented 8 years ago
Console output of "test" attached

Original comment by brianbri...@gmail.com on 6 Apr 2011 at 12:36

Attachments:

GoogleCodeExporter commented 8 years ago
executed test then watchsee - console attached

Original comment by brianbri...@gmail.com on 6 Apr 2011 at 1:05

Attachments:

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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:

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
will test fix in lates code revision tonight 7/8/2011

Original comment by brianbri...@gmail.com on 8 Jul 2011 at 2:58

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago

Original comment by prof.bra...@gmail.com on 14 Jul 2011 at 1:37

GoogleCodeExporter commented 8 years ago
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