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
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
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
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
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.
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
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.
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
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
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
@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.
@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.
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.
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.
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
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.
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
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
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;
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
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
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
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.
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