Forum: PC Hard- und Software PCI scan verzögern


von cee (Gast)


Lesenswert?

Hallo Leute

Ich habe ein PCI Express Board mit einem ALTERA ArriaGX gemacht. Die 
Karte wird in einen PC gesteckt und während des Bootvorgangs des 
Computers wird das FPGA-Programm durch einen uC ins FPGA geladen. Nun 
habe ich das Problem, dass ich das Programm mit dem uC zuwenig schnell 
aus dem Flash lesen und anschliessend ins FPGA kopieren kann. Es 
funktioniert zwar, aber leider erkennt Windows das PCI Device nicht, da 
der Scan Vorgang des PCI Busses bereits abgeschlossen ist. Wenn ich den 
PC nur neu starte ohne die Speisung auszuschalten, wird das PCI Device 
von Windows korrekt erkannt.

Der C-Code auf dem uC wurde bereits optimiert, so dass ich das FPGA (ca. 
3.2MB) in etwa 4 sec laden kann. Offenbar ist dies immer noch zu lang. 
Deshalb dachte ich mir, der nächste Schritt ist den PC am scannen des 
PCI zu "stören". Also irgendwie den Scan zu verzögern. Kennt jemand eine 
Möglichkeit, wie ich das bewerkstelligen könnte?

Für jegwelche Infos oder Tipps bin ich sehr dankbar.

Grüsse cee

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Hast du mal versucht einfach danach nochmal eine PnP Erkennung zu 
starten?

von Cee D. (Firma: GT) (cee)


Lesenswert?

Hoi Läubi

Merci für deine schnelle Antwort. Leider bringt das nichts. Ich habe 
zwar ein unerkanntes "Other PCI Bridge Device" im Gerätemanager, aber 
mit dem Programm welches sonst meine Karte erkennt, sehe ich nichts. 
Auch ein erneutes scannen hilft nicht. Ich habe ebenfalls probiert den 
PCI Bus mit "devcon.exe" neu zu scannen. aber auch das bringt nichts.

Bin weiterhin an allen Lösungsvorschlägen interessiert. Der bisher beste 
ist das schreiben eines eigenen BIOS ;-)

von Peter (Gast)


Lesenswert?

PCI Express ist doch hotplug. Kannst du nicht erst die Karte "anmelden" 
wenn das laden abgeschlossen ist? Oder zur not noch einmal die Karte 
abmelden und wieder neu anmelden.

von Cee D. (Firma: GT) (cee)


Lesenswert?

Ich denke das Problem ist Folgendes:
Die Leiterplatte an sich ist ja wohl kein PCI Express Device obschon sie 
natürlich den Direktstecker dazu beinhaltet. Das PCIe Device macht das 
FPGA aus. Das heisst, wenn das FPGA nicht geladen ist, Gibt es kein PCIe 
Gerät, welches Windows später durch erneutes scannen finden könnte. In 
wie weit unsere PCIe Karte hotplug fähig ist kann ich nicht mehr zu 100% 
sagen, aber ich glaube irgendwo gelesen zu haben, dass dies in meinem 
Fall nicht geht. Ja ich weiss ist ziemlich schwammig, aber genaueres 
weiss ich dazu im Moment nicht, muss die Altera Specs noch mal 
durchgehen. Fakt ist jedenfalls, dass ich es weder mit dem Hardware 
Manager noch mit devcon unter Windows sehen kann, wenn ich den PC nicht 
in der zwischnzeit neu boote.

Aber wie gesagt, bringt alle Vorschläge die euch einfallen. Ich probiere 
sie gerne alle aus, bis der richtige darunter ist...

Danke und Gruss
cee

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Cee Dee schrieb:
> Hoi Läubi
>
> Merci für deine schnelle Antwort. Leider bringt das nichts. Ich habe
> zwar ein unerkanntes "Other PCI Bridge Device" im Gerätemanager, aber
Brauchst du keinen Treiber für deine Karte?

> mit dem Programm welches sonst meine Karte erkennt, sehe ich nichts.
Lösch mal das "Other PCI Bridge Device", und dann einmal aktualisieren 
(also PnP HW Erkennung starten)

> Bin weiterhin an allen Lösungsvorschlägen interessiert. Der bisher beste
> ist das schreiben eines eigenen BIOS ;-)
Das beste wäre wohl wenn du entweder:
- Eine schnellere Konfiguration ermöglichst (manche FPGAs können auch 
von parrallen Medien gebootet werden)
- "irgenwie" eine Art busy signalisierst (kenn mich nicht aus ob sowas 
auf dem Bus möglich ist)
- eine Art "mini Image" auf den FPGA brennst das die Karte erkannt wird, 
und dann den rest nachlädst. (keine Ahnung wie komplex sowas ist...)
- Du verpackst das Baord und sendest es mir zu und bist alle Sorgen los 
weil keine Karte-> kein Problem :P

von peterguy (Gast)


Lesenswert?

Wenn ich mich recht entsinne muss die PCI Karte 500 oder 1000ms nach 
POWER ON auf den PCI Bus reagieren. Ich habe vor eine paar Jahren eine 
PCI Karte entwickelt, die ebenfalls mit einem Altera FPGA (Cyclone II) 
bestückt war.
Wir hatten damals auch Schwierigkeiten, den Code rechtzeitig in den FPGA 
zu laden.

Es wurde sogar ein spezielles Flashdevice eingesetzt, das wahrscheinlich 
von Natur aus schon schneller ist als ein µC. Ich vermute daß du mit 
deinem µC also eher nicht glücklich wirst.

Der Flash-Chip heißt EPCS16, vielleicht kannst du ja so einen noch auf 
deinem Board unterbringen.

von Cee D. (Firma: GT) (cee)


Lesenswert?

@Läubi:
Den Windows-Teil schreibe nicht ich. Aber schlussendlich, soll es 
möglich sein, mit einem GUI über PCIe mit der Karte zu kommunizieren. Ob 
mit Treiber oder direkte Ansteuerung entscheide nicht ich.

Den zweiten Tipp habe ich bereits getestet. Das "Other PCI Bridge 
Device" ist gar nicht meine Karte. Denn das habe ich auch, wenn meine 
Karte nicht im PC steckt.

Das laden des FPGAs erfolgt bereits parallel über 8 Datenleitungen. 
Leider hat sich ein Fehler ins Design eingeschlichen, weshalb ich nur 
NICHT komprimierte Files übertragen kann. Deshalb ist es auch 3.2MB 
gross. Ich denke sonst hätte ich das Prolem nicht, da die Datei auf rund 
die Hälfte geschrumpft werden könnte. Hardware ändern ist nicht möglich 
(resp. erst im Redesign, aber solange will ich nicht warten!).

Busy Signal weiss ich eben auch nicht, ob es sowas gibt, und wie ich das 
ansprechen und darauf reagieren könnte.

Das mit dem Mini-Image geht glaube ich vom FPGA her nicht, ist aber 
bestimmt noch weiter zu bedenken falls es sonst nichts gibt.

Ich habe zwei Prototypen-Boards für den richtigen Preis kannste wohl 
eins haben :-)

von Knochen K. (Firma: Riesenhoster in EU) (knochenkotzer)


Lesenswert?

Kannst du das Bios nicht lange genug festhalten? Z.B. mit extended 
memory test oder so?

von Cee D. (Firma: GT) (cee)


Lesenswert?

@Knochen Kotzer
habe schon bisschen rumgespielt im BIOS, aber keine Einstellung hat 
bisher das gewollte bewirkt.

Als nächstes werde ich die PCIe von Auto-Detect auf Enabled setzen. 
Vielleicht kann ich die Karte dann unter Windows scannen.

von Knochen K. (Firma: Riesenhoster in EU) (knochenkotzer)


Lesenswert?

Hmmm, einen Versuch ist es wert, ich kann dir zur not ne kaputte IDE 
Platte geben bei der die meißten boards ein paar Sekunden brauchen bis 
sie raffen das da nix kommt, in der Zeit ist sicher alles an Daten im 
FPGA. Wäre aber nur ne Lösung für eine Kotzkrücke :-)

von Cee D. (Firma: GT) (cee)


Lesenswert?

@peterguy
WOW 500ms wären ja arg kurz. Weisst du noch wie gross dein FPGA Prog 
damals war? Hattest du denn sogar mit dem EPCS16 noch Schwierigkeiten in 
der Zeit zu bleiben? Dann wird es mit dem uC wohl schon fast unmöglic, 
ausser ich lasse dem PCI Scan eben auf irgendeine Art noch mehr Zeit.

Im Redesign werde ich es mir auf jeden Fall überlegen den EPCS16 
einzusetzen, aber momentan geht es nicht.

Danke jedenfalls für alle Tipps bisher.

von Cee D. (Firma: GT) (cee)


Lesenswert?

LOL @  Knochen Kotzer

Ja das müsste hinhauen. Ausser der PCI kommt vor dem IDE dran...

von Knochen K. (Firma: Riesenhoster in EU) (knochenkotzer)


Lesenswert?

Probieren geht über studieren......
Sollte nur eine Möglichkeit werden.
Versuch es oder lass es...

von Knochen K. (Firma: Riesenhoster in EU) (knochenkotzer)


Lesenswert?

BTW: warum verlängerst du nicht die Erfassungszeiten im Bios?
OK, schon klar da braucht man ein wenig Kenntnis aber soooo schwer ist 
das auch nicht.

PS: Aktiviere mal die Funktion das er von Lan booten soll, kommt zwar 
nach der PCI Abfrage aber was solls?
Es braucht halt nen haufen Zeit, also genau das was du willst.

von Cee D. (Firma: GT) (cee)


Lesenswert?

BIOS ist bisher nicht mein Spezialgebiet. Aber ich bin offen für neues. 
Aber dann wäre ich wieder beim schreiben meines eigenen BIOS. Oder 
kennst du einen Disassembler für Award-BIOS?

von Knochen K. (Firma: Riesenhoster in EU) (knochenkotzer)


Lesenswert?

Uiuiui, da muss ich ein wenig suchen,
das mache ich aber jetzt nicht mehr, eher morgen nach dem Aufstehen.

von Cee D. (Firma: GT) (cee)


Lesenswert?

Ja das reicht gut... Aber schon jetzt mal danke!

von Knochen K. (Firma: Riesenhoster in EU) (knochenkotzer)


Lesenswert?

Nix zu danken, für nen Workaholic ist das nur eine Herausforderung.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Momment soll das nur für einen PC sein oder soll das später auch mal was 
solides werden?

> Aber dann wäre ich wieder beim schreiben meines eigenen BIOS.
> Oder kennst du einen Disassembler für Award-BIOS?
Das würd ich ehrlich nicht machen im zweifel machste dir das Board 
kaputt.

Was für ein Board ist das denn? Schau mal ob es sowas wie "Fast Boot" 
oder Memmory Test o.ä. gibt.

Und probier mal aus ob es reicht am Anfang einfach ins Bios zu gehen 
oder ggf mal wenn das Bios erscheint die "PAUSE" Taste drücken (mit 
Enter gehts dann weiter)

> Hmmm, einen Versuch ist es wert, ich kann dir zur not ne kaputte IDE
> Platte geben bei der die meißten boards ein paar Sekunden brauchen bis
Mit nem AVR geht das aber schöner ;)
Maximale Verzögerungszeit laut ATA Spezifikation: 31 Sekunden.
1
If Drive 1 is present, then Drive 0 shall wait for up to 31 seconds from power-on reset,
2
 software reset or RESET- for Drive 1 to assert PDIAG-.
Wenn du also eh ein IDE Laufwerk dranhängen hast reicht ggf. schon ein 
starker Pulldown nach GND, du solltest dann nur im BIOS wenns geklappt 
hat das nicht vorhandene Laufwerk von AUTO auf NONE ändern und schauen 
ob es dann immer noch läuft.

Die Widerstandsvariante hat aber halt den Nachteil das dann das Bios 
imschlimstenfall 31 Sekunden wartet weiß nicht ob dir das zu lange ist?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ach mir fällt gerade ein, du hast ja eh schon nen uC dabei! Dann mach 
das doch so das er auf einem Pin GND ausgibt solange er beschäftig mit 
Konfigurieren ist, dann einen Pulllup dran, eine IDE Platte als Master 
(oder CD/DVD) und an den PDIAG- Pin da wo der Slave eigentlich rankommt 
dann dieser Pin.

Zu Anfang auf GND setzen (ich glaub 1 ms nach dem IDE reset hast du 
Zeit) und wenn du fertig bist auf High/Eingang.

von Cee D. (Firma: GT) (cee)


Lesenswert?

Die Karte ist bereits jetzt im Zielsystem eingebaut. Also ich mache alle 
Tests in der Umgebung, die auch später verwendet werden soll. Und so wie 
du meinst, wird das wohl nichts solides...

Das mit dem schreiben des eigenen BIOS ist nicht ganz ernst. Ich will ja 
nicht die grossen konkurieren. :-) Aber vielleicht lässt sich ja mit 
AWDBedit was bewerkstelligen.

Das mit dem verzögern des IDE ist ja gut und recht. Aber ich vermute 
stark, dass der PCI zuerst gescannt wird. Die CPU ist nämlich ebenfalls 
über PCIe auf dem Mainboard eingesteckt. Ist irgend so ein Industrie PC. 
Nur das CD-Rom Laufwerk ist am IDE angeschlossen. die HDDs sind über 
SATA angeschlossen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Naja deshalb würd ich mal schauen obs daran liegt, dass das Bios die 
Karte "ausperrt" oder ob nur Windows die Karte Ignoriert.
Deshalb die Frage ob es klappt wenn du vorher etwas Zeit vertrödelst (ob 
im Bios oder mittels "Pause".

von Cee D. (Firma: GT) (cee)


Lesenswert?

Wenn die Pause vor oder während dem Scan erfolgt, dann wird es gehen. 
Denn nach einem Restart wird die Karte ja ebenfalls erkannt.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Welchem Scan? vom Bios oder von Windows, das ist ja die Frage! Weil 
(theoretisch) sollte PCIe Hotplugfähig sein und dürfte demnach auch 
später hinzukommen.

Probier doch mal aus das du das Win Bootmenü anzeigen läßt mit Timeout 
10sek.

Wie erkennt dein uC den ob es sich um einen Warm oder Kaltstart handelt?
Vieleicht kannst du dich ja in die Resetleitung einschleusen, solange 
der FPGA noch nicht fertig konfiguriert ist hält der AVR den Resetpin 
über einen Optokoppler geschlossen bis er fertig ist, das Netzteil 
dürfte davon unbeeindruckt bleiben nur der User darf sich nicht wundern 
das nach dem einschalten es 3sek dauert bsi das BIOS kommt.

von Cee D. (Firma: GT) (cee)


Lesenswert?

Die PCI Slots an denen sich kein PCI(e) Gerät befindet werden doch 
"disabled", was es Windows unmöglich macht ein später hinzugekommenes 
Gerät zu finden. Und da das FPGA noch nicht programmiert ist, ist auch 
kein PCIe Gerät am Bus.
Das Bootmenu zu verzögern bringt nichts, da ja dann die Slots schon 
ausgeschalten sind. (Habe ich probiert)

Dem uC (kein AVR sondern ST10) ist es egal, ob der PC rebootet wird, 
oder ganz abgeschalten wird. Solange der uC gespiesen ist (über PCIe) 
läuft der. bei einem Reset (oder Strom aus - ein) wird als erstes das 
FPGA Programm geladen. Sobald die Karte keinen Strom mehr hat, muss das 
FPGA natürlich neu programmiert werden.

Das mit dem Resetpin war auch eine meiner ersten Ideen, beinhaltet aber 
das draufbasteln zusätzlicher Hardware was natürlich nicht sehr schön 
ist, wenn's aber nicht anders geht sicherliche eine mögliche Lösung.

von Gast (Gast)


Lesenswert?

Den Resetpin könnte man doch sogar relativ elegant abgreifen.
Auf die Karte kommt eine Stiftleiste mit 4 Pins. Auf zwei davon kommt 
die Buchse vom originalen Schalter, auf die übrigen kommt eine 
"Verlängerung" mit zwei solchen Buchsen, die dann aufs Mainboard geht.

Das müsstest du nur vorher ausprobieren, es kann sein das du damit das 
BIOS komplett zurücksetzt.
Es gibt inzwischen recht viele PCs, bei denen man durch längeres 
Reset-Drücken diesen Reset auslöst. Das ist recht praktisch, wenn man 
was verstellt hat und die Kiste nicht mehr will, dann muss man nicht das 
Gehäuse öffnen und den Clear-CMOS Jumper suchen.

Eine Idee hätte ich noch: Es gab (gibt?) doch immer im BIOS die Option 
"Int 19 Capture", wodurch die Karten ihr eigenes Menü anbieten konnten.
Ich weiß nur nicht genau, wann und ob dieser Interrupt aufgerufen wird.

Damit könntest du aber evtl. dein Problem lösen. Beim 1. Start wird in 
den FPGA ein Mini-Image reingeladen, was den Int 19 auslöst und eine 
"Bitte warte, Karte xyz lädt" einblendet. Du müsstest dir dann eine 
Anzeige basteln, die den PC 5 Sekunden "festhält", ohne das irgendwas 
auf dem Bus passiert.
In der Zeit räumst du den FPGA aus und lädst das richtige Image. Danach 
wird der PC vom Programm zurückgesetzt und die Karte sollte erkannt 
werden.

von Frank L. (florenzen)


Lesenswert?

Schon mal nachgeschaut was die "Hot plug presence detect"-Leitung im 
PCIe-Stecker so macht?
(Nein, ich weiß es auch nicht aber die ist mir "ins Gesicht gesprungen")

gruss
f

von Cee D. (Firma: GT) (cee)


Lesenswert?

Ich wusste auch nicht genau für was das ist und dachte das brauch ich 
bestimmt nicht. Will ja nicht, dass meine Karte währen dem Betrieb ein- 
ausgesteckt wird. Deshalb hab ich den auch nicht angeschlossen.

von peterguy (Gast)


Lesenswert?

>@peterguy
>WOW 500ms wären ja arg kurz. Weisst du noch wie gross dein FPGA Prog
>damals war? Hattest du denn sogar mit dem EPCS16 noch Schwierigkeiten in
>der Zeit zu bleiben? Dann wird es mit dem uC wohl schon fast unmöglic,
>ausser ich lasse dem PCI Scan eben auf irgendeine Art noch mehr Zeit.
>
>Im Redesign werde ich es mir auf jeden Fall überlegen den EPCS16
>einzusetzen, aber momentan geht es nicht.

Unser FPGA war ein Cyclone II EP2C70 mit roundabout 70.000 LEs.
Ich meine der war zum Schluss zu 80% voll, weswegen wir die Flashdaten 
gepackt auf den EPCS16 gespielt haben.
Leider war ein Kollege mit der FPGA Entwicklung vertraut, deswegen kann 
ich keine Detailinformationen liefern.
Es war auch eine Standard-PCI Karte (32bit/33MHz BUS), keine PCIe. Gut 
möglich daß da andere Werte gelten.
Ansonsten kann ich dir nur empfehlen, die PCI Spec zu lesen. Bekommst du 
unter www.pcisig.org, kostenpflichtige Anmeldung vorausgesetzt.Eine 
Anmeldung empfiehlt sich in jedem Fall (falls nicht bereits geschehen), 
denn nur so kommt ihr meines Wissens nach an eine eigene Vendor ID und 
damit die Genehmigung PCI Geräte zu Vertreiben!

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Frank Lorenzen schrieb:
> Schon mal nachgeschaut was die "Hot plug presence detect"-Leitung im
> PCIe-Stecker so macht?
> (Nein, ich weiß es auch nicht aber die ist mir "ins Gesicht gesprungen")

Wird mit Masse verbunden. Auf dem Mainboard ist da ein Pullup. Jetzt 
stellt sich die Frage ob Hotplug bei diesem Slot funktioniert (Steht 
zwar in der spec, wird aber bei Mainboards nicht unbedingt 
initialisiert)
Einen Versuch ists allemal Wert. Einfach nach dem Laden der FW mit Masse 
kurzschließen, Pinzette tuts auch. Ansonsten halt den Reset solange auf 
Masse halten bis die FW geladen ist. Ist aber uneleganter.

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.