Mamy system oparty na karcie Atom Z510/Intel SCH US15W Q7 (z systemem Debian Linux). Musimy przesłać bloki danych z urządzenia na niskim poziomie. Pin Count Bus. O ile wiem, ten mikroukład nie zapewnia urządzeń DMA, co oznacza, że procesor musi odczytywać dane po bajcie w pętli oprogramowania. (Sterownik urządzenia faktycznie wykonuje to za pomocą instrukcji "rep insb" x86, więc pętla jest faktycznie zaimplementowana przez CPU, jeśli dobrze rozumiem.)Rejestry konfiguracyjne dla magistrali LPC w Poulsbo System Controller Hub (US15W)
Jest to daleki od optymalnego, ale powinno być możliwe uzyskanie szybkości transferu 14 Mb/s. Zamiast tego możemy ledwo zarządzać 4 Mb/s przy transakcjach na magistrali nie bliżej niż 2 us od siebie, nawet jeśli każdy odczyt do urządzenia slave jest wykonywany w 560ns. Nie wierzę, że winę ponosi inny ruch w autobusie, ale nadal prowadzę dochodzenie.
Moje pytanie brzmi:
Czy ktoś wie, czy są jakieś rejestry konfiguracyjne na SCH które mogłyby wpłynąć na taktowanie magistrali LPC?
Nie mogę znaleźć żadnych przydatnych informacji na temat urządzenia na stronie internetowej Intela, ani też nie zauważyłem niczego w kodzie jądra Linuksa, który wydaje się manipulować przy takich rejestrach (ale jestem noob, gdy dojdzie do Linuksa Kernel rzeczy.)
Nie jestem ekspertem x86, więc dobrze byłoby wiedzieć o innych czynnikach, które mogą wejść w grę lub o innych "historiach wojennych" związanych z tym urządzeniem.
Edytuj: Znalazłem datasheet. Nie widziałem w tym niczego, co wyjaśniałoby to zachowanie, ale badam możliwość mapowania naszego urządzenia jako oprogramowania układowego, ponieważ cykle magistrali oprogramowania układowego nie mają takich samych opóźnień.
Może być również konieczne rozważenie ograniczeń sprzętowych urządzenia podrzędnego, np. Szybkości dostarczania danych podczas odpytywania bajt po bajcie. Może wystąpić pewne opóźnienie związane z "szukaniem". Ponieważ NIE wykonujemy żadnych operacji wejścia/wyjścia, to "opóźnienie wyszukiwania" zostaje dodane do każdego przeczytanego bajtu. [** Sekcja 12.2 specyfikacji interfejsu LPC firmy Intel **] (http://www.intel.com/design/chipsets/industry/25128901.pdf#page=53&zoom=auto.0,528) zawiera typowe profile wydajności we/wy różnych urządzeń peryferyjnych na magistrali LPC. Czy możesz podzielić się szczegółami urządzenia peryferyjnego, z którym komunikujesz się za pośrednictwem szyny LPC? ... – TheCodeArtist
Urządzenie to Spartan 3 FPGA działające jako mostek dla układu kontrolera ARCNET. Sprawdziliśmy cykl odczytu na analizatorze logicznym, a oprogramowanie układowe wstrzykuje jedno "krótkie oczekiwanie" podczas synchronizacji części cyklu - przedłużając cykl o jeden zegar - 40us w tym przypadku. Cały cykl odbywa się w 14 okresach zegarowych - 560us. Nic FPGA nie może zrobić, aby utrzymać następny cykl. – sheddenizen