nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Mar 2024 04:18



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

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...

Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...


Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...

_________________
:dj: https://mastodon.social/@Shaos


18 Jul 2016 12:38
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
DimkaM wrote:
Quote:
А вообще наличие WizNET в конце памяти, а не поверх ПЗУ, хорошо тем, что ленивые люди могут юзать её прямо из бейсика без всяких хитрых уловок
Вот тут какраз зхусбнет втыкаетсч с адреса с000 http://forum.nedopc.com/download/file.php?id=1949


а в какой комп? и как? у спеков там обычно неподменяемое ОЗУ...

P.S. судя по комментам это baseconf в пентеве:
 WIZNET
Code:
   DEVICE ZXSPECTRUM128

   ORG 0x8000
START 
;регистры чипа
WIZ_BASE_ADDR   = 0xc000
W_MR         = WIZ_BASE_ADDR+0x0000
W_SHAR         = WIZ_BASE_ADDR+0x0008

S0_MR      = WIZ_BASE_ADDR+0x0201 ;мл.байт
S0_CR      = WIZ_BASE_ADDR+0x0203 ;мл.байт
S0_SSR      = WIZ_BASE_ADDR+0x0209 ;мл.байт
S0_PORTR   = WIZ_BASE_ADDR+0x020a
S0_DPORTR   = WIZ_BASE_ADDR+0x0212
S0_DIPR      = WIZ_BASE_ADDR+0x0214
S0_TX_WRSR   = WIZ_BASE_ADDR+0x0222 ;мл.слово
S0_RX_RSR   = WIZ_BASE_ADDR+0x022a
S0_TX_FAKE   = WIZ_BASE_ADDR+0x2000
S0_RX_FAKE   = WIZ_BASE_ADDR+0x3000
;/***************************************/
;/* The bit of Sn_MR regsiter defintion */
;/***************************************/
Sn_MR_CLOSE        = 0x00                 ;/**< Protocol bits of Sn_MR. */
Sn_MR_TCP          = 0x01                 ;/**< Protocol bits of Sn_MR. */
Sn_MR_UDP          = 0x02                 ;/**< Protocol bits of Sn_MR. */
Sn_MR_IPRAW        = 0x03                 ;/**< Protocol bits of Sn_MR. */
Sn_MR_MACRAW       = 0x04                 ;/**< Protocol bits of Sn_MR. */
Sn_MR_PPPoE        = 0x05                 ;/**< Protocol bits of Sn_MR. */

/******************************/
/* The values of CR defintion */
/******************************/
Sn_CR_OPEN         = 0x01                 ;/**< OPEN command value of Sn_CR. */
Sn_CR_LISTEN       = 0x02                 ;/**< LISTEN command value of Sn_CR. */
Sn_CR_CONNECT      = 0x04                 ;/**< CONNECT command value of Sn_CR. */
Sn_CR_DISCON       = 0x08                 ;/**< DISCONNECT command value of Sn_CR. */
Sn_CR_CLOSE        = 0x10                 ;/**< CLOSE command value of Sn_CR. */
Sn_CR_SEND         = 0x20                 ;/**< SEND command value of Sn_CR. */
Sn_CR_SEND_MAC     = 0x21                 ;/**< SEND_MAC command value of Sn_CR. */
Sn_CR_SEND_KEEP    = 0x22                 ;/**< SEND_KEEP command value of Sn_CR */
Sn_CR_RECV         = 0x40                 ;/**< RECV command value of Sn_CR */
Sn_CR_PCON         = 0x23                 ;/**< PCON command value of Sn_CR */
Sn_CR_PDISCON      = 0x24                 ;/**< PDISCON command value of Sn_CR */
Sn_CR_PCR          = 0x25                 ;/**< PCR command value of Sn_CR */
Sn_CR_PCN          = 0x26                 ;/**< PCN command value of Sn_CR */
Sn_CR_PCJ          = 0x27                 ;/**< PCJ command value of Sn_CR */

