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
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 ;-)
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.
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
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
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.
@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 :-)
Kannst du das Bios nicht lange genug festhalten? Z.B. mit extended memory test oder so?
@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.
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 :-)
@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.
LOL @ Knochen Kotzer Ja das müsste hinhauen. Ausser der PCI kommt vor dem IDE dran...
Probieren geht über studieren...... Sollte nur eine Möglichkeit werden. Versuch es oder lass es...
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.
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?
Uiuiui, da muss ich ein wenig suchen, das mache ich aber jetzt nicht mehr, eher morgen nach dem Aufstehen.
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?
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.
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.
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".
Wenn die Pause vor oder während dem Scan erfolgt, dann wird es gehen. Denn nach einem Restart wird die Karte ja ebenfalls erkannt.
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.
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.
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.
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
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.
>@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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.