nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 05:02



Reply to topic  [ 198 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9, 10, 11 ... 14  Next
ISA-8 SD-контроллер (SPI) на CPLD 
Author Message
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Почему-то читает предыдущий записываемый байт... То есть цикл:

for i = 0 to 255 do
begin
port[$3b0] := i;
while port[$3b1] and $40 <> 0;
tmp := port[$3b0];
if tmp <> i then WriteLn('ERR ....',i,' ret=',tmp,' port=', Port[$3b0]);
end;

Дает такую картину:
Attachment:
P71208-205447_измен.размер.jpg
P71208-205447_измен.размер.jpg [ 212.31 KiB | Viewed 4748 times ]

_________________
https://t.me/tronix_blog


08 Dec 2017 11:00
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
А, нет. Читает правильно. А вот пишет не правильно.

Идет
MOSI = 41; MISO = 41
MOSI = 42; MISO = 42
MOSI = 43; MISO = 43
MOSI = 44; MISO = 44
MOSI = 44; MISO = 44 <---- не записал 45 сюда, продублировал предыдущее значение
MOSI = 46; MISO = 46

_________________
https://t.me/tronix_blog


08 Dec 2017 11:08
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Что-то не понял - проверка готовности или просто пауза между выдачами байтов есть ?


08 Dec 2017 11:24
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
newold86 wrote:
Что-то не понял - проверка готовности или просто пауза между выдачами байтов есть ?


есть проверка готовности while port[$3b1] and $40 <> 0;

_________________
https://t.me/tronix_blog


08 Dec 2017 11:26
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
А можно вместо проверки готовности вставить паузу, гарантированно достаточную для передачи байта ?


08 Dec 2017 11:28
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
С гарантированной паузой ошибок меньше, но они есть.

_________________
https://t.me/tronix_blog


08 Dec 2017 11:42
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Нет, ну это провал. Взял схемную реализацию от Specialist MX http://www.spetsialist-mx.ru/index32.html
Выкинул из делителя тройку тригеров, влезла в 31 ячейку. Инвертировал сигнал RESET на схеме, ввел дополнительно /RD. Из порта управления читается хрень 0x4F всегда, что бы я туда не записал.
Порт данных вроде бы работает, но точно так же периодически идут ошибки. Так как контрол порт не работает, делал просто с задержкой 10 мс. Даже 20 мс. Пофигу.
Но ошибки другого рода, видимо сдвиг не до конца происходит бит.
Сдаюсь.

Attachment:
P71209-121345_измен.размер.jpg
P71209-121345_измен.размер.jpg [ 119.07 KiB | Viewed 4726 times ]


Attachments:
specmx.rar [230.04 KiB]
Downloaded 227 times

_________________
https://t.me/tronix_blog
09 Dec 2017 02:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Я всё жду, когда Tronix напишет: прогрел "феном от станции на 450 градусов все подряд" и всё заработало! :mrgreen:

_________________
iLavr


09 Dec 2017 05:18
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Не знаю как и почему, но оно заработало. :o Игрался от безысходности с кодом, в частности с блокирующими и не блокирующими присваиваниями. С привязкой всего чего можно к Clk. С negedge и posedge. И в один прекрасный момент звезды совпали так, что видимо я куда нужно что-то воткнул, а где не нужно что-то выткнул. И заработало. Правда, еще оказалось, что все-таки подтяжка всех SPI сигналов к Vcc нужна, без нее не устойчиво карта определялась, да и только лишь когда параллельно был анализатор подключен. Ну 4 резистора припаял, мне не сложно.

Код получился такой:

Code:
module MX2_CPLD(
    // Системные
    input    Clk,              // Входная частота 14.31818 МГц
    input    Res,              // Входной сигнал сброса, активный уровень лог.0
    input    nRD,              // Вход строба чтения
    input    nWR,              // Вход строба записи
    input    nCS,              // Вход выбора контроллера
    input    Adr,              // Вход адреса данные/управление
    inout    [7:0]Dat,         // Шина данных
    // SPI
    output   nSEL,             // Выходной сигнал выбора карты
    output   reg SCK,          // Выход тактовой частоты SPI
    input    MISO,             // Вход данных SPI
    output   MOSI,             // Выход данных SPI
    output   nRED,             // Выход управления красным светодиодом
    input    nINS              // Вход датчика вставления карты
);
// Внутренние регистры
reg [2:0]Pre;                  // Делитель частоты
reg [2:0]Ctrl;                 // Регистр управления
reg [7:0]Data;                 // Регистр данных
reg [2:0]Bits;                 // Счетчик сдвигаемых бит
reg RMISO;                     // Защелка сигнала MISO
reg BUSY;                      // SPI занят передачей
// Комбинаторика
assign nSEL = ~Ctrl[0];        // Выбор карты
assign nRED = ~Ctrl[2];        // Красная лампочка
assign MOSI = Data[7];         // Выход MOSI SPI
assign Dat[7:0] = (~nCS & ~nRD & ~Clk) ?
                    (Adr) ? {~nINS,BUSY,3'h0,Ctrl[2:0]} : Data[7:0]
                    : 8'hZZ;
// Синхронная логика
always @(posedge Clk) begin
    // Делитель частоты
    Pre[2:0] <= Pre[2:0] + 3'h1;
    // Запись в управление может происходить асинхронно
    if (~nCS & ~nWR & Adr) Ctrl[2:0] = Dat[2:0];
    // Сигнал сброса имеет приоритет вне зависимости от выбранной скорости
    if (Res)
    begin
        // Сброс действует на эти регистры
        Ctrl[2:0] <= 3'h0;
        Bits[2:0] <= 3'h0;
        BUSY <= 1'b0;
        SCK <= 1'b0;
    end
   else
    begin
        // Состояние SPI
        if (BUSY)
        begin
            // Делитель частоты
            if (((Pre[2] & Pre[1]) | Ctrl[1]) & Pre[0])
            begin
                // SPI работает
                if (SCK)
                begin
                    // Сбрасываем такт
                    SCK <= 1'b0;
                    // Спад, поэтому сдвигаем
                    Data[7:0] <= {Data[6:0],RMISO};
                    // Считаем биты
                    Bits[2:0] <= Bits[2:0] + 3'h1;
                    // Это был 7й бит?
                    if (Bits[2] & Bits[1] & Bits[0]) BUSY = 1'b0;
                end else begin
                    // Устанавливаем такт
                    SCK <= 1'b1;
                    // Это фронт, поэтому сэмплируем вход
                    RMISO <= MISO;
                end
            end
        end else begin
            // Обнуляем счетчик бит
            Bits[2:0] <= 3'h0;
            // Запись в регистр данных возможна только если SPI не занят
            if (~nCS & ~nWR & ~Adr)
            begin
                Data[7:0] = Dat[7:0];
                BUSY = 1'b1;
            end
        end
    end
end
// Конец
endmodule


Attachment:
P71209-195954_измен.размер.jpg
P71209-195954_измен.размер.jpg [ 96.22 KiB | Viewed 4712 times ]


Attachment:
P71209-194556_измен.размер.jpg
P71209-194556_измен.размер.jpg [ 121.53 KiB | Viewed 4714 times ]

_________________
https://t.me/tronix_blog


09 Dec 2017 09:50
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
Это на Поиск-2. На 386 тоже делает вид, что работает (спишем пару зависаний при тесте на неконтакт в ISA слотах на стенде без корпуса). На первом пне - снова ошибки.

Вообщем крайне не стабильная система, увы.

_________________
https://t.me/tronix_blog


09 Dec 2017 12:04
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
Если в ква включить галку "slow slew rate" -- не улучшает стабильность?

_________________
привет засранцу лавру :)


09 Dec 2017 14:04
Profile
Devil

Joined: 30 Nov 2013 11:08
Posts: 706
Location: WWW
Reply with quote
Tronix wrote:
Не знаю как и почему, но оно заработало.

Ну, я вроде где-то раньше упоминал известный (мне) факт о приработке софта - много раз запустишь, оно и притирается :)

На телефоне сложно сравнивать - код чем-то отличается от предыдущего ?

Tronix wrote:
На первом пне - снова ошибки.

Думаю, что шина слишком шустрая для такого способа общения с ней...


09 Dec 2017 19:54
Profile
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
angry_troll wrote:
Если в ква включить галку "slow slew rate" -- не улучшает стабильность?


Попробую, спасибо.


newold86 wrote:
код чем-то отличается от предыдущего ?


Чем то отличается. = вместо <= в некоторых местах, чтение из регистра не только по nCS & nRD но и по Clk. Что то еще может быть.

newold86 wrote:
Думаю, что шина слишком шустрая для такого способа общения с ней...


Это как? Чем шина на пне отличается от шины не на пне?

_________________
https://t.me/tronix_blog


10 Dec 2017 00:06
Profile
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Reply with quote
На всех диаграммах ISA, которые нагугливаются, data гарантированно присутствует на поседже nWR.

Вот к этой строчке
if (~nCS & ~nWR & Adr) Ctrl[2:0] = Dat[2:0];
Это тоже относится.

И к чтению, процессором, из СПИ это тоже относится. Процессор может читать(не уверен) на поседже nRD

Нужно цеплять логический анализатор не на СПИ, а на ISA


10 Dec 2017 00:41
Profile ICQ
Doomed

Joined: 18 Nov 2013 02:38
Posts: 662
Location: Москва
Reply with quote
А нет, карта работает и на пне тоже. Опять тестирую закоротив MISO и MOSI. Цикл в 65535 прогонов в каждом цикл по 255 прогонов отрабатывает без ошибок. Значит что-то не так где-то в другом месте (драйвер).

_________________
https://t.me/tronix_blog


10 Dec 2017 01:13
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 198 posts ]  Go to page Previous  1 ... 5, 6, 7, 8, 9, 10, 11 ... 14  Next

Who is online

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