;/**********************************/
;/* The values of Sn_SSR defintion */
;/**********************************/
SOCK_CLOSED        = 0x00                 ;< SOCKETn is released */
SOCK_ARP           = 0x01                 ;< ARP-request is transmitted in order to acquire destination hardware address. */
SOCK_INIT          = 0x13                 ;< SOCKETn is open as TCP mode. */
SOCK_LISTEN        = 0x14                 ;< SOCKETn operates as "TCP SERVER" and waits for connection-request (SYN packet) from "TCP CLIENT". */
SOCK_SYNSENT       = 0x15                 ;< Connect-request(SYN packet) is transmitted to "TCP SERVER". */
SOCK_SYNRECV       = 0x16                 ;< Connect-request(SYN packet) is received from "TCP CLIENT". */
SOCK_ESTABLISHED   = 0x17                 ;< TCP connection is established. */
SOCK_FIN_WAIT      = 0x18                 ;< SOCKETn is closing. */
SOCK_CLOSING       = 0x1A                 ;< SOCKETn is closing. */
SOCK_TIME_WAIT     = 0x1B                 ;< SOCKETn is closing. */
SOCK_CLOSE_WAIT    = 0x1C                 ;< Disconnect-request(FIN packet) is received from the peer. */
SOCK_LAST_ACK      = 0x1D                 ;< SOCKETn is closing. */
SOCK_UDP           = 0x22                 ;< SOCKETn is open as UDP mode. */
SOCK_IPRAW         = 0x32                 ;< SOCKETn is open as IPRAW mode. */
SOCK_MACRAW        = 0x42                 ;< SOCKET0 is open as MACRAW mode. */
SOCK_PPPoE         = 0x5F                 ;< SOCKET0 is open as PPPoE mode. */

   di
   ld sp,0xc000
   ld hl,0x4000
   ld (hl),0
   ld de,0x4001
   ld bc,192*256/8-1
   ldir
;делаем хардресет чипа
;Все тайминги округлены до 50мс
   ei
   halt
   ld bc,0x83ab
   in a,(c)
   and 0xee
   out (c),a   ; ресет
   halt
   or 0x10
   out (c),a   ; снятие ресета
   halt
   
;Проецирование регистров в адресное пространство z80.
;Для примера проецируем в адреса 0xc000-0xffff (в условиях ZX-Evo baseconf).
;Проецирование будет происходить только при подключенном ПЗУ в заданном адресном окне.
;Страница ПЗУ не имеет значения
   ld a,1
   out (0xbf),a
   ld bc,0xfff7
   ld a,0x3f
   out (c),a
;Теперь включаем проецирование
   ld bc,0x82ab
   ld a,7   
   out (c),a
   
;далее софтресет чипа(насчёт нужности неуверен, но непомешает)
   ld a,0x80
   ld (W_MR+1),a
   halt
   ld a,0x3c
   ld (W_MR),a
   di
;закидываем MAC, шлюз, маску и ИП. Поменять под себя!!!
   ld hl,mac
   ld de,W_SHAR
   ld bc,20
   ldir
   ;С этого момента чип будет пинговаться и настройки можно считать завершёнными.
   ;Эстетам можно почитать пдфку и настроить чёнить ещё, но для примера и этого достаточно.
   
;----------------------------------------------------------
;теперь подключимся к TCP(НТТР) серверу и чегонить получим
;----------------------------------------------------------

;настроим сокет
soc_noinit
   ld a,Sn_CR_CLOSE   ;закроем соединение
   ld (S0_CR),a      
   ld a,Sn_MR_TCP      ;режим сокета TCP
   ld (S0_MR),a
   ld hl,(source_port)   ;приращивем внутренний порт, чтоп с предыдущим не пересечся
   inc hl
   ld (source_port),hl
   ld e,h            ;бигендиан, меняем байты местами
   ld d,l
   ld (S0_PORTR),de
   ld a,Sn_CR_OPEN      ;даем команду открытия сокета
   ld (S0_CR),a
wait_cr0
   ld a,(S0_CR)      ;ожидаем исполнения команды
   or a
   jr nz,wait_cr0
   ld a,(S0_SSR)      ;если не инициализировался, то заново
   cp SOCK_INIT
   jr nz,soc_noinit
;--------------------   
;конектимся к серверу
;--------------------
   ld hl,S0_DPORTR ;порт сервера !бигендиан!
   ld (hl),0
   inc hl
   ld (hl),80
   ld hl,S0_DIPR   ;ip сервера мароза1999 217.146.69.13
   ld (hl),217
   inc hl
   ld (hl),146
   inc hl
   ld (hl),69
   inc hl
   ld (hl),13
   ld a,Sn_CR_CONNECT      ;даем команду конекта
   ld (S0_CR),a
wait_cr1
   ld a,(S0_CR)      ;ожидаем исполнения команды
   or a
   jr nz,wait_cr1
;ожидаем коннекта с сервером
wait_con
   ld a,(S0_SSR)
   or a
   jp z,soc_noinit      ;Сервер чёйта закрыл(неоткрыл) коннект
   cp SOCK_ESTABLISHED   ;вообще то тут надо проверять и насчёт тайм аута, и другой фигни
   jr nz,wait_con      ;но мы забьём на это дело
wait_con_end   

;приконектились, отошлём GET запрос
;--------------------
;отправка пакета
;--------------------
   ld hl,get_str      ;закидываем дату в буфер чипа
   ld de,S0_TX_FAKE
   ld bc,get_str_end-get_str
   inc bc            ;закидывать надо чётное количество байт
   res 0,c            ;поэтому округлим до чётного
   ldir            ;ахтунг говнокод!!! ldir'ить можно не более 512 байт, смотри описание платки,
                  ;но мы опустим этот момент, т.к. строка у нас явно короче
   ld a,high (get_str_end-get_str)
   ld (S0_TX_WRSR),a   ;закидываем длинну даты, не забывая про бигэндиан
   ld a,low (get_str_end-get_str)
   ld (S0_TX_WRSR+1),a   ;а вот сдесь нужно указывать точное кол-во байт, невзирая на нечётность
   
   ld a,Sn_CR_SEND   ;даем команду отправки
   ld (S0_CR),a
wait_cr2
   ld a,(S0_CR)      ;ожидаем исполнения команды
   or a
   jr nz,wait_cr2
   
;--------------------
;ожидаем пакет от сервера
;--------------------
   ld de,0
wait_pack0
   ld de,(S0_RX_RSR)   ;читаем длинну пакета
   ld a,d
   or e            ;если нулевая, то ждём дальше
   jr z,wait_pack0
wait_pack1
   ld hl,(S0_RX_RSR)   ;ога, пришло
   ex de,hl         ;теперь ждём устаканивания даты
   xor a            ;повторно читаем и если не сходится, то читаем ещё раз длинну
   sbc hl,de
   ld a,h
   or l
   jr nz,wait_pack1
;пакет получен чипом полностью, надо его вычитать
;т.к. в S0_RX_RSR длинна кратна двум, то...

;--------------------
;сейчас прочитаем реальную длинну, она лежит в первых двух байтах буфера приема
;--------------------
   ld hl,(S0_RX_FAKE)
   ld b,l            ;долбанный бигендиан
   ld c,h
;--------------------
;читаем пакет, в de у нас лежит длинна кратная двум(бигендиан)
;--------------------
;выёживатся с лдиром небудем
   ld b,e
   ld c,d
   dec bc      ;в регистре длинна пакета была с учётом двух первых байт,
   dec bc      ;которые добавил сам визнет(точная длинна пакета)
   ld hl,S0_RX_FAKE
   ld de,buf_rx
loop_read
   ld l,0
   ld a,c
   or b
   jr z,end_read
   ldi
   ldi
   jr loop_read
end_read
   
   ld a,Sn_CR_RECV      ;даем знать что пакет забрали
   ld (S0_CR),a
wait_cr3
   ld a,(S0_CR)      ;ожидаем исполнения команды
   or a
   jr nz,wait_cr3
   
;типа всё, далее разбираем пакет, получаем следующий, отправляем. Но это уже сами, я закрываю соединение.
   
;--------------------
;закроем соединение
;--------------------
   
   ld a,Sn_CR_CLOSE   ;закроем соединение
   ld (S0_CR),a   
   
;--------------------
;Всё, пример окончен.
;--------------------


   ld bc,768         ;Не много по говнокодим.
   ld hl,buf_rx+478   ;Эта цифра получена ваяшарком(очень рекомендую, чтоп наглядно было и познавательно)
   ld de,0x5800      ;А вообщебы тут надо распарсить HTTP реквест
   ldir
   di
   halt

;конфиг сети(!!!Эти значения измените под конфигвашей сети!!!)
mac   
   db 0x00,0x08,0xDC,0x01,0x02,0x03   ;цифры от балды взял, из визнетовой доки
reserved
   db 0x00,0x00   ;это для того, чтоб одним лдиром закинуть
gateway
   db 192,168,0,1
mask
   db 255,255,255,0
ip
   db 192,168,0,77
   
;внутренний порт
source_port dw 0

;http://zx.maros.pri.ee/file/id/15733/filename/Yerzmyey_-_Cat_42_%282009%29_%28_International_Vodka_Party_5%2C_4%29.atr   
get_str
   db "GET /file/id/15733/filename/Yerzmyey_-_Cat_42_%282009%29_%28_International_Vodka_Party_5%2C_4%29.atr HTTP/1.1",13,10
   db "Host: zx.maros.pri.ee",13,10
   db 13,10,0
get_str_end
buf_rx
   
ENDPROG
   SAVEHOB  "s1.$C","s1.C",START,ENDPROG-START
   SAVEBIN  "s1",START,ENDPROG-START

_________________
:dj: https://mastodon.social/@Shaos


18 Jul 2016 12:41
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
И кстати что это? W5300? Я всё ещё на W5100 сижу

_________________
:dj: https://mastodon.social/@Shaos


18 Jul 2016 13:57
Profile WWW
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
5300


18 Jul 2016 21:02
Profile ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
Shaos, если будет возможность, то как нить драйвера под визнет сделай обособленно.
Если конечно софт будешь писать какой.

А то у меня в софте они интегрированы гвоздями, под другую железку уже не переделаешь.

Вообще б все обращения к железу надо было через либы


26 Jul 2016 02:43
Profile ICQ
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Угу - более того, я код хочу сделать перемещаемым :)

И конфигурация (ip,mask,mac) будет хранится во внешнем EEPROM (т.к. задавание мак-адреса программно это очень плохая практика, как и хардкод IP)

_________________
:dj: https://mastodon.social/@Shaos


26 Jul 2016 07:11
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Shaos wrote:
Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...

Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...


Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...

Платку что собирал я чото пока не нашeл, а вообще платки пришли вот такие, но вот незадача - я посеял исходники похоже :(

Attachment:
ShaosCart1.jpg
ShaosCart1.jpg [ 233.42 KiB | Viewed 8545 times ]


Теперь вот думаю для Спринтера это приспособить как макетку для сетевушки...

P.S. Исходники нашел на своем старом PowerPC ноутбуке с Mac OS X 10.4 (там у меня лицензионная версия Eagle v5 стоит) - вот картинка схемы:


Attachments:
shaos-ts1-sch.png
shaos-ts1-sch.png [ 45.12 KiB | Viewed 8543 times ]

_________________
:dj: https://mastodon.social/@Shaos
19 Dec 2020 02:52
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Shaos wrote:
Shaos wrote:
Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...

Китайцы написали, что платки сделаны, но их перехватила таможня, что значит что они будут их там мурыжить до трёх недель...


Платки кстати пришли - собираю потихоньку, причём подцепить такую платку можно как к TS2068, так и к ZX16K (проводочками)...

Платку что собирал я чото пока не нашeл...

Нашёл :)

Attachment:
ShaosCart0.jpg
ShaosCart0.jpg [ 164.19 KiB | Viewed 8490 times ]

Но она не сильно далеко в сборке ушла с 2016 года...

P.S. Переношу с предыдущей страницы про то, что собственно на платке есть:

Shaos wrote:
Shaos wrote:
С другой стороны а нафига тут RTC? MAC-адрес с IP и маской можно в какой-то EEPROM записать (например последовательный SPI), а точное время легко берётся из сети...


Развёл платку прототипа сетевушки в стандартном игле и заказал 5 штучек у китайцев...

P.S. Пока без 16К ОЗУ что вместо бортового рома опционально подставлялся бы. Кроме сетевого модулька WizNet на плате ещё 16 микросхем - в основном мелкая логика, а также ПЗУ 8К, ОЗУ 2К и SPI EEPROM 25C320 (4K) для хранения MAC-адреса, IP-адреса, маски подсети и шлюза (ну и всего что влезет). Если всё заведётся, то в боевой вариант воткну ещё и SD-карточку. И да - платка может подключаться как к TS2068, так и к ZX16K...

P.P.S. Карта памяти такая получается - предпоследнее 8К окно:

0xC0XX - WizNET registers
0xC1XX - CONTROL (write only): bit 0 - TX/RX, bit 1 - SPI EEPROM enabled
0xC2XX - SPI (read/write)
0xC3XX - GPIO (read/write)
0xC4XX - 1st socket WizNET
0xC5XX - 2nd socket WizNET
0xC6XX - 3rd socket WizNET
0xC7XX - 4th socket WizNET
0xC800...0xCFFF - RAM 2K
0xD000...0xD7FF - ROM 2K
0xD800...0xDFFF - ROM 2K (switchable on write)

и последнее 8К окно:

0xE000...0xFFFF - доступ к области буферов WizNET (либо RX, либо TX)
Гребёнка контактов слева (первый контакт находится снизу):
Code:
 1 - 5V
 2 - GND
 3 - /CS (должно быть заземлено для нормальной работы схемы, а "1" тут будет непускать /MREQ в схему)
 4 - /MREQ
 5 - /RD
 6 - /WR
 7 - D0
 8 - D1
 9 - D2
10 - D3
11 - D4
12 - D5
13 - D6
14 - D7
15 - A0
16 - A1
17 - A2
18 - A3
19 - A4
20 - A5
21 - A6
22 - A7
23 - A8
24 - A9
25 - A10
26 - A11
27 - A12
28 - A13
29 - A14
30 - A15

Возможные расширение на будущее - добавление разъёма SD-карточки и возможности работы с WizNET через SPI (в этом случае в регистре CONTROL добавится ещё 2 бита, позволяющих адресовать ещё 2 SPI-устройства, работающих параллельно с SPI-EEPROM) - чисто чтобы попробовать накопить Z80 кода для этого всего - новое возможное описание битов в CONTROL под спойлером:
 NEW_CONTROL
bit 0: TXRX - TX (0), RX (1);
bit 1: CSA0 \
bit 2: CSA1 - 00 - No SPI, 01 - SPI EEPROM, 10 - SD card SPI, 11 - WizNET SPI;
bit 3: WNSE - WizNET SPI mode Enabled (т.е.чтобы работать с WizNET по SPI нужно, чтобы все три бита 1,2,3 были взведены в "1").
ну и сейчас GPIO разведено 8 бит на вывод, и только 3 бита на ввод (видимо я хотел SD карту так попробовать - навесиком - поэтому входов развёл по минимуму) - можно увеличить до 8 в следующей версии платы...

_________________
:dj: https://mastodon.social/@Shaos


24 Dec 2020 03:05
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Припаял резисторы/конденсаторы/разъёмы/диоды/светодиоды - теперь дело за микросхемами:

Attachment:
ShaosCart2.jpg
ShaosCart2.jpg [ 175.91 KiB | Viewed 8457 times ]


P.S. Все микросхемы нашлись по сусекам, кроме одной - докупил на ебее - как придёт - дособираю...

_________________
:dj: https://mastodon.social/@Shaos


26 Dec 2020 00:16
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Пришла микросхема - дособирал :)

Attachment:
ShaosCart3.jpg
ShaosCart3.jpg [ 175.37 KiB | Viewed 8318 times ]


и подключил :)

Attachment:
SprinterNet-proto1.jpg
SprinterNet-proto1.jpg [ 207.74 KiB | Viewed 8318 times ]


Attachments:
shaos-ts1-parts.txt [4.17 KiB]
Downloaded 281 times

_________________
:dj: https://mastodon.social/@Shaos
07 Jan 2021 18:11
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Вобщем триггеры IC4 как и предполагалось при старте устанавливаются в нули, а триггеры IC5 - в единицы.
Запись работает - установка пар триггеров IC4 и IC5 (надо бы светодиодики к ним приделать), а также запись в регистр IC16 (выходы).
А вот чтение почему-то не работает - всегда FF-ы читает отовсюду :(

P.S. Хотя нет - чтение с EEPROM похоже работает (если физически сигнал SO замкнуть на землю), но не с ОЗУ или GPIO (входы).

P.P.S. Наверно с SPI EEPROM надо несколько пересмотреть схему - там SCK похоже надо инвертировать если идёт чтение - у меня SCK просто тупо с /MREQ идёт - для записи норм (на диаграмме внизу INPUT), а для чтения появляется смещение (см. OUTPUT - хотя может тоже норм - надо пробовать):

Attachment:
SPI-EEPROM.gif
SPI-EEPROM.gif [ 25.98 KiB | Viewed 8278 times ]

P.P.P.S. Хотя наверное дело в том, что данные надо держать неизменными после фронта SCK как минимум 50 нс, а если делать как сейчас, то они пропадают сразу же. Можно скажем прозрачную защёлку поставить, чтобы сохраняло бит до следующего такта, а можно и тупо кондёр воткнуть с резистором, чтобы подержало чуток ;)

_________________
:dj: https://mastodon.social/@Shaos


07 Jan 2021 21:19
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Нашёл в чём проблема с чтением - /CS для WizNET неправильно формировался на последнем этапе покрывая почти всё адресное пространство и т.к. оно ещё и на TTL буфер подавалось, которым WizNET прикрыт от шины (ибо он трёхвольтовый, хоть и 5V-tolerant), у этого буфера конфликт получался со всем остальным на плате - хорошо у меня свободные гейты остались - просто порежу дорожек и напаяю проводочек...

P.S. По поводу программирования SPI - вот например как я сейчас делаю "WRITE ENABLE SEQUENCE":
Code:
  ld (#C100),2 ; enable SPI-EEPROM
  ld hl,#C200
  ld b,#00
  ld c,#FF
  ld (hl),b
  ld (hl),b
  ld (hl),b
  ld (hl),b
  ld (hl),b
  ld (hl),c
  ld (hl),c
  ld (hl),b
  ld (#C100),0 ; disable SPI-EEPROM
Это получается в пределе 7 тактов на бит при передаче или миллион битов в секунду на Спринтере, но при записи данных в память будет сильно меньше т.к. на ожидание окончания записи страницы данных по даташиту может уйти до 5 мс. Чтение можно сделать через LDIR/LDI (да и запись тоже можно сделать, только будет медленее) - если делать через LDIR (область доступа к SPI имеет размер 256 байт - так что можно копировать до 32 байтов за раз), то скорость будет только 21 такт на бит, а если через цепочку LDI, то 16 тактов на бит (плюс время на восстановление байтов из битов).

P.P.S. Можно ещё с PUSH и POP позаморачиваться, тогда в пределе будет 5.5 тактов на бит, но их надо ведь ещё куда-то копировать...

_________________
:dj: https://mastodon.social/@Shaos


08 Jan 2021 01:54
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Shaos wrote:
Нашёл в чём проблема с чтением - /CS для WizNET неправильно формировался на последнем этапе покрывая почти всё адресное пространство и т.к. оно ещё и на TTL буфер подавалось, которым WizNET прикрыт от шины (ибо он трёхвольтовый, хоть и 5V-tolerant), у этого буфера конфликт получался со всем остальным на плате - хорошо у меня свободные гейты остались - просто порежу дорожек и напаяю проводочек...
Напаял - теперь GPIO и RAM работают как надо и на запись, и на чтение :)

Attachment:
ShaosCart4.jpg
ShaosCart4.jpg [ 171.38 KiB | Viewed 8258 times ]

А вот EEPROM видимо по другому надо цеплять - трюк с /MREQ как SCK чего-то не сработал - читает то все нули, то все единички...

_________________
:dj: https://mastodon.social/@Shaos


08 Jan 2021 22:21
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
Втыкаем WizNET и идём дальше:


Attachments:
ShaosCart5.jpg
ShaosCart5.jpg [ 184.01 KiB | Viewed 8257 times ]

_________________
:dj: https://mastodon.social/@Shaos
09 Jan 2021 00:10
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22383
Location: Silicon Valley
Reply with quote
По ходу ISA-шина Спринтера быстровата для визнета - запись байта не всегда с первого раза удаётся если в турбо-режиме работаем - можно попробовать вейтать проц на немного, если визнет выбран.
Ну или чисто программно - запись с верификацией и если не совпадает, то повторная запись...

P.S. Записки на полях - в интернетах пишут, что для UDP у W5100 есть ограничение на размер пакета в 1472 байт

_________________
:dj: https://mastodon.social/@Shaos


09 Jan 2021 06:14
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 70 posts ]  Go to page Previous  1, 2, 3, 4, 5  Next

Who is online

Users browsing this forum: No registered users and 5 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.