nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 20 Jan 2021 05:05



Reply to topic  [ 57 posts ]  Go to page Previous  1, 2, 3, 4
Ethernet для Timex Sinclair 2068 и пр. (SprinterNet) 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
Заказал 5 платок (минимум) красного цвета у китайцев на JLCPCB - получилось всего $68 с доставкой DHL :mrgreen:

"All orders finished data preparation, ready for PCB fabrication."

_________________
:eugeek: https://twitter.com/Shaos1973


12 Jan 2021 20:14
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
Добавил маскирование сигнала /MEMR при обращении к SPI и визнету (включается/выключается существующим управляющим битом TX/RX) - обошёлся уже имеющимися в наличии на плате неиспользованными гейтами - надо будет заказывать новую версию платы, т.к. проводочками эти изменения напаивать на существующую плату будет немного проблематично (хотя и возможно)...

Попробовал кое-какие изменения из новой версии макетки навесить проводочками на старую версию:

Attachment:
ShaosCart6.jpg
ShaosCart6.jpg [ 290.93 KiB | Viewed 156 times ]

но EEPROM так нормально и не заработал :cry:

при чтении регистра статуса возвращает либо все нули либо чередует 0-1-0-1

видимо в случае полной неудачи с автогенерацией клока из шины придётся EEPROM к GPIO цеплять и тупо битиками программно махать имитируя SCK и SI на выходах (/CS у меня уже подключен к регистру управления) и читая SO на входе...

_________________
:eugeek: https://twitter.com/Shaos1973


13 Jan 2021 21:33
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Воткнул ПЗУ 8КБ - работает :)

Attachment:
ShaosCart7.jpg
ShaosCart7.jpg [ 186.17 KiB | Viewed 152 times ]

Непереключаемая область #D000...#D7FF - не переключается :no:
Переключаемая область #D800...#DFFF - переключается путём записи номера банки в #DFFF :mrgreen:
В последний байт каждой 2К-страницы прописан её номер (#00,#01,#02,#03) - можно прочитать значения с адреса #DFFF обратно и убедиться что банка переключилась :rotate:

_________________
:eugeek: https://twitter.com/Shaos1973


13 Jan 2021 23:11
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
видимо в случае полной неудачи с автогенерацией клока из шины придётся EEPROM к GPIO цеплять и тупо битиками программно махать имитируя SCK и SI на выходах (/CS у меня уже подключен к регистру управления) и читая SO на входе...

видимо таки придётся - в этом случае по адресу SPI #C200 появятся 2 бита на запись:

бит 0 - clock
бит 7 - data out

а также 1 бит на чтение (как сейчас):

бит 0 - data in

седьмой бит т.к.в SPI данные уходят начиная от старших битов к младшим и такое расположение упростит программу записи в SPI
однако на чтение лучше начинать с бита 0 постепенно сдвигая данные влево - это также упростит программу чтения из SPI

_________________
:eugeek: https://twitter.com/Shaos1973


15 Jan 2021 21:37
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
как описано выше EEPROM вроде заработало - теперь надо разбираться с командами - там какая-то хитрая система разрешения-запрещения записи

возможно надо будет разнести адресные области на запись и чтение чтобы защищаться от мусорных стробов на чтение "by design", например:
#C100 - только запись в регистр управления и цифровые выходы (0-TX/RX,1-OUT1,2-OUT2,3-OUT3,4-SPI0,5-SPI1,6-SCK,7-SO)
#C200 - только чтение со SPI EEPROM, MMC и пр. (бит 0)
#C300 - только чтение с цифровых входов (IN0...IN7)

_________________
:eugeek: https://twitter.com/Shaos1973


17 Jan 2021 03:17
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
В последний байт каждой 2К-страницы прописан её номер (#00,#01,#02,#03) - можно прочитать значения с адреса #DFFF обратно и убедиться что банка переключилась :rotate:

Что-то наверное надо не ровно тоже самое прописывать, а скажем значение на #80 большее (т.е. #80 для нулевой страницы, #81 для первой, #82 для второй и #83 для третьей), а то можно по ошибке принять поведение ISA-шины когда ничего не воткнуто за присутствующее ПЗУ т.к. с пустой шины можно прочитать тот же байт, который туда только что был записан (экспериментально найденный эффект).

_________________
:eugeek: https://twitter.com/Shaos1973


17 Jan 2021 05:04
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
как описано выше EEPROM вроде заработало - теперь надо разбираться с командами - там какая-то хитрая система разрешения-запрещения записи
Разобрался я с защитой от записи у этой 25C320 - у меня она уже подключена с /WP ногой на землю, но в неё всё ещё можно записывать, пока не будет взведён один из битиков статусного регистра (а именно бит 7 WPEN), после этого часть памяти (либо всё) будет защищена от записи в зависимости от состояния двух других битиков 2 и 3 регистра статуса - BP1 и BP0 (причём будет защищено навсегда пока ногу /WP не оторвут от земли):

BP1=0 BP0=0 - защищён только регистр статуса
BP1=0 BP0=1 - старшая четверть защищена от записи (0C00h...0FFFh), а также регистр статуса
BP1=1 BP0=0 - старшая половина защищена от записи (0800h...0FFFh), а также регистр статуса
BP1=1 BP0=1 - всё защищено от записи (0000h...0FFFh), включая регистр статуса

Далее битик 1 (WEL) должен быть взведён командой WREN каждый раз когда мы хотим что-то куда-то записать (даже если речь идёт о записи в регистр статуса) и после записи этот битик опять сбросится в 0. Если какая-то область защищена от записи, то запись туда не получится. Ну и последний битик номер 0 (WIP) показывает если запись всё ещё идёт - по даташиту в худшем случае на запись может уйти до 50 мс.

Я планирую защитить от записи старший 1 килобайт, в котором я на "фабрике" прошью уникальный для пользователя MAC-адрес, а также некоторую другую информацию как например имя и адрес электронной почты человека на которого была зарегистрирована сетевая карточка, а также возожно ключи для доступа к шлюзу и контрольные суммы мака и ключей. Пользователь не сможет изменить эти данные не отпаивая микросхему памяти...

_________________
:eugeek: https://twitter.com/Shaos1973


17 Jan 2021 07:12
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
Я планирую защитить от записи старший 1 килобайт, в котором я на "фабрике" прошью уникальный для пользователя MAC-адрес, а также некоторую другую информацию как например имя и адрес электронной почты человека на которого была зарегистрирована сетевая карточка, а также возожно ключи для доступа к шлюзу и контрольные суммы мака и ключей. Пользователь не сможет изменить эти данные не отпаивая микросхему памяти...

Но тут получается, что любая программа (например скачанная из интернета) может эти ключи прочитать!
Наверное это надо как-то запретить - например разрешать читать из SPI только кодом, расположенным в области ПЗУ сетевой карточки.
Хотя наверное полная защита возможна только если оно спрятано от пользователя совсем, например всё шифрование и дешифровку делал бы микроконтроллер, находящийся на плате...

_________________
:eugeek: https://twitter.com/Shaos1973


17 Jan 2021 16:25
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Вот текущее положение дел с первой макеткой:

Attachment:
ShaosCart8.jpg
ShaosCart8.jpg [ 317.77 KiB | Viewed 55 times ]

Зелёные светодиоды слева-направо:

  • TX_LED (LED3)
  • RX_LED (LED2)
  • LINKLED (LED1)

_________________
:eugeek: https://twitter.com/Shaos1973


17 Jan 2021 18:04
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Пишу подпрограммки работы с SPI EEPROM - на максимальной скорости будучи запущенным из ПЗУ ISA-карточки Спринтера на скорости 14 МГц я могу посылать битики (при этом щёлкая SPI клоком) со скоростью 1 миллион битов в секунду - так можно посылать команды в "захардкоденном" виде. При чтении произвольных данных ещё придётся тратиться на собирание байта из битиков и сохранение в памяти со сдвигом указателя. Написал подпрограммки разрешения записи (19мкс на 14 МГц), запрещения записи (14мкс на 14 МГц) и чтения регистра статуса (41мкс на 14 МГц или примерно 58мкс на 10 МГц), чтобы проверить что запись завершена. Пока проверяю запись в регистр статуса (отдельной подпрограммки для записи в регистр статуса не будет, т.к. пользователю нет необходимости писать в регистр статуса - пользоваться записью в регистр статуса буду я, когда буду включать режим защиты от записи после прошивки MAC-адреса) и получается, что после записи в регистр статуса мне нужно вызывать подпрограмму проверки 37 раз пока бит занятости не сбросится (сейчас я запускаю тест-программку из системной памяти, которая крутится примерно на 10 МГц) - это около 2мс. Теперь буду писать подпрограммки чтения-записи байтов и буду мерять время записи там (по документации запись страницы данных может занять до 50мс, а одна страница это 32 байта).

_________________
:eugeek: https://twitter.com/Shaos1973


18 Jan 2021 01:24
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Написал подпрограмму засылки команды записи со стартовым адресом занимающую 88мкс на 14МГц и отдельную подпрограмму записи одного байта - 35мкс на 14МГц (которая также использовалась 2 раза для засылки адреса в первой подпрограмме). На передачу всех 32 байт одной страницы EEPROM уйдёт 88+35*32=1.2мс плюс ожидание окончания записи - до 50мс.

P.S. Чтение тоже дописал - подпрограмма засылки команды чтения со стартовым адресом также занимает 88мкс на 14МГц, а вот отдельная подпрограмма чтения одного байта потянула на 51мкс (для 14МГц), что означает чтение со скоростью 19 килобайт в секунду.

P.P.S. Развернул цикл чтения - получилось на прочитать 1 байт тоже 34мкс (для 14МГц) как и на запись, т.е. теперь скорость потокового чтения стала 29 килобайт в секунду!

P.P.P.S. Под спойлером исходники подпрограмм работы с EEPROM 25C320 и ещё более ускоренным чтением - 25.3мкс или 38 килобайт в секунду (кстати написанные полностью на Спринтере в FN и TASM - в целом оно должно быть совместимо с 8080 т.к. я никакой z80-экзотики не использовал):
 SPI-ASM
Code:
SN_WIZN EQU     0C000h
SN_CTRL EQU     0C100h
SN_SPI  EQU     0C200h
SN_GPIO EQU     0C300h
SN_WIZ1 EQU     0C400h
SN_WIZ2 EQU     0C500h
SN_WIZ3 EQU     0C600h
SN_WIZ4 EQU     0C700h
SN_RAM  EQU     0C800h
SN_ROM0 EQU     0D000h
SN_ROMN EQU     0D800h
SN_WIZB EQU     0E000h

SPIOFF  EQU     0
SPIONW  EQU     2
SPIONR  EQU     3
WIZTX   EQU     0
WIZRX   EQU     1

STORE_WPEN DB 0
STORE_BP1  DB 0
STORE_BP0  DB 0

; Prepare constants for other subroutines (internal)
; 17+55=72 with CALL

SPI_SETN:
                ld      b,0             ; 7/7
                ld      c,1             ; 7/14
                ld      d,128           ; 7/21
                ld      e,129           ; 7/28
                ld      hl,SN_GPIO      ; 10/38 <<< TEMPORARY
                ld      (hl),b          ; 7/45
                ret                     ; 10/55

; Send A to SPI (saved HL, used BC)
; 17+472=489 with CALL (34.9us on 14MHz)

SPI_WRITE_BYTE: push    hl              ; 11/11
                ld      b,a             ; 4/15
                ld      c,8             ; 7/22
                ld      hl,SN_GPIO      ; 10/32 <<< TEMPORARY
SPI_WRITE_L1:                           ; LOOP 8*51=408/440
                and     128             ; LOOP 7/7
                ld      (hl),a          ; LOOP 7/14
                inc     a               ; LOOP 4/18
                ld      (hl),a          ; LOOP 7/25
                ld      a,b             ; LOOP 4/29
                rlca                    ; LOOP 4/33
                ld      b,a             ; LOOP 4/37
                dec     c               ; LOOP 4/41
                jp      nz,SPI_WRITE_L1 ; LOOP 10/51
                xor     a               ; 4/445
                ld      (hl),a          ; 7/452
                pop     hl              ; 10/462
                ret                     ; 10/472


; Receive A from SPI (saved HL, used BC and DE)
; 17+337=354 with CALL (25.3us on 14MHz)

SPI_READ_BYTE:  push    hl              ; 11/11
                ld      b,0             ; 7/18
                ld      c,1             ; 7/25
                ld      hl,SN_GPIO      ; 10/35 <<< TEMPORARY
                ld      de,SN_SPI       ; 10/45
                ld      (hl),c          ; 7/52 === bit 0
                ld      a,(de)          ; 7/59
                and     c               ; 4/63
                or      b               ; 4/67
                rlca                    ; 4/71
                ld      b,a             ; 4/75
                ld      (hl),0          ; 10/85
                ld      (hl),c          ; 7/92 === bit 1
                ld      a,(de)          ; 7/99
                and     c               ; 4/103
                or      b               ; 4/107
                rlca                    ; 4/111
                ld      b,a             ; 4/115
                ld      (hl),0          ; 10/125
                ld      (hl),c          ; 7/132 === bit 2
                ld      a,(de)          ; 7/139
                and     c               ; 4/143
                or      b               ; 4/147
                rlca                    ; 4/151
                ld      b,a             ; 4/155
                ld      (hl),0          ; 10/165
                ld      (hl),c          ; 7/172 === bit 3
                ld      a,(de)          ; 7/179
                and     c               ; 4/183
                or      b               ; 4/187
                rlca                    ; 4/191
                ld      b,a             ; 4/195
                ld      (hl),0          ; 10/205
                ld      (hl),c          ; 7/212 === bit 4
                ld      a,(de)          ; 7/219
                and     c               ; 4/223
                or      b               ; 4/227
                rlca                    ; 4/231
                ld      b,a             ; 4/235
                ld      (hl),0          ; 10/245
                ld      (hl),c          ; 7/252 === bit 5
                ld      a,(de)          ; 7/259
                and     c               ; 4/263
                or      b               ; 4/267
                rlca                    ; 4/271
                ld      b,a             ; 4/275
                ld      (hl),0          ; 10/285
                ld      (hl),c          ; 7/292 === bit 6
                ld      a,(de)          ; 7/299
                and     c               ; 4/303
                or      b               ; 4/307
                rlca                    ; 4/311
                ld      b,a             ; 4/315
                ld      (hl),0          ; 10/325
                ld      (hl),c          ; 7/332 === bit 7
                ld      a,(de)          ; 7/339
                and     c               ; 4/343
                or      b               ; 4/347 <<< A is ready
                ld      (hl),0          ; 10/357
                pop     hl              ; 10/367
                ret                     ; 10/377


; Remove all CS signals from all SPI devices
; 17+27=44 (3.1us for 14MHz) with CALL

SPI_END:        xor     a               ; 4/4
                ld      (SN_CTRL),a     ; 13/17
                ret                     ; 10/27

; WREN - Set the write enable latch
; 17+255=272 with CALL (19.4us on 14MHz)

SPI_WREN:
                call    SPI_SETN        ; 72/72
                ld      a,SPIONW        ; 7/79
                ld      (SN_CTRL),a     ; 13/92
                nop                     ; 4/96
                nop                     ; 4/100
                ld      (hl),b          ; 7/107
                ld      (hl),c          ; 7/114
                ld      (hl),b          ; 7/121
                ld      (hl),c          ; 7/128
                ld      (hl),b          ; 7/135
                ld      (hl),c          ; 7/142
                ld      (hl),b          ; 7/149
                ld      (hl),c          ; 7/156
                ld      (hl),b          ; 7/163
                ld      (hl),c          ; 7/170
                ld      (hl),d  ; 1     ; 7/177
                ld      (hl),e          ; 7/184
                ld      (hl),d  ; 1     ; 7/191
                ld      (hl),e          ; 7/198
                ld      (hl),b          ; 7/205
                ld      (hl),c          ; 7/212
                ld      (hl),b          ; 7/225
                ld      a,SPIOFF        ; 7/232
                ld      (SN_CTRL),a     ; 13/245
                ret                     ; 10/255

; WRDI - Reset the write enable latch
; 17+255=272 with CALL (19.4us on 14MHz)

SPI_WRDI:
                call    SPI_SETN        ; 72/72
                ld      a,SPIONW        ; 7/79
                ld      (SN_CTRL),a     ; 13/92
                nop                     ; 4/96
                nop                     ; 4/100
                ld      (hl),b          ; 7/107
                ld      (hl),c          ; 7/114
                ld      (hl),b          ; 7/121
                ld      (hl),c          ; 7/128
                ld      (hl),b          ; 7/135
                ld      (hl),c          ; 7/142
                ld      (hl),b          ; 7/149
                ld      (hl),c          ; 7/156
                ld      (hl),b          ; 7/163
                ld      (hl),c          ; 7/170
                ld      (hl),d  ; 1     ; 7/177
                ld      (hl),e          ; 7/184
                ld      (hl),b          ; 7/191
                ld      (hl),c          ; 7/198
                ld      (hl),b          ; 7/205
                ld      (hl),c          ; 7/212
                ld      (hl),b          ; 7/225
                ld      a,SPIOFF        ; 7/232
                ld      (SN_CTRL),a     ; 13/245
                ret                     ; 10/255

; RDSR - Read Status Register
; flagC is WEL, flagZ is WIP
; 17+557=574 with CALL (41us on 14MHz)

SPI_RDSR:
                call    SPI_SETN        ; 72/72
                ld      a,SPIONW        ; 7/79
                ld      (SN_CTRL),a     ; 13/92
                nop                     ; 4/96
                nop                     ; 4/100
                ld      (hl),b          ; 7/107
                ld      (hl),c          ; 7/114
                ld      (hl),b          ; 7/121
                ld      (hl),c          ; 7/128
                ld      (hl),b          ; 7/135
                ld      (hl),c          ; 7/142
                ld      (hl),b          ; 7/149
                ld      (hl),c          ; 7/156
                ld      (hl),b          ; 7/163
                ld      (hl),c          ; 7/170
                ld      (hl),d ; 1      ; 7/177
                ld      (hl),e          ; 7/184
                ld      (hl),b          ; 7/191
                ld      (hl),c          ; 7/198
                ld      (hl),d ; 1      ; 7/205
                ld      (hl),e          ; 7/212
                ld      (hl),b          ; 7/225
                ld      a,SPIONR        ; 7/232
                ld      (SN_CTRL),a     ; 13/245
                ld      de,SN_SPI       ; 10/255
                ld      (hl),c          ; 7/262
                ld      a,(de)          ; 7/269
                ld      (hl),b          ; 7/276
                and     c               ; 4/280
                ld      (STORE_WPEN),a  ; 13/293
                ld      (hl),c          ; 7/300
                ld      a,(de)          ; 7/307
                ld      (hl),b          ; 7/314
                ld      (hl),c          ; 7/321
                ld      a,(de)          ; 7/328
                ld      (hl),b          ; 7/335
                ld      (hl),c          ; 7/342
                ld      a,(de)          ; 7/349
                ld      (hl),b          ; 7/356
                ld      (hl),c          ; 7/363
                ld      a,(de)          ; 7/370
                ld      (hl),b          ; 7/377
                and     c               ; 4/381
                ld      (STORE_BP1),a   ; 13/394
                ld      (hl),c          ; 7/401
                ld      a,(de)          ; 7/408
                ld      (hl),b          ; 7/415
                and     c               ; 4/419
                ld      (STORE_BP0),a   ; 13/432
                ld      (hl),c          ; 7/439
                ld      a,(de)          ; 7/446
                ld      (hl),b          ; 7/453
                push    af              ; 11/464
                ld      (hl),c          ; 7/471
                ld      a,(de)          ; 7/478
                ld      (hl),b          ; 7/485
                and     c               ; 4/489
                ld      b,a             ; 4/493
                ld      a,SPIOFF        ; 7/500
                ld      (SN_CTRL),a     ; 13/513
                pop     af              ; 10/523
                and     c               ; 4/527
                ld      c,a             ; 4/531
                ld      a,b             ; 4/535
                or      a ;flagZ is WIP ; 4/539
                ld      a,c             ; 4/543
                rrca      ;flagC is WEL ; 4/547
                ret                     ; 10/557

; WRITE - Initiate write sequence starting with address HL
; 17+1212=1229 with CALL (88us on 14MHz)

SPI_WRITE_START:
                push    hl              ; 11/11
                call    SPI_SETN        ; 72/83
                ld      a,SPIONW        ; 7/90
                ld      (SN_CTRL),a     ; 13/103
                nop                     ; 4/107
                nop                     ; 4/111
                ld      (hl),b          ; 7/118
                ld      (hl),c          ; 7/125
                ld      (hl),b          ; 7/132
                ld      (hl),c          ; 7/139
                ld      (hl),b          ; 7/146
                ld      (hl),c          ; 7/153
                ld      (hl),b          ; 7/160
                ld      (hl),c          ; 7/167
                ld      (hl),b          ; 7/174
                ld      (hl),c          ; 7/181
                ld      (hl),b          ; 7/188
                ld      (hl),c          ; 7/195
                ld      (hl),d  ; 1     ; 7/202
                ld      (hl),e          ; 7/209
                ld      (hl),b          ; 7/216
                ld      (hl),c          ; 7/223
                ld      (hl),b          ; 7/230
                pop     hl              ; 10/240
                ld      a,h             ; 4/244
                call    SPI_WRITE_BYTE  ; 477/721 (it saves HL)
                ld      a,l             ; 4/725
                call    SPI_WRITE_BYTE  ; 477/1202 (it saves HL)
                ret                     ; 10/1212

; READ - Initiate read sequence starting with address HL
; 17+1232=1249 with CALL (89us with 14MHz)

SPI_READ_START:
                push    hl              ; 11/11
                call    SPI_SETN        ; 72/83
                ld      a,SPIONW        ; 7/90
                ld      (SN_CTRL),a     ; 13/103
                nop                     ; 4/107
                nop                     ; 4/111
                ld      (hl),b          ; 7/118
                ld      (hl),c          ; 7/125
                ld      (hl),b          ; 7/132
                ld      (hl),c          ; 7/139
                ld      (hl),b          ; 7/146
                ld      (hl),c          ; 7/153
                ld      (hl),b          ; 7/160
                ld      (hl),c          ; 7/167
                ld      (hl),b          ; 7/174
                ld      (hl),c          ; 7/181
                ld      (hl),b          ; 7/188
                ld      (hl),c          ; 7/195
                ld      (hl),d  ; 1     ; 7/202
                ld      (hl),e          ; 7/209
                ld      (hl),d  ; 1     ; 7/216
                ld      (hl),e          ; 7/223
                ld      (hl),b          ; 7/230
                pop     hl              ; 10/240
                ld      a,h             ; 4/244
                call    SPI_WRITE_BYTE  ; 477/721 (it saves HL)
                ld      a,l             ; 4/725
                call    SPI_WRITE_BYTE  ; 477/1202 (it saves HL)
                ld      a,SPIONR        ; 7/1209
                ld      (SN_CTRL),a     ; 13/1222
                ret                     ; 10/1232

Запись трёх байтов в EEPROM например будет выглядеть так:
Code:
                call    SPI_WREN ; разрешить запись

                ld      hl,0
                call    SPI_WRITE_START ; начать процедуру записи (послать код команды и адрес)
                ld      a,0AAh
                call    SPI_WRITE_BYTE ; послать первый байт
                ld      a,055h
                call    SPI_WRITE_BYTE ; послать второй байт
                ld      a,0
                call    SPI_WRITE_BYTE ; послать третий байт
                call    SPI_END ; закончить процедуру записи (снять /CS с EEPROM)

; теперь надо ждать пока запись внутри микросхемы не закончится - для этого берём слово состояния

                call    SPI_RDSR ; прочитать слово состояния
                jp      nc,WAITERR2 ; если флаг C не установлен, то запись не идёт - скорее всего мы забыли её разрешить командой WREN
                ld      bc,1 ; счётчик сколько раз спросили слово состояния, чтобы оценить как долго писалось
WAITFORIT2:
                inc     bc
                ld      a,b
                cp      8 ; больше двух тысяч циклов прошло, а флаг не сбросился
                jp      z,WAITERR2 ; уходим по ошибке вместо зависона (маловероятно, но пусть будет)
                push    bc
                call    SPI_RDSR ; прочитать слово состояния
                pop     bc
                jp      nz,WAITFORIT2 ; если флаг Z всё ещё не ноль то повторяем процедуру проверки слова состояния

; если дошли до сюда, то значит запись закончилась (обычно 37 циклов если запускать из основной памяти, что составляет примерно 2мс)
     

_________________
:eugeek: https://twitter.com/Shaos1973


18 Jan 2021 04:51
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19314
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Заказал 5 платок (минимум) красного цвета у китайцев на JLCPCB - получилось всего $68 с доставкой DHL :mrgreen:

"All orders finished data preparation, ready for PCB fabrication."

Всё - сделали. Теперь курьер DHL должен забрать и отправить в штаты...

P.S. Забрал курьер - доставят в пятницу:
Quote:
Estimated Delivery:
Friday, January 22, 2021
By End of Day

_________________
:eugeek: https://twitter.com/Shaos1973


19 Jan 2021 00:12
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 57 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.