Forum: Digitale Signalverarbeitung / DSP / Machine Learning Blackfin 537 mit Kamera (SRV-1): Mit oder ohne Linux?


von Phil B. (dspcoder)


Lesenswert?

Hi,
habe zwei Fragen zu dem Blackfin:
1.:
 Habe einen ADSP-BF537BBCZ-5B, der nach Spezifikation 500MHz schafft. 
Standardmäßig ist er mit 485 MHz (22.1 MHz Quartz mal 22) getaktet. Ist 
irgendwas dagegen einzuwenden, ihn mit 509 MHz oder evtl. noch höher zu 
takten? Hat jemand damit Erfahrung? Brauche ich dann evtl. einen 
passiven Kühler?

2.:
Nun kann man ja auf den Blackfin ucLinux draufspielen. Vorteil wäre 
natürlich man hätte mehrere Threads und Prozesse. Aber wie ist es mit 
dem Geschwindigkeitsverlust hierdurch? Wie lange dauert ein Bootvorgang?
(zum SRV-1 Kameramodul:) Hat jemand Erfahrung gemacht mit der 
Hardwareanbindung? Kann man problemlos die Kamerabilder auslesen oder 
das WLAN-Modul verwenden?

Bin dankbar für jede Einschätzung und Hilfe ;)
phil

von Strubi (Gast)


Lesenswert?

Hi Phil,

zu 1.: Habe des oefteren schon Blackfins uebertaktet und nichts an 
uebermaessiger Waermeentwicklung festgestellt. Aber geht halt alles auf 
eigenes Risiko, in der Serie wuerde ich das eher nicht machen.

2.: Eine gewisse Geschwindigkeitseinbusse ist natuerlich da, v.a. geht 
einiges an Echtzeitfaehigkeit eines DSPs verloren. Das SDRAM-Cache macht 
aber einiges wieder wett. Wuerde mal sagen, 5-8% gehn fuers System 
drauf, das ist nicht so wild.
Bootvorgang kann man auf wenige Sekunden runterdruecken, bei voller 
Komprimierung sind's geschaetzt 10 sekunden.
Fuer den SRV1 hab ich mal vor ner Weile uClinux angepasst, aber seither 
nix mehr dran gemacht, ist also noch ne aeltere Version. Habe auch nen 
andern Sensor angeschlossen. Link dazu findet sich wo auf dem 
Surveyor-Forum.
Nachteil am WLAN: es geht ueber die serielle. Es gibt nur 2 Kanaele fuer 
die beiden UARTs, die via TCP nur mit max 1 MBit gefahren werden 
koennen. UDP geht auch mit mehr, allerdings hatte ich da unter uClinux 
Probleme.
Frag aber sonst mal bei Surveyor nach, wann sie die Boards mit dem BF527 
haben, dann kannst Du ueber USB mit einem handelsueblichen WLAN-Stick 
funken.
Getestet habe ich Ralink und Realtek USB-Chipsaetze (rt73usb, rtl8187), 
diverse Sticks mit etwas Leistung gibt es da bei www.dealextreme.com
Die Software-Entwicklung ist leider mit dem seriellen WLAN schwierig 
ohne JTAG, man kann allerdings mit rz/sz Programme hochladen. Dauert 
halt lange.

Sonst ist der SRV1 ein unschlagbares Teil zum Anfangen. Hoffe, das hilft 
dir erst mal weiter.

Gruss,

- Strubi

von Phil B. (dspcoder)


Lesenswert?

Hi,
ja danke das hilft schon weiter. Ich denke dann werde ich wohl doch auf 
das Linux verzichten und ihn direkt programmieren. 10 Sekunden sind auch 
noch zu lang und 5-8% Verlust ... naja

Wie ist es mit dem Übertakten? Wie viel hast du denn übertaktet? Kann 
man sagen 10-15% sind problemlos möglich?

von Strubi (Gast)


Lesenswert?

Ja, 15% waren das eher locker..ich hatte einen, der auf 400 spezifiziert 
ist auf 500 laufen lassen. War eher ein Versehen, hab es nach einigen 
Monaten gemerkt (aber nicht, weil der Chip warm wurde). Laeuft heute 
noch :-)
Vermutlich ist die Burn-In-Test-Prozedur dieselbe wie bei den Intels, 
man testet mit 20% Uebertakt, und skaliert's dann auf den 
Paranoia-Faktor runter.
Du kriegst den Bootvorgang auch weiter verkuerzt, wenn Du auf 
Kompression verzichtest und viele Treiber als Module nachlaedst. Ich 
glaube, der Rekord liegt bei 2s. Schau mal unter 
docs.blackfin.uclinux.org zum Thema Bootdelay, etc.
Aus Gruenden der Einfachheit, und da man sich nicht mit Networking 
rumschlagen muss, finde ich den 'standalone'-Mode beim SRV1 allerdings 
auch praktischer.

Gruesse,

- Strubi

von Phil B. (dspcoder)


Lesenswert?

Ok cool, werds mal schritt für schritt erhöhen und schauen ob er warm 
wird.

Wenn ich den Bfin jetzt direkt flashe, Mache ich dass ja indem ich mit 
der toolchain indem erst mit "bfin-elf-gcc" und "bfin-elf-ld" ein .bin 
file im ELF Format erstellt wird und dieses dann mit "bfin-eld-ldr" zu 
einem LDR file, das man flashen kann.
Das funktioniert soweit alles super, aber ich möchte nun gerne C++ statt 
C code schreiben.
Habe daher gcc durch g++ ersetzt (es gibt ja auch "bfin-elf-g++") und 
das linking auch mit dem g++ gemacht. Bis dahin alles super. Nur 
beschwert sich der LDR mit einem "personality" fehler.
1
bfin-elf-g++ -I../include -g -O2 -Wall -fomit-frame-pointer -fno-builtin-printf -fno-builtin-puts -fno-builtin-strchr [...]
2
bfin-elf-ld -Ur -T srv1.x -Map srv1.map -O binary -o srv1.bin r8x8dct.o math.o setjmp.o motionvect.o init.o main.o srv.o uart.o camera.o jpeg.o i2c.o stm_m25p32.o float.o [...]
3
bfin-elf-ldr -f -T BF537 -c -v srv1.ldr --initcode init.o srv1.bin
4
Creating LDR srv1.ldr ...
5
 Adding DXE 'srv1.bin' ... [initcode 208] [jump block to 0x00000000] OK!
6
Done!
7
c:\Program Files\Analog Devices\GNU Toolchain\2008R1.5\elf\bin\bfin-elf-ldr.exe: Undefined symbol '___gxx_personality_v0' in ELF!

Durch das "force-flag" kommt trotzdem eine LDR raus, die is aber nicht 
lauffähig.

von Strubi (Gast)


Lesenswert?

Hi Phil,

Sorry fuer die spaete Antwort. Inzwischen hast du's wohl schon selbst 
gefunden, aber sonst probier doch mal anstatt mit 'ld' gleich mit 'g++' 
zu linken und die Linker-Script-Optionen mit der -W Option an den ld 
weiterzugeben. Siehe auch manpages.
Standalone habe ich mit C++ nichts gemacht bisher, eventuell sind da 
crt0.asm-Anpassungen noetig, da C++ doch etwas mehr an Ballast 
mitbringt.

Gruesse,

- Strubi

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.