19 lat temu pracowałem w pewnym projekcie u azjatyckiego giganta branży elektroniki konsumenckiej.
Układ typu SoC w naszym urządzeniu startował z pamięci Flash typu NOR, za to za faktyczną pamięć masową robiła duża kość typu NAND. Rozwiązanie nawet do dziś dość typowe.
Firma stwierdziła, że ma taki chip Flash NAND, z którego można wystartować bootloader, potem system i aplikację. Dzisiaj układy typu SoC mają mechanizmy pozwalające startować z chipów NAND, głównie z szyny SPI a także z kart SD, wtedy jednak nasz układ miał zwykłe szyny adresowe i danych i wołał odpowiedni, zdefiniowany w dokumentacji adres. Pamięć NOR była adresowana bezpośrednio, czyli cyk: adres, cyk - sygnał Chip Select i cyk - sygnał Output Enable, a na szynie danych pojawiało się słowo spod tego adresu. Pamięć NAND za to ma takie małe okienko, - zakres adresów do których komendą wczytuje się sektor z pamięci NAND i dopiero można go skopiować do RAM-u. Ale ale - ten nowy chip NAND miał dwa takie okienka, jedno po drugim, w sumie 2KB i po zwolnieniu sygnału resetu lądowały w nich dwa pierwsze sektory z NANDa. Hura - dało się wystartować, a ja miałem napisać coś co zwie się bootstrapem albo dzisiaj częściej First Stage Boot Loader (przy czym tych FSBLów obecnie bywa nawet po kilka, uruchamianych jeden po drugim - vide UEFI). To zadanie programistyczne to też były niezłe jaja, bo ile można upchnąć w 2KB? Ale nie o tym tutaj.
Debugerem przez jtag próbowałem załadować cokolwiek do tego flasha ale nie szło, odczytać, nawet śmieci, też.
Pan Szef kupił jakiś tydzień wcześniej elegancki analizator stanów logicznych od firmy Agilent, kosztował moje ponadroczne wynagrodzenie brutto, musiał być dobry.
Po wlutowaniu drucików w nóżki flasha okazało się że sygnał Chip Select nigdy się nie pojawia. No ale chip działa, startuje, ale tylko przez debuger.
Wydębić schemat od Pana Azjaty z działu HW nie szło. Po co komuś od klikania w klawiaturę schemat? Toż to tajemnica. Płytka wielowarstwowa, bardzo ciasny montaż, szukaj wiatru w polu. Po miesiącu tak zwanych eskalacji, włączaniu się szefów z różnych krajów Pan od HW zmiękł i wysłał schemat. Opisany krzaczkami ale czytelny.
Był tam pewien dekoder adresu na dyskretnych bramkach logicznych, żeby z tego adresu który chce procesor zrobić sygnał Chip Select do flasha. I tam była pomyłka, jakaś bramka NOR powinna być NAND, OR - AND czy coś podobnego.
Posłałem Panu Azjacie od HW, ale odpisał jego szef:
"Proszę dostosować oprogramowanie do konfiguracji sprzętowej".
No i kolejny miesiąc czczych wymian maili. Azjatycki protokół "zachowywania twarzy" odpalony i nic przez miesiąc nie drgnęło. Ja w międzyczasie rozejrzałem się po zakładzie i w sąsiednim dziale ktoś miał szufladę takich właśnie bramek. No to zamieniłem i zadziałało. To również nie przekonało Pana Azjaty i jego Szefa. Twarz trzeba zachować.
W końcu rozegrało się coś za kulisami i bez słowa nadeszła przesyłka z drugiego końca świata z poprawionymi płytami.
Ja już na szczęście kończyłem implementację tego bootstrapa na swojej porychowanej płycie. Koledzy zmodyfikowali również resztę płyt.
Pewnie nie jeden z Was słyszał od koleżanek z HRu jak to trzeba się cieszyć różnorodnością kulturową. Otóż nie.
A to nie byli jeszcze Hindusi.
