Forum: Mikrocontroller und Digitale Elektronik PCI/ISA -Bus?


von Marcel Block (Gast)


Lesenswert?

hi,

hat jemand von euch schonmal irgendwo im netz schonmal was zum PCI oder 
ISA Bus gefunden? Wär doch mal cool ne eigene PCI Karte zu basteln.
Ich google hier schon die ganze zeit und such irgendwelche projekte oder 
dokus zu dem thema aber ich find einfach nix :/

MFG Marcel

von mikki merten (Gast)


Lesenswert?

Da werden sie geholfen:
http://www.kolter.de/

von Rudolph (Gast)


Lesenswert?

Also ISA ist sicherlich der einfacher Standart, aber wenn du was zu 
selbstgebauten PCI-Karten suchst, kannst du mal unter: 
http://elm-chan.org/works/pci/report_e.html gucken.

Rudolph

von Marcel Block (Gast)


Lesenswert?

also der isa-bus scheint wohl ein wenig einfacher zu sein g

hättet ihr auch noch was zu isa?

MFG Marcel

von antti lukats (Gast)


Lesenswert?

ISA (Vater in estonian!) ist TOT, kannst du gleich vergessen.

für PCI is am einfachsten die chips from www.plxtech.com zu
benutzen, das ist einfach.

www.opencores.com hat freie verilog code auch aber das ist
nicht so einfach

www.latticesemi.com hat freie code (für ispMACH)

die meisten anedere PCI IP cores cost über 1000 EUR

antti

von Marcel Block @school (Gast)


Lesenswert?

jo klar isa ist nicht wirklich up to date aber irgendwie total 
einfach...

kennt denn niemand von euch ne seite auf der man wirklich ne ganz simple 
pci-karte zu sehen bekommt und auch versteht? g

MFG Marcel

von Rolf Freitag (Gast)


Lesenswert?

Also Kolter ist für billige minimale Sachen brauchbar, aber wirklich nur 
dafür, denn die PCI-Prototyp-Karte stellt nur 16 Bit zur Verfügung, hat 
kein DMA usw..

Bei HK bekommt man bessere PCI-Karten:

http://www.bln.de/hkmessysteme/

Und für ganz billige u. einfache Sachen sollte man eher den Parallelport 
nehmen, denn der reicht schon aus um LEDs anzusteuern und ist sehr 
einfach zu programmieren.

von Marcel Block (Gast)


Lesenswert?

jo ich weiß das der parallelport easy zu verwenden is :)

ich würde aber gerne eine EIGENE pci-karte basteln ohne irgendwelche 
prototyp-karten oder sonstiges...

einfach eine ganz ganz ganz simple pci-karte die z.b. ne led zum 
leuchten bringt. Könnt ihr mir da weiterhelfen?

MFG Marcel

von Rolf Freitag (Gast)


Lesenswert?

Ohne fertige Prototyp-Karte hast Du praktisch keine Chance, allein schon 
weil auf dem einen Bus sowohl Daten als auch Adressen übertragen werden. 
Dazu kommt noch die Kommunikation mit dem PCI-Controller, damit es bei 
den Interrupts u. Adress-Räumen keine Konflikte gibt. Das ganze muss bei 
mind. 33,33 MHz und zudem bei variablen Takt funktionieren.

Du kannst natürlich selber eine Prototyp-Karte entwickeln, aber schon 
das Löten der ICs mit den engen Pins wird schwierig.

von Marcel Block (Gast)


Lesenswert?

jo aber für die ganze kommunikation mit dem pci controller usw. kann man 
doch von verschiedenen controllern machen lassen oder?

Hast du vielleicht einen schaltplan von einer minimalen pci-karte?

Marcel

von Antti Lukats (Gast)


Lesenswert?

ok, es is eigentlich moglich eine 'poor mans' PCI karte
zu machen, es gibt beispiele wie POST CODE tester
that has LED on port 0080X and ist mit zwei GALs getan.

ich hatte es for mit einem XC9536 eine sehr einfache karte
zu machen, es ist moglich!

tricks sind dabei das man den ganzen plug and play weglasst
und nur auf config space antworted.

ich glaube um einen LED under software zu kontrollieren
kann man karte machen mit etwa 20 macrocells.

dann mus der Treiber jedoch direct auf den slot zu greifen
all enumaration ist weg

von Marcel Block (Gast)


Lesenswert?

ok und hast du dazu auch irgendwelche docs oder so?

Marcel

von mikki merten (Gast)


Lesenswert?


von Antti Lukats (Gast)


Lesenswert?

oh docs gibt es haufen menge - zb die offizielle PCI
docs kann man auch von internet finden, wenn man ordentlich
sucht.

aber genugend info gibt es auch in docs from vershieden
PCI chips zb von oxford semiconductor

,tja aber eine proto platine mit irgenwas logic musst du
doch machen

antti

von mikki merten (Gast)


Lesenswert?

@Antti
Ist ja mein reden, PCI Karte ist kein 10 Euro Hobby-Projekt. Und ohne 
entsprechende Messgeräte ist die Fehlersuche wohl auch nahezu unmöglich. 
Es ist halt nicht damit getan man nehme eine paar 74xx IC und ein paar 
Zeilen VB-Code und schon läufts. So ein Projekt ist nun mal nicht 
unbedingt ein Anfänger-Projekt.

von Rolf F. (Gast)


Lesenswert?

@mitti
Ja, meine ich auch.

Bei ISA kann man einfach ein paar ICs zusammenlöten und die Karte 
normalerweise hot swap ein- u. ausbauen und wenn man denn alle 
Verbindungen nach dem Schaltplan mit Durchgangsprüfer durchgetestet hat, 
funktioniert das problemlos. Bei PCI gibt es aber schon bei 
"professionellen" Karten viele Probleme: Manche arbeiten auf einigen 
Mainboards überhaupt nicht, manche nur in einem Slot usw. und manche 
machen den Rechner einfach instabil. Das hatte ich schon einige male 
erlebt.
Man kann sich zwar zuverlässige Board mit einem zuverlässigem Chipsatz 
wie Serverworks III oder AMD MPX kaufen, die auch mit nicht der 
PCI-Spezifikation genügenden Karten zurechtkommen, aber ich weiß von der 
Kolter-PCI-Prototyp-Karte, dass die schon ein kompliziertes Timing auf 
der Prototyp-Seite hat und es zudem noch eine erhebliche 
Exemplarstreuung gibt, so dass ich die nicht empfehlen kann.

von Gralf (Gast)


Lesenswert?

Gibt es nicht Experimentierkarten in PCI?
Elektor hat mal eine im Feb2002 veröffentlicht. Die Karte kümmert sich 
um die Kommunikation mit dem Bus und stellt diverse Ports zur Verfügung.
Da kannst Du bestimmt Deine Schaltung anbinden.

von Rolf F. (Gast)


Lesenswert?

Ja, die gibt´s hier:

http://www.bln.de/hkmessysteme/

Allerdings kosteten die fast 900 DM, also nicht billig.
Dafür ist die Qualität wirklich gut und man hat 3 verschiedene DMA-Modi, 
die man nutzten kann.

von Torsten (Gast)


Lesenswert?

Wie Steuert man denn eigentlich so ein Teil an, falls man es gebaut 
bekommt?
Da muss man doch sicherlich einen Treiber entwickeln, mit outp() wird da 
wohl nix mehr gehen oder?

MfG Torsten

von Antti Lukats (Gast)


Lesenswert?

DriverLinx DLL und treiber dann geht mist ähnlich wit outp()

:)

von Rolf Freitag (Gast)


Lesenswert?

Mit pci-Funktionen bekommt man die Adressbereiche und da gibt´s immer 
einen (meist der erste) für einfaches direktes I/O.
Provisorisch kann man in /proc/pci (Linux/Unix) nachsehen und die 
Adressen nehmen.

Es ist wohl kompliziert, wenn man mehrere gleiche Karten hat, denn die 
Busse u. Devices den einzelnen Slots zuzuordnen ist ohne Kennzeichnungen 
an den Slots nur mit Ausmessen möglich.

von Antti Lukats (Gast)


Lesenswert?

wenn man kann grob es macht dann kann man mit sehr
wenig hardware was zum basteln machen nur die signale

clk
frame
cben
und ein ADx signal

damit kann man schon ein LED zum beispiel ansteurn :)
is dann aber nur durch access zu config space

antti

von Marcel Block (Gast)


Lesenswert?

oje oje oje :)

also werd ich wohl doch ne isa-karte basteln...
mal sehn wo ich nen testrechner mit nem isa-steckplatz her bekomme g

MFG Marcel

von Rolf Freitag (Gast)


Lesenswert?

Es gibt ja viele alte Pläne für solche Karten. Beispielsweise die 
MC-Port-Karte oder wie die heißt. Die müsste von 1988 sein.

von Antti Lukats (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

ich habe jetzt mein erstes PCI design geschaft
siehe anhang da ist VHDL für BIOS Post Code tester
zeigt ganz gut C1 wenn ich RAMs von computer enterferne :)

antti

von Marcel Block (Gast)


Lesenswert?

der download von der datei funzt irgendwie net

von Antti Lukats (Gast)


Lesenswert?

kommt alles in message
************


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity pm_pci_lc_33 is Port (
  -- 7 Segment LED's
  seg_led_1 : out std_logic_vector(6 downto 0);
  seg_led_2 : out std_logic_vector(6 downto 0);
  -- PCI
  AD_I      : in std_logic_vector(7 downto 0);
  CBE_I     : in std_logic_vector(3 downto 0);
  FRAME_I   : in std_logic;
  IRDY_I    : in std_logic;
  PCLK      : in std_logic);
end pm_pci_lc_33;

architecture Behavioral of pm_pci_lc_33 is

signal data80: std_logic_vector(7 downto 0);

COMPONENT pm_pci_port80 PORT(
  clk : IN std_logic;
  frame : IN std_logic;
  irdy : IN std_logic;
  cbe : IN std_logic_vector(3 downto 0);
  ad : IN std_logic_vector(7 downto 0);
  portdata : OUT std_logic_vector(7 downto 0));
END COMPONENT;

COMPONENT led7seg_decoder PORT(
  data : IN std_logic_vector(3 downto 0);
  seg : OUT std_logic_vector(6 downto 0));
END COMPONENT;

begin
  -- PCI: Port80 Latch
  Inst_pm_pci: pm_pci_port80 PORT MAP(
    clk => PCLK,
    frame => FRAME_I,
    irdy => IRDY_I,
    cbe => CBE_I,
    ad => AD_I,
    portdata => data80);
  -- Segment LED decoders to port 80 Data register
  Inst_led7seg_decoder1: led7seg_decoder PORT MAP(
    data => data80(3 downto 0), seg => seg_led_1);
  Inst_led7seg_decoder2: led7seg_decoder PORT MAP(
    data => data80(7 downto 4), seg => seg_led_2);
end Behavioral;

**************************************

--
-- Poor Man PCI Interface: BIOS POST Code Tester (LED's to Port 0x0080)
-- Checked with Memec Spartan-IIS200 PCI Board
-- Copyright 2003 Nugis Foundation. All rights reserved.
--

library ieee;
use ieee.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;

entity PM_Pci_Port80 is port(
  -- PCI Signals
  CLK:   in std_logic;
  FRAME: in std_logic;
  IRDY:  in std_logic;
  CBE:   in std_logic_vector(3 downto 0);
  AD:    in  std_logic_vector(7 downto 0);
  -- Lathced Port 0xXX80 data output
  portdata: out std_logic_vector(7 downto 0));
end PM_Pci_Port80;

architecture arch of PM_Pci_Port80 is

signal pci_io_write: std_logic;
signal pci_state_idle: std_logic;
signal pci_state_1: std_logic;
signal pci_addr: std_logic_vector(7 downto 0);

begin

  process (CLK)
  begin
    -- on falling edge of PCI Clock!
    if (CLK'event) and CLK = '0' then
      -- transaction done
      if (FRAME = '1') and (IRDY = '1') then
      -- idle, abort transaction !
      pci_state_idle <= '1';
      pci_state_1 <= '0';
    else
      -- transaction in progress, track ?
      if pci_state_idle = '1' then
        pci_state_1 <= '1'; -- to next state
        pci_state_idle <= '0'; -- clear idle
        -- first phase after idle,latch!
        -- we are active, latch all stuff: address
  pci_addr(7 downto 0) <= AD(7 downto 0); -- latch address!
  -- and io write
   pci_io_write <= not CBE(3) and not CBE(2) and CBE(1) and CBE(0);
      end if;
      if pci_state_1 = '1' then
        pci_state_1 <= '0'; -- exit state
        -- if address xx80 then latch data
  if (pci_io_write = '1') and
           (pci_addr(7 downto 0) = "10000000") then
          portdata <= AD(7 downto 0); -- latch PORT 0080!
        end if;
      end if;
    end if;
  end if;
end process;

end arch;


*************

--
-- 7 Segment decoder (4 to 7)
-- Copyright 2003 Nugis Foundation. All rights reserved.
--
--   --0--
--  5     1
--   --6--
--  4     2
--   --3--

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity LED7SEG_Decoder is Port (
  data : in std_logic_vector(3 downto 0);
  seg : out std_logic_vector(6 downto 0));
end LED7SEG_Decoder;

architecture Behavioral of LED7SEG_Decoder is
begin
  with data(3 downto 0) select seg <=
    "0000110" when "0001", -- 1
    "1011011" when "0010", -- 2
    "1001111" when "0011", -- 3
    "1100110" when "0100", -- 4
    "1101101" when "0101", -- 5
    "1111101" when "0110", -- 6
    "0000111" when "0111", -- 7
    "1111111" when "1000", -- 8
    "1101111" when "1001", -- 9
    "1110111" when "1010", -- A
    "1111100" when "1011", -- B
    "0111001" when "1100", -- C
    "1011110" when "1101", -- D
    "1111001" when "1110", -- E
    "1110001" when "1111", -- F
    "0111111" when others; -- 0
end Behavioral;

von Marcel Block (Gast)


Lesenswert?

schön :)
nur eine frage: WAS IST DAS? g

von Antti Lukats (Gast)


Lesenswert?

na das ist naturlich WAS!

when du das mit Xilinx free tools zu .BIT file machst
und diesen .BIT file in ein XC2S200 z.b. einspeist der
auf einer PCI karte sitzt und 2 7-segment leds hat dann
hast du eine PCI karte der die BIOS post test-codes
als hex ziffer auf LEDs schreibt.

das ganze ist so klein das es auch in
XC9536XL reinpasst, und XC9536 kostet 1 dollar amerikano

ist zwar die billigste PCI baustein dann.

damit kann man noch nicht viel machen, aber es ist minimal
write only port on PCI bus, kann schon was steuern oder
was machen. für richtige volle PCI unterstützung braucht
man ein bishen mehr zu schreiben :) löten braucht man
heutzutage nicht mehr :)

antti

von Marcel Block (Gast)


Lesenswert?

aha :)

von H.Kolter (Gast)


Lesenswert?

An R.Freitag
Erstmal vielen Dank für die üble Nachrede hier im Forum. Leider habe
ich das Formum erst heute entdeckt, so dass ich hierzu Stellung nehmen
kann. Wenn ich mich noch richtig an Ihr Zufallsgenerator-Projekt
erinnere, hatten Sie neben meinem PCI-Dekoder noch eine TTL-Schaltung
mit an den PCI-Bus angeschlossen, was lt. Spezifikation nicht erlaubt
ist. Bus-Signale dürfen bei PCI-Steckplätzen nur mit einem Gatter mit
max. 10pF belastet werden! Hierzu empfiehlt sich ein kurzer Blick in
die PCI-Spezifikation - und ganz nebenbei hatte ich auch am Telefon
noch darauf hingewiesen.

So auch, dass der Dekoder nur für einfache I/O-Operationen mit geringem
Datenvolumen bei 16bit entwickelt wurde. Dies alles steht auch auf der
FAQ-Seite unter:

http://www.pci-card.com/faq008.html

P.S.
Sie sollten fairerweise auch noch auf den günstigen Preis eingehen.
Birnen mit Äpfel vergleichen, halte ich ebenso für unsportlich.

In diesem Sinne...
mfg

von Breti (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich glaube, dass du mit dem ISA Bus erstmal ganz gut fahren würdest. Er
ist relativ simpel zu programmieren und ich halte das auch für nen
normalen Mikrocontroller (Avr oder Pic) noch machbar, da der ISA Bus
Waitstates für langsamere Peripherie unterstützt. Der Bus selbst läuft
normalerweise mit 8,33Mhz. Genauere Informationen zum ISA Bus findest
du in dem Referenzbuch "ISA & EISA - Theory and Operation" von Edward
Solari aus dem Jahre 1994. Das Buch gibts in fast jeder Uni Bibliothek -
man kann es aber auch noch online kaufen (hab die Adresse leider nicht
mehr, aber googeln wird wohl helfen).

Darüber hinaus ist ISA noch nicht ganz so tot, wie mancher glauben mag.
Wenn Ihr Euch mal die PC/104 Spezifikation anschauen, so werdet Ihr
feststellen, dass dies ein normaler ISA Bus mit anderem Stecker ist.
Ihr findet diesen Bus auf vielen PC embedded Boards - eben weil er so
einfach ist.
Ich habe Euch mal ein Bild meines Boards angehängt. Ihr seht oben ein
Arbor N511 embedded X86 Board (Geode 300Mhz, CF Karte mit Debian Linux,
64MB Ram usw.) und ein Xilinx Spartan 3 Starterkit, welches über das
Kabelgewusel an den PC/104 Bus angeschlossen ist. Ich erreiche beim
16bit Transfer ungefähr eine Transferrate von 1,5MByte/s. Die
Ansteuerung des ISA Buses unter Linux ist auch sehr simpel. Bei Bedarf
poste ich Euch gern ein Beispiel.
Achtet bitte darauf, dass ISA Signale 5V haben und der Spartan3
eigentlich nur bis 3,3V (ich glaube er ist tolerant bis 4,5V) verträgt.
Meinen Spartan hats hier aber trotzdem noch nicht gegrillt :)

Gruß,
     Thomas

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Autor: Marcel Block
Datum: 22.05.2003 16:45

also der isa-bus scheint wohl ein wenig einfacher zu sein g

hättet ihr auch noch was zu isa?

MFG Marcel
_______________________________________

Die Industrie fertigt auch aktuell noch Mother-Boards mit ISA- BUS an,
wegen der riesigen Menge exzellent funktionierender ISA-Entwicklungen
bei der Kundschaft.

Hier mal eine meiner letzten Entwicklungen für den ISA-BUS. Die
Schrittmotortreiber habe ich übrigens in einer alten Festplatte
Pinmäßig überprüft und zum funktionieren gebracht,anschließend
extrahiert und auf dem eigenen Board integriert. Das Ganze war für
einen Dipl. Arbeitsplatz mit wenig Kohle für seine Rüstzeug gedacht.
Letztlich wird an dem Schrittmotor ein Hebelchen befestigt, an welchem
eine fixierte Heuschrecke gegen akustische Signale richtungsabhängig
verdreht wird.
Der "uralte" Elektronikschrott ist HighTech und wertvoll für knappe
Kassen.

von Manfred Glahe (Gast)


Angehängte Dateien:

Lesenswert?

Nachtrag:

Entschuldigung, da hatte ich die falsche Datei angehängt.

von Marcel Pokrandt (Gast)


Lesenswert?

Leute, schaut mal bitte aufs Datum.
Der Thread ist etwa 3 Jahre alt...*g

von Feadi (Gast)


Lesenswert?

Hi,

ja der Thread ist 3 Jahre al, ist aber doch sehr interessant.

Hier habe ich eine Signalbeschreibung ergoogelt:
http://hwb.sunsite.dk/co_ISA.html

Hat jemand noch einen Tipp, wo man eine gute Beschreibung für das
notwendige Timing, für den ISA-Bus, bekommt?

Feadi

von Feadi (Gast)


Lesenswert?

Soso, "isa bus timing" bei Google, gleich das erste Ergebnis.

Jetzt schäme ich mich aber :(

Gruß, Feadi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.