Building a BR4-Appliance
mark
On Friday, October 18th 2007 I received two PCBs of our BRI Appliance with ADSP-BF537 soldered on (BGA). I was pleasantly surprised to see DHL at my doorstep as I was expecting it to be delivered the following Monday.
It took only 3 days for it to “travel” half way around the globe…
As a prototype the BR4 board was not size optimized but even thought it looks very nice (thanks to Li for a job well-done sourcing production). The PCBs were tested at the assembly house after the BGA chip was soldered, so I can be sure that the PCB and the BGA chip are okay.

Since, I already had all the remaining components purchased, I was ready to start the manual assembly process.
I have spent the weekend hand soldering the rest of the board, it took over 12 hours to get it fully assembled.

On Sunday afternoon, I decided to try it. At first I made sure that I did not have direct shorts between planes. Well, my power LED started emitting pleasurable blue light and I had not observed any smoke, which was very good start.
I must admit that I was actually expecting positive results given that, Li had already gotten that far with his board in Beijing, but you never know… ![]()
The next step (already accomplished by Li) was to connect my Igloo JTAG cable and try talking to the CPU and SPI flash. I had the jtagprog software already hacked to support our new board, and it was already tested by Li. As expected, I detected the CPU and saw the SPI flash, which was a very exciting moment.
A week earlier I already started working on u-boot to support this board. I based it on the ADI’s stamp with a few minor changes plus a few extra memory chips (as I am using 7E series which is capable of operating with CAS latency 2 at up to 145MHz). Since, our bus speed needs to derive from the core CPU speed of 500MHz, the fastest we are able to go is 125MHz (I can only divide 500MHz by an integer, but can not go above 133MHz).
It takes around 25-30 mins to load the initial u-Boot load to the SPI flash, jtagprog is not the fastest tool to communicate with SPI flashes but it’s free and it works. I prepared a cup of Expresso while waiting and to my pleasant surprise I got a u-boot prompt after rebooting the board. u-Boot working on the first attempt?!? Wow, this was really exciting.
icache_enable
U-Boot 1.1.6-svn556 (mark@astfin.org) (Oct 22 2007 - 11:41:01)CPU: ADSP BF537 Rev.: 0.2
Board: BR4-Appliance board
Clock: VCO: 500 MHz, Core: 500 MHz, System: 125 MHz
SDRAM: 64 MB
In: serial
Out: serial
Err: serial
NAND: 256 MiB
Net: DP83848 PHY
I2C: ready
Hit any key to stop autoboot: 0
br4> help
? - alias for ‘help’
autoscr - run script from memory
base - print or set address offset
bdinfo - print Board Info structure
boot - boot default, i.e., run ‘bootcmd’
bootd - boot default, i.e., run ‘bootcmd’
bootelf - Boot from an ELF image in memory
bootldr - boot ldr image from memory
bootm - boot application image from memory
bootp - boot image via network using BootP/TFTP protocol
bootvx - Boot vxWorks from an ELF image
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
date - get/set/reset date & time
dcache - enable or disable data cache
dhcp - invoke DHCP client to obtain IP/boot params
echo - echo args to console
eeprom - EEPROM sub-system
fsinfo - print information about filesystems
fsload - load binary file from a filesystem image
go - start application at address ‘addr’
help - print online help
icache - enable or disable instruction cache
iminfo - print header information for application image
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loady - load binary file over serial line (ymodem mode)
loop - infinite loop on address range
ls - list files in a directory (default /)
md - memory display
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
nand - NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
rarpboot- boot image via network using RARP/TFTP protocol
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv - set environment variables
sleep - delay execution for some time
tftpboot- boot image via network using TFTP protocol
version - print monitor version
br4>
At this point I must give credit to other contributors and mentors:
Dimitar and Penyo for their major contribution into the schematic and for helping review the final design.
To Li for designing the PCB with help from Bogdan Lajosz and to both of them being patient and for making all the necessary changes to make us all happy.
I also need to thank David for creating a concept of Open Telephony Hardware and for providing Fourfin board for initial testing (and Fourfin guys for producing it).
Cologne guys for their great support and for providing samples at no cost.
Thank you ALL.
This was very productive weekend, bringing your own board to life and seeing it work…extremely satisfying experience. That night I slept like a baby
Stay tuned for a writeup on uClinux experience with BR4 …
yes, it worked immediately as well
Mark
BR4-Appliance Documentation rev 1.1
Thanks to Dimitar for proofing this post

November 26th, 2007 at 4:08 pm
Nicely drawn schematics. I was wondering what the little analog circuit formed by Q8/Q9 does?
Cheers,
David
November 26th, 2007 at 6:39 pm
David,
Please see page 161 of the following document DataSheet
Cheers,
Mark
November 26th, 2007 at 8:35 pm
In a couple of days, I will post the revised version of the schematic. Few minor changes, plus one important correction.
Cheers,
Mark
October 30th, 2008 at 3:38 am
i want to know how can i update my image kernel from uclinux
my kernel image is stored in flash nand
nandwrite in uclinux does not skip bad image i think
thanks
October 31st, 2008 at 6:03 am
Mehdi,
Astfin2’s GUI (trunk) allows loading new kernel images via web interfaces. You do not need to even go to console. You can also perform a factory default or keep your configurations of you wish.
Mark