PDA

Просмотр полной версии : Подключал ли кто SPI (25XXX FRAM) к ZX ?



Orionsoft
25.11.2006, 10:47
Пытаюсь сделать программатор
подключил так

25256 SPI (mode0)FRAM ym2149 port (register 7=%10xxxxxx)

1- !CS B-7bit
2-SerialOutput A-0bit
3-!writeprotect vcc
4-gnd gnd
5-SerialInput B-5bit
6-SCK B-6bit
7-!HOLD vcc
8-vcc vcc
---------------------------------------

переписал исходник от atmela89c51 под эти порты
( показать пока не могу , так как оно на реале )

вобщем посылаю ему код считать конфиг - в ответ приходят нули .

???правильно ЛИ я понял протокол SPI???
что для записи байта мы
0) устанавливаем CS-1 , SCK -0 , SI - безразличное
1)выбираем CS-0
2)выставляем нужный бит в SI
3)поднимаем SCK вверх ( наверное данные зашли )
4)опускаем SCK
5) повторяем пункты 2-4 нужное количество bit
6)снимаем CS

а при чтении ответа что данные надо принимать до первого перепада ?

вобщем кто чего дельного подскажет , как организовать SPI при помщи портов.

.... :o :v2_down:

AAARGH

подскажите чё

ASDT
25.11.2006, 11:21
"вобщем посылаю ему код считать конфиг - в ответ приходят нули ."
А что должно приходить?

Orionsoft
25.11.2006, 19:37
А что должно приходить?
я установил защиту
поэтому дкмаю доллжен получать в ответ покрайней мере X00011X0

ASDT
25.11.2006, 21:12
А линия подтянута? Если да, то весьма вероятно, что мс отвечает.

Orionsoft
25.11.2006, 21:20
А линия подтянута?
подтянут только CS ( как по мануалу )
ну вроде и порты в звуковухе внутри тоже подтянуты

ASDT
25.11.2006, 21:27
"ну вроде и порты в звуковухе внутри тоже подтянуты"
Как скажете ...
А так - пишет/читает?

Orionsoft
26.11.2006, 03:51
А так - пишет/читает?
Да , взял программатор и зарисовал что происходит при выдаче команды
чтения конфиггурации
в ответ получено 80H

http://img141.imageshack_.us/img141/6858/4lu4aur8.gif

Синий SCK
Желтый SO
http://img213.imageshack_.us/img213/1646/imagesckblueyelow5soor2.gif

Желтый SI
http://img174.imageshack_.us/img174/9537/imagesckblueyelow2siyg0.gif

Жетый CS
http://img205.imageshack_.us/img205/968/imagesckblueyelow1csfv7.gif


теперь буду смотреть , что у меня происходит ...

fan
26.11.2006, 04:02
Извинямте за офтоп . Но какой девайс выдаёт такие пикчеры ?

Orionsoft
26.11.2006, 04:12
Но какой девайс выдаёт такие пикчеры ?
Tektronix TDS3XX2 по адресу 192.168.0.5

fan
26.11.2006, 04:28
192.168.0.5
Молчит хомяк :(

Orionsoft
26.11.2006, 05:28
Молчит хомяк :(

это локальный адрес =)

caro
26.11.2006, 08:16
...теперь буду смотреть , что у меня происходит ...По моему у тебя не хватает одного импульса SCK.
Только я не понял при выдаче команды или при чтении ответа.
Их общее число в пределах одной выборки (/CS=0), должно быть 16, а тебя 15.

PS. SCK рекомендую держать по умолчанию = 0.
PPS. Мне не нравится длинный SCK в середине цикла, по моему ты как раз здесь забыл его опустить в 0.

Orionsoft
26.11.2006, 08:34
По моему у тебя не хватает одного импульса SCK.
Только я не понял при выдаче команды или при чтении ответа.
Их общее число в пределах одной выборки (/CS=0), должно быть 16, а тебя 15.
то , что на картинках - это снято с реаль работоющего живого програматора .
Так как реализуем SPI mode 0 то импульсов как раз 16 ( первый длинный )
http://img221.imageshack_.us/img221/3524/frommanualkb6.gif

так то всё работает с БОЛЬШИМ программатором .

я непойму сейчас следующее

вот я выбрал в 2149 7 регистр ,записал туда %10xxxxxx
теперь по идее 14 регистр должен работать на выход
а 15 на вход .

но реально както вся не так получается
и еще из бейсика я даю например out 65533 и out 49149
и наблюдаю переключение на осциле
аналогигная процедура в коде с запрещенными прерываниями
не вызывает эмоций на выходе портов =( =( =(
короче какой-то бред , так небывает
............
копаю дальше . как найду свет в конце тунеля оттпишусь ..

caro
26.11.2006, 08:49
...я непойму сейчас следующее

вот я выбрал в 2149 7 регистр ,записал туда %10xxxxxx
теперь по идее 14 регистр должен работать на выход
а 15 на вход .

но реально както вся не так получается ..Мало того, в ПЗУ Basic 128 есть процедуры работы с портом A Музпроцессора,
которые обеспечивают работу одной половины порта A (D7..D4) на прием, а другой (D3..D0) на передачу.
Хотя по описания AY возможна работа всего порта либо на прием либо на передачу,
в зависимости от состояния 7 и 6 бита регистра 7.
Могу кинуть тебе, если интересно, эти процедуры, я их когда то дизассемблировал.

jtn
26.11.2006, 08:50
аналогигная процедура в коде с запрещенными прерываниями
не вызывает эмоций на выходе портов =( =( =(
короче какой-то бред , так небываеткод в студию. телепаты на канарах

Orionsoft
26.11.2006, 08:53
код в студию. телепаты на канарах

ща , еще раз всё верефицирую , и попробую сделать tape файл с асм кодом для 4 тасма и сюда положу

jtn
26.11.2006, 09:33
ща , еще раз всё верефицирую , и попробую сделать tape файл с асм кодом для 4 тасма и сюда положулучше в txt - нажать I, потом CS+P

Orionsoft
26.11.2006, 10:19
ЗАРАБОТАЛА !
ЧИТАЕТ 128 ! 80h
AYSPI00.A
CODE 40872,4907
TASM 4.0

Orionsoft
26.11.2006, 10:22
лучше в txt - нажать I, потом CS+P
??? I - IMPORT TASM 2.0 ???
у меня тасм на реале , который rst7 написал =)

jtn
26.11.2006, 10:48
??? I - IMPORT TASM 2.0 ???

потом CS+P - Export to pC. тасм4.0 в топку. 4.12 рулит!
подумай головой как грузить tzx в тасм???

Orionsoft
26.11.2006, 10:58
Блин , всё равно странно ведет себя
прога байт состояния правильно считывает
а подключаю оссцил и непонимаю
как она это считала
...
счас будут слайды
...

Orionsoft
26.11.2006, 11:01
подумай головой как грузить tzx в тасм???

10 CLEAR 29999
20 LOAD""CODE
30 PRINT USR 15619:REM:SAVE"AYSPI00"CODE 40872,4907

потом любым дискедитором меняешь разширение на A и грузишь в тасм

jtn
26.11.2006, 11:27
;SUB AYVER ; BFFD -<FROM REGISTER ->SET REGISTER
; C 7FFD ->DATA TO REGISTER
; 4 BIT RES GFX
; 5 --- SI
; 6 --- SCK
; 7 --- CS
; B
; 0 BIT SO
;COMMANDS

RDSR EQU #05
WRSR EQU #01
READ EQU #03
WRITE EQU #02
WREN EQU #06
WRDI EQU #04



ORG #8000
DI
CALL INI_SPI
CALL READ_ST
LD HL,DATA_IN
LD C,(HL)
LD B,0
EI
RET




DATA_IN ! SHIT !0
DATA_OU ! SHIT !0


INI_SPI
PUSH AF
PUSH BC

LD BC,65533
LD A,7 ;-7 REG MUST 10XXXXXX
OUT (C),A
LD BC,49149
LD A,128 ;1000000
OUT (C),A
;--------------------------------
LD BC,65533
LD A,15 ;B OUTPUT
OUT (C),A ;SET FOR OUTPUT

; B FOR UTPUT

LD A,%10110000 ;CS-H SCK-L SI-H
LD BC,49149
OUT (C),A
POP BC
POP AF
RET

SH_IN NOP ;GET DATA TO A
PUSH BC
PUSH HL
LD HL,DATA_IN
LD (HL),0
NOP ;MSB FIRST
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET7
RES 7,(HL)
JR RES7
SET7 SET 7,(HL)
RES7 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------

LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET6
RES 6,(HL)
JR RES6
SET6 SET 6,(HL)
RES6 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET5
RES 5,(HL)
JR RES5
SET5 SET 5,(HL)
RES5 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET4
RES 4,(HL)
JR RES4
SET4 SET 4,(HL)
RES4 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET3
RES 3,(HL)
JR RES3
SET3 SET 3,(HL)
RES3 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET2
RES 2,(HL)
JR RES2
SET2 SET 2,(HL)
RES2 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET1
RES 1,(HL)
JR RES1
SET1 SET 1,(HL)
RES1 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
LD A,%00110000 ;SCK LOW
CALL OUT_B
CALL IN_A
RRA ;--->cy-DATA 7 BIT
JR C,SET0
RES 0,(HL)
JR RES0
SET0 SET 0,(HL)
RES0 NOP
LD A,%01110000 ;SCK HI
CALL OUT_B
NOP
;---------------------------------------------
NOP
LD A,(HL)
POP HL
POP BC
; EI
RET



SH_OUT NOP ; ->DEVICE
PUSH AF
PUSH BC
PUSH HL
LD HL,DATA_OU
NOP ;MSB FIRST
LD A,%00000000 ;CS-LOW SCK 0 SI
; ;CS SCK SI RGFX
; CALL OUT_B
BIT 7,(HL)
JR Z,BIT7L
LD A,%00110000 ;SI HIGH
JR BIT7H
BIT7L LD A,%00010000 ;CS 0 SCK 0 SI 0
BIT7H NOP
CALL OUT_B

SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP



;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 6,(HL)
JR Z,BIT6L
LD A,%00110000 ;HIGH
JR BIT6H
BIT6L LD A,%00010000
BIT6H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP


;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 5,(HL)
JR Z,BIT5L
LD A,%00110000 ;HIGH
JR BIT5H
BIT5L LD A,%00010000
BIT5H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP


;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 4,(HL)
JR Z,BIT4L
LD A,%00110000 ;HIGH
JR BIT4H
BIT4L LD A,%00010000
BIT4H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP


;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 3,(HL)
JR Z,BIT3L
LD A,%00110000 ;HIGH
JR BIT3H
BIT3L LD A,%00010000
BIT3H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP


;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 2,(HL)
JR Z,BIT2L
LD A,%00110000 ;HIGH
JR BIT2H
BIT2L LD A,%00010000
BIT2H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP


;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 1,(HL)
JR Z,BIT1L
LD A,%00110000 ;HIGH
JR BIT1H
BIT1L LD A,%00010000
BIT1H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP


;-------------------------
LD A,%00110000 ;CS-LOW SCK 0 SI
CALL OUT_B
BIT 0,(HL)
JR Z,BIT0L
LD A,%00110000 ;HIGH
JR BIT0H
BIT0L LD A,%00010000
BIT0H NOP
CALL OUT_B
SET 6,A ;CS0 SCK1 SI1
CALL OUT_B ;SETB SCK
NOP
RES 6,A ; !!!!!!!!!!!!!!!!!!!!!
CALL OUT_B

POP AF
POP HL
POP BC
RET



READ_ST DI ;READ STATUS
PUSH AF
PUSH BC
PUSH HL
LD A,%00000000 ;CS-LOW SCK 0 SI

CALL OUT_B ;CLR CS
LD A,RDSR
LD HL,DATA_OU
LD (HL),A
CALL SH_OUT
CALL SH_IN
;DATA IN DATA_IN


LD A,%10110000 ;CS-LOW SCK 0 SI

CALL OUT_B ;DESELECT

POP HL
POP BC
POP AF
RET


;AY SUBS
;

OUT_B NOP ;SEND DATA IN A TO PORT B
PUSH BC
PUSH AF
LD BC,65533
LD A,15 ; B PORT
OUT (C),A
LD BC,49149
POP AF
OUT (C),A
POP BC
RET
IN_A NOP ; READ DATA FROM A RETURNS A
PUSH BC
LD BC,65533
LD A,14 ; APORT
OUT (C),A
IN A,(C)
POP BC
RET

Orionsoft
26.11.2006, 11:51
короче теперь такая фишка - с одним щупом подключенным на sck или на SO

читает правильно
стоит подключить второй щуп - начинает считывать ерунду :v2_down:

Orionsoft
26.11.2006, 23:57
DATA_IN ! SHIT !0
DATA_OU ! SHIT !0

что это за вольная интерпритация ?

jtn
27.11.2006, 08:25
что это за вольная интерпритация ?
конвертер не все директивы понимает

Orionsoft
01.12.2006, 19:57
Another day - another demo =(

Вобщем освоил чтение и запись
пытаюсь разобюратся с защитой от записи

получается такая штука
говорю ему
сними защиту
{ разреши запись , запиши в статусный регистр 80 h считай состояние статуса , если равно , приступай к записи )
всё происходит ....
читаю потом микросхему на программаторе
считывает область с 0000 до 02FF и останавливается , говорит типа произошла ошибка

данные с 0000 по 02ff соответствуют тому , что писалось ...

но вывести микросхему из такого ступора удаётся
лишь приминив команду полное стирание ....

как работать с защитой ?

Orionsoft
09.01.2010, 03:10
вобщем с защитой тоже всё работает , оказаллось меньше дергать микруху ркуой надо .
впоследствии код был переписан для работы через ВВ55 .
если найду выложу .