Помогите разобраться с проблемкой:
Собрал простую платку с SEAforth40 (версия чипа 7Jr1). На плате сам
процессор с подключенной к нему spi-памятью (at25df081)+. Все
остальные выводы выведены на отдельные разъемы.
Для работы с платкой используется отладочная плата с контроллером
lpc2148 в котором прошит lpcforth от MPE. Плата с lpc2148 используется
для прошивки spi-флеш + планируется использовать его для
самостоятельной загрузки S40c18 через любой из его загрузочных портов
(синхр или асинхр).
При включении (и после сброса) 40С18 выдает на параллельных портах
$25555, на остальных 0. Т.е., есть надежда, что сам процессор живой.
При сбросе на spi порту 40С18 проскакивают некие импульсы, после чего
на линиях 0. Тоже вроде логично.
Проблема в следующем: как в симуляторе VentureForth сформировать
загрузочный код для:
а) прошивки его в spi память (или заливки через spi порт например с
контроллера);
б) как сформировать загрузочный поток для асинхронного порта;
независимо от наличия SEAforth(R) Evaluation Kit 40C18 (её у меня нет и
не предвидится:-))
а)
Для формирования spi-boot кода делал следующее (из примера musicbox):
macro: s40>32
32 31 30 20 10 00 01 11
21 22 12 02 03 13 23 33
34 24 14 04 05 15 25 35
36 26 16 06 07 17 27 37
38 28 18 08 09 19 29 39
40 >stream
macro;
0 :xnode s40>32 xsave blink40.t18
полученный бинарный blink40.t18 прошивался в spi память.
б)
Для загрузки с асинхронного порта:
33Stream StreamSerial xsave serial33.t18
serial33.t18 затем считывался 32-битными словами, которые побитно,
начиная с младших передавались на вход 40C18-му.
или где-то тут ошибки?
Ну и последний вопрос: как ещё можно протестировать работу/неработу
процессора 40С18?
Скоро, конечно, допаяю вторую платку, сравню поведение процессоров, но
всё-таки....
Для прошивки в spi-flash требуется использование слова >flash (см.
musicbox). Дело в том, что blink40.t18 представляет собой дамп
памяти симулятора, эти данные не предназначены для прямой записи куда-
либо. Слово >flash работает по USB: первым делом оно пересылает на
SEAforth код программатора, затем формирует необходимый заголовок и
пересылает данные blink40.t18, переведенные в нужный формат с помощью
[x]>USBdrive. Таким образом SEAforth сам прожигает данные для spi-
flash. Есть более современный аналог >flash, который программирует
данные с 33-его (serial) ядра.
Сохранить код в формате для внешнего программатора можно следующим
образом:
0 :xnode s40>32 StreamFlash bsave flash.bin
Для загрузки с serial используем:
0 :xnode s40>33 xserial serial.bin
Слова bsave и xserial определены в ptools.f. Я добавлю его к файлам
группы.
Ниже определение s40>33:
macro: s40>33
33 32 31 30 20 21 22 23 24 25
26 27 28 18 17 16 15 14 13 12
11 10 00 01 02 03 04 05 06 07
08 09 19 29 39 38 37 36 35 34
40 >stream
macro;
По вопросам, связанным с порядком загрузки с spi/serial полезно
посмотреть
файлы serial.vf и spi.vf в папке VentureForth/vf/c7Jr01
О©╫О©╫О©╫О©╫О©╫О©╫О©╫!
О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ ptools.f. О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ bsave, xserial О©╫О©╫О©╫.
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ :-)
О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫!
> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ spi-flash О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ >flash (О©╫О©╫.
> musicbox). О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫, О©╫О©╫О©╫ blink40.t18 О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫-
> О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ >flash О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ USB: О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
> SEAforth О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ blink40.t18, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> [x]>USBdrive. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ SEAforth О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ spi-
> flash. О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ >flash, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ 33-О©╫О©╫О©╫ (serial) О©╫О©╫О©╫О©╫.
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
> 0 :xnode s40>32 StreamFlash bsave flash.bin
> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ serial О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
> 0 :xnode s40>33 xserial serial.bin
> О©╫О©╫О©╫О©╫О©╫ bsave О©╫ xserial О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ ptools.f. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫.
> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ s40>33:
> macro: s40>33
> 33 32 31 30 20 21 22 23 24 25
> 26 27 28 18 17 16 15 14 13 12
> 11 10 00 01 02 03 04 05 06 07
> 08 09 19 29 39 38 37 36 35 34
> 40 >stream
> macro;
> О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ spi/serial О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫ serial.vf О©╫ spi.vf О©╫ О©╫О©╫О©╫О©╫О©╫ VentureForth/vf/c7Jr01
Вставляю ptools.f прямо в сообщение:
\ Author: Peter Sovietov
\ tools
: fcreate ( "file" - fd) bl parse w/o bin create-file throw ;
: xsave ( "file")
fcreate >r 0 >t here cells r@ write-file throw
r> close-file throw ;
: bsave ( "file")
fcreate >r FileBuf BufSize r@ write-file throw
r> close-file throw ;
: nerase 0 #page scrub 0 org ;
: xerase 0 here 1+ scrub 0 org ;
: ,s ( # a n - #+n) dup >r bounds do i c@ c, loop r> + ;
create stickers stickers #nodes cells 2* dup allot erase
: >sticker ( s n) node @ cells 2* stickers + 2! ;
: sticker> ( - s n) node @ cells 2* stickers + 2@ ;
: sticker" ( "text")
[char] " parse [f] here swap
2dup 2>r dup allot move 2r> >sticker ;
: >serial ( n - s) $3ffff and 6 lshift $ffffd2 xor ;
: serial> ( s - n) $ffffd2 xor 6 rshift ;
: xserial ( "file")
fcreate here 0 ?do i m@ >serial pad ! pad over 3 swap
write-file throw loop close-file throw ;
Некоторые замечания касательно "железа".
- фронт сигнала сброса должен быть крутым. Скажем кривая заряда
конденсатора уже не подходит.
- при использовании загрузочной spi-памяти линию ~cs (выбор
микросхемы) лучше подтянуть резистором (~2K) к питанию.
http://www.asu.ru/structure/faculties/fiztech_dep/vych/works/seaforth/