BeagleBoard Zippy

Hardware
The BeagleBuddy Zippy Ethernet Combo Board is an expansion board for the BeagleBoard that adds the following:
 * Battery Backed RTC
 * Second MMC slot
 * 10BaseT Ethernet
 * Second RS-232
 * +5V level I2C
 * AT24 EEPROM

Software

 * patches in oe git
 * Demo/Test Files
 * [[media:MLO-zippy.ift|MLO]] (save as MLO)
 * [[media:u-boot-zippy.bin|u-boot.bin]] (save as u-boot.bin)
 * [[media:uImage-zippy.bin|uImage]] (save as uImage)


 * place these files on your formated SD card per the instuctions at the LinuxBootDiskFormat page
 * boot your BeagleBoard while holding down the "User" button.

System boot
Texas Instruments X-Loader 1.4.2 (Sep 9 2009 - 09:20:15) Reading boot sector Loading u-boot.bin from mmc

U-Boot 2009.06-rc2 (Sep 09 2009 - 13:12:40)

OMAP3530-GP ES3.0, CPU-OPP2 L3-165MHz OMAP3 Beagle board + LPDDR/NAND DRAM: 256 MB NAND:  256 MiB
 * Warning - bad CRC or NAND, using default environment

In:   serial Out:  serial Err:  serial Board revision C Die ID #197a0003000000000403230911004012 Hit any key to stop autoboot: 0 mmc1 is available reading boot.scr

reading uImage
 * Unable to read "boot.scr" from mmc 0:1 **

2994264 bytes read Booting from mmc ... Image Name:  Angstrom/2.6.29/beagleboard Image Type:  ARM Linux Kernel Image (uncompressed) Data Size:   2994200 Bytes =  2.9 MB   Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK  Loading Kernel Image ... OK OK
 * 1) Booting kernel from Legacy Image at 82000000 ...

Starting kernel ...

Uncompressing Linux................................................................................................................................................................................... [   0.000000] Linux version 2.6.29-omap1 (dave@linuxdev) (gcc version 4.3.3 (GCC) ) #6 PREEMPT Thu Sep 17 10:11:54 CDT 2009 [   0.000000] CPU: ARMv7 Processor [411fc083] revision 3 (ARMv7), cr=10c5387f [   0.000000] CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache [   0.000000] Machine: OMAP3 Beagle Board [   0.000000] Memory policy: ECC disabled, Data cache writeback [   0.000000] OMAP3430 ES3.0 [   0.000000] SRAM: Mapped pa 0x40200000 to va 0xd7000000 size: 0x100000 [   0.000000] Reserving 12582912 bytes SDRAM for VRAM [   0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 65024 [   0.000000] Kernel command line: console=ttyS2,115200n8 vram=12M omapfb.mode=dvi:1024x768MR-16@60 omapfb.debug=y omapdss.def_disp=dvi root=/dev/mmcblk0p2 rw rootfstype=ext3 rootwait [   0.000000] Clocking rate (Crystal/DPLL/ARM core): 26.0/332/500 MHz [   0.000000] GPMC revision 5.0 [   0.000000] IRQ: Found an INTC at 0xd8200000 (revision 4.0) with 96 interrupts [   0.000000] Total of 96 interrupts on 1 active controller [   0.000000] OMAP34xx GPIO hardware version 2.5 [   0.000000] PID hash table entries: 1024 (order: 10, 4096 bytes) [   0.000000] OMAP clockevent source: GPTIMER12 at 32768 Hz [    0.000000] Console: colour dummy device 80x30 [   0.000000] Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) [   0.000000] Inode-cache hash table entries: 16384 (order: 4, 65536 bytes) [   0.000000] Memory: 128MB 128MB = 256MB total [   0.000000] Memory: 240896KB available (5632K code, 575K data, 204K init) [   0.000000] Calibrating delay loop... 486.31 BogoMIPS (lpj=1900544) [   0.000000] Mount-cache hash table entries: 512 [   0.000000] CPU: Testing write buffer coherency: ok [    0.000000] net_namespace: 1036 bytes [   0.000000] regulator: core version 0.5 [   0.000000] NET: Registered protocol family 16 [   0.000000] Found NAND on CS0 [   0.000000] Registering NAND on CS0 [  19.307373] OMAP DMA hardware revision 4.0 [  19.353057] bio: create slab  at 0 [  19.411468] OMAP DSS rev 2.0 [  19.411590] OMAP DISPC rev 3.0 [  19.411590] OMAP VENC rev 2 [  19.411773] OMAP DSI rev 1.0 [  19.414916] i2c_omap i2c_omap.1: bus 1 rev3.12 at 2600 kHz [  19.418914] twl4030: PIH (irq 7) chaining IRQs 368..375 [  19.418945] twl4030: power (irq 373) chaining IRQs 376..383 [  19.419586] twl4030: gpio (irq 368) chaining IRQs 384..401 [  19.422668] regulator: VMMC1: 1850 <--> 3150 mV normal standby [  19.423645] regulator: VDAC: 1800 mV normal standby [  19.424560] regulator: VUSB1V5: 1500 <--> 0 mV normal standby [  19.425506] regulator: VUSB1V8: 1800 <--> 0 mV normal standby [  19.426422] regulator: VUSB3V1: 3100 <--> 0 mV normal standby [  19.427398] regulator: VPLL2: 1800 mV normal standby [  19.428375] regulator: VMMC2: 2800 <--> 3150 mV normal standby [  19.429321] regulator: VSIM: 1800 <--> 3000 mV normal standby [  19.441925] i2c_omap i2c_omap.2: bus 2 rev3.12 at 10 kHz [  19.457122] i2c_omap i2c_omap.3: bus 3 rev3.12 at 100 kHz [  19.459289] SCSI subsystem initialized [  19.462982] twl4030_usb twl4030_usb: Initialized TWL4030 USB module [  19.464752] usbcore: registered new interface driver usbfs [  19.465393] usbcore: registered new interface driver hub [  19.465850] usbcore: registered new device driver usb [  19.469146] Bluetooth: Core ver 2.14 [  19.469696] NET: Registered protocol family 31 [  19.469726] Bluetooth: HCI device and connection manager initialized [  19.469757] Bluetooth: HCI socket layer initialized [  19.470520] cfg80211: Using static regulatory domain info [  19.470520] cfg80211: Regulatory domain: US [   19.470550]  (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp) [  19.470581]  (2402000 KHz - 2472000 KHz @ 40000 KHz), (600 mBi, 2700 mBm) [  19.470581]  (5170000 KHz - 5190000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) [  19.470611]  (5190000 KHz - 5210000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) [  19.470642]  (5210000 KHz - 5230000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) [  19.470642]  (5230000 KHz - 5330000 KHz @ 40000 KHz), (600 mBi, 2300 mBm) [  19.470672]  (5735000 KHz - 5835000 KHz @ 40000 KHz), (600 mBi, 3000 mBm) [  19.470703] cfg80211: Calling CRDA for country: US [   19.474670] musb_hdrc: version 6.0, musb-dma, otg (peripheral+host), debug=0 [  19.477416] musb_hdrc: USB OTG mode controller at d80ab000 using DMA, IRQ 92 [  19.478698] NET: Registered protocol family 2 [  19.478973] IP route cache hash table entries: 2048 (order: 1, 8192 bytes) [  19.479614] TCP established hash table entries: 8192 (order: 4, 65536 bytes) [  19.479888] TCP bind hash table entries: 8192 (order: 3, 32768 bytes) [  19.480041] TCP: Hash tables configured (established 8192 bind 8192) [  19.480072] TCP reno registered [  19.480468] NET: Registered protocol family 1 [  19.484863] VFS: Disk quotas dquot_6.5.2 [  19.484985] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) [  19.485626] squashfs: version 4.0 (2009/01/31) Phillip Lougher [  19.486450] JFFS2 version 2.2. (NAND) (SUMMARY) �© 2001-2006 Red Hat, Inc. [   19.487457] msgmni has been set to 470 [  19.492523] alg: No test for stdrng (krng) [  19.492645] io scheduler noop registered [  19.492645] io scheduler anticipatory registered [  19.492675] io scheduler deadline registered [  19.492889] io scheduler cfq registered (default) [  19.519348] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled [  19.541748] serial8250.0: ttyS0 at MMIO 0x4806a000 (irq = 72) is a ST16654 [  19.563201] serial8250.0: ttyS1 at MMIO 0x4806c000 (irq = 73) is a ST16654 [  19.583740] serial8250.0: ttyS2 at MMIO 0x49020000 (irq = 74) is a ST16654 [  19.583801] console [ttyS2] enabled [  20.108825] brd: module loaded [  20.118408] loop: module loaded [  20.122741] enc28j60 spi4.0: enc28j60 Ethernet driver 1.01 loaded [  20.133117] net eth0: enc28j60 driver registered [  20.139099] usbcore: registered new interface driver catc [  20.144683] catc: v2.8:CATC EL1210A NetMate USB Ethernet driver [  20.150939] usbcore: registered new interface driver kaweth [  20.156616] pegasus: v0.6.14 (2006/09/27), Pegasus/Pegasus II USB Ethernet driver [  20.164489] usbcore: registered new interface driver pegasus [  20.170257] rtl8150: v0.6.2 (2004/08/27):rtl8150 based usb-ethernet driver [  20.177520] usbcore: registered new interface driver rtl8150 [  20.183563] usbcore: registered new interface driver asix [  20.189300] usbcore: registered new interface driver cdc_ether [  20.195495] usbcore: registered new interface driver dm9601 [  20.201507] usbcore: registered new interface driver smsc95xx [  20.207641] usbcore: registered new interface driver gl620a [  20.213531] usbcore: registered new interface driver net1080 [  20.219573] usbcore: registered new interface driver plusb [  20.225463] usbcore: registered new interface driver rndis_host [  20.231781] usbcore: registered new interface driver cdc_subset [  20.238128] usbcore: registered new interface driver zaurus [  20.244018] usbcore: registered new interface driver MOSCHIP usb-ethernet driver [  20.251861] Broadcom 43xx driver loaded [ Features: L, Firmware-ID: FW13 ] [  20.259307] usbcore: registered new interface driver zd1211rw [  20.265441] usbcore: registered new interface driver rtl8187 [  20.271545] usbcore: registered new interface driver rndis_wlan [  20.277832] usbcore: registered new interface driver zd1201 [  20.283813] usbcore: registered new interface driver usb8xxx [  20.289916] usbcore: registered new interface driver rt2500usb [  20.296173] usbcore: registered new interface driver rt73usb [  20.302246] usbcore: registered new interface driver p54usb [  20.307861] i2c /dev entries driver [  20.313446] Driver 'sd' needs updating - please use bus_type methods [  20.320220] Driver 'sr' needs updating - please use bus_type methods [  20.327789] omap2-nand driver initializing [  20.332305] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xba (Micron NAND 256MiB 1,8V 16-bit) [  20.341369] cmdlinepart partition parsing not available [  20.346649] Creating 5 MTD partitions on "omap2-nand": [  20.351867] 0x000000000000-0x000000080000 : "X-Loader" [  20.359283] 0x000000080000-0x000000260000 : "U-Boot" [  20.366485] 0x000000260000-0x000000280000 : "U-Boot Env" [  20.373352] 0x000000280000-0x000000680000 : "Kernel" [  20.381347] 0x000000680000-0x000010000000 : "File System" [  20.494232] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [  20.501220] ehci-omap ehci-omap.0: OMAP-EHCI Host Controller [  20.507995] ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 1 [  20.515869] ehci-omap ehci-omap.0: irq 77, io mem 0x48064800 [  20.534942] ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00 [  20.541564] usb usb1: configuration #1 chosen from 1 choice [  20.547698] hub 1-0:1.0: USB hub found [  20.551635] hub 1-0:1.0: 3 ports detected [  20.557983] Initializing USB Mass Storage driver... [  20.563385] usbcore: registered new interface driver usb-storage [  20.569519] USB Mass Storage support registered. [  20.574920] mice: PS/2 mouse device common for all mice [  20.580841] input: gpio-keys as /devices/platform/gpio-keys/input/input0 [  20.590545] input: twl4030_pwrbutton as /devices/platform/i2c_omap.1/i2c-adapter/i2c-1/1-0049/twl4030_pwrbutton/input/input1 [  20.605438] rtc-ds1307 2-0068: rtc core: registered ds1307 as rtc0 [  20.611663] rtc-ds1307 2-0068: 56 bytes nvram [  20.617980] OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec [  20.624481] Bluetooth: HCI UART driver ver 2.2 [  20.628997] Bluetooth: HCI H4 protocol initialized [  20.633819] Bluetooth: HCI BCSP protocol initialized [  20.638885] Bluetooth: HCILL protocol initialized [  20.643646] Bluetooth: Broadcom Blutonium firmware driver ver 1.2 [  20.650146] usbcore: registered new interface driver bcm203x [  20.655944] Bluetooth: Digianswer Bluetooth USB driver ver 0.10 [  20.662445] usbcore: registered new interface driver bpa10x [  20.668121] Bluetooth: BlueFRITZ! USB driver ver 1.2 [  20.673431] usbcore: registered new interface driver bfusb [  20.679046] Bluetooth: Generic Bluetooth USB driver ver 0.4 [  20.685028] usbcore: registered new interface driver btusb [  20.690582] Bluetooth: Generic Bluetooth SDIO driver ver 0.1 [  20.697509] mmci-omap-hs mmci-omap-hs.0: Failed to get debounce clock [  20.808563] mmci-omap-hs mmci-omap-hs.1: Failed to get debounce clock [  20.815155] regulator: Unable to get requested regulator: vmmc_aux [  20.823669] Registered led device: beagleboard::usr0 [  20.829101] Registered led device: beagleboard::usr1 [  20.841583] usbcore: registered new interface driver usbhid [  20.847229] usbhid: v2.6:USB HID core driver [  20.852844] Advanced Linux Sound Architecture Driver Version 1.0.18a. [  20.860321] usbcore: registered new interface driver snd-usb-audio [  20.867004] No device for DAI twl4030 [  20.870910] No device for DAI omap-mcbsp-dai-0 [  20.875366] No device for DAI omap-mcbsp-dai-1 [  20.880004] No device for DAI omap-mcbsp-dai-2 [  20.884490] No device for DAI omap-mcbsp-dai-3 [  20.888977] No device for DAI omap-mcbsp-dai-4 [  20.893463] OMAP3 Beagle SoC init [  20.897308] TWL4030 Audio Codec init [  20.902618] asoc: twl4030 <-> omap-mcbsp-dai-0 mapping ok [   20.918914] ALSA device list: [  20.921905]   #0: omap3beagle (twl4030) [  20.934082] oprofile: using arm/armv7 [  20.938049] TCP cubic registered [  20.941467] NET: Registered protocol family 17 [  20.945983] NET: Registered protocol family 15 [  20.950592] Bluetooth: L2CAP ver 2.11 [  20.954284] Bluetooth: L2CAP socket layer initialized [  20.959411] Bluetooth: SCO (Voice Link) ver 0.6 [  20.963958] Bluetooth: SCO socket layer initialized [  20.969116] Bluetooth: RFCOMM socket layer initialized [  20.974365] Bluetooth: RFCOMM TTY layer initialized [  20.979278] Bluetooth: RFCOMM ver 1.10 [  20.983123] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [  20.988494] Bluetooth: BNEP filters: protocol multicast [  20.993774] Bluetooth: HIDP (Human Interface Emulation) ver 1.2 [  21.002319] RPC: Registered udp transport module. [  21.007110] RPC: Registered tcp transport module. [  21.011993] lib80211: common routines for IEEE802.11 drivers [  21.017761] ThumbEE CPU extension supported. [  21.022094] Power Management for TI OMAP3. [  21.035552] Disabling unused clock "sr2_fck" [  21.039855] Disabling unused clock "sr1_fck" [  21.044219] Disabling unused clock "mcbsp_fck" [  21.048675] Disabling unused clock "mcbsp_fck" [  21.053192] Disabling unused clock "mcbsp_fck" [  21.057678] Disabling unused clock "mcbsp_ick" [  21.062194] Disabling unused clock "mcbsp_ick" [  21.066680] Disabling unused clock "mcbsp_ick" [  21.071166] Disabling unused clock "gpt2_ick" [  21.075592] Disabling unused clock "gpt3_ick" [  21.079956] Disabling unused clock "gpt4_ick" [  21.084381] Disabling unused clock "gpt5_ick" [  21.088775] Disabling unused clock "gpt6_ick" [  21.093200] Disabling unused clock "gpt7_ick" [  21.097625] Disabling unused clock "gpt8_ick" [  21.101989] Disabling unused clock "gpt9_ick" [  21.106414] Disabling unused clock "wdt3_ick" [  21.110809] Disabling unused clock "wdt3_fck" [  21.115234] Disabling unused clock "gpio2_dbck" [  21.119781] Disabling unused clock "gpio3_dbck" [  21.124389] Disabling unused clock "gpio4_dbck" [  21.128967] Disabling unused clock "gpio5_dbck" [  21.133544] Disabling unused clock "gpio6_dbck" [  21.138122] Disabling unused clock "gpt9_fck" [  21.142517] Disabling unused clock "gpt8_fck" [  21.146942] Disabling unused clock "gpt7_fck" [  21.151336] Disabling unused clock "gpt6_fck" [  21.155761] Disabling unused clock "gpt5_fck" [  21.160156] Disabling unused clock "gpt4_fck" [  21.164550] Disabling unused clock "gpt3_fck" [  21.168975] Disabling unused clock "gpt2_fck" [  21.173339] Disabling unused clock "gpt1_ick" [  21.177764] Disabling unused clock "wdt1_ick" [  21.182159] Disabling unused clock "wdt2_ick" [  21.186584] Disabling unused clock "wdt2_fck" [  21.190948] Disabling unused clock "gpio1_dbck" [  21.195556] Disabling unused clock "gpt1_fck" [  21.199981] Disabling unused clock "cam_ick" [  21.204315] Disabling unused clock "cam_mclk" [  21.208740] Disabling unused clock "des1_ick" [  21.213134] Disabling unused clock "sha11_ick" [  21.217620] Disabling unused clock "rng_ick" [  21.221923] Disabling unused clock "aes1_ick" [  21.226348] Disabling unused clock "ssi_ick" [  21.230682] Disabling unused clock "mailboxes_ick" [  21.235504] Disabling unused clock "mcbsp_ick" [  21.239990] Disabling unused clock "mcbsp_ick" [  21.244476] Disabling unused clock "gpt10_ick" [  21.248992] Disabling unused clock "gpt11_ick" [  21.253448] Disabling unused clock "hdq_ick" [  21.257781] Disabling unused clock "mspro_ick" [  21.262298] Disabling unused clock "des2_ick" [  21.266693] Disabling unused clock "sha12_ick" [  21.271179] Disabling unused clock "aes2_ick" [  21.275573] Disabling unused clock "icr_ick" [  21.279907] Disabling unused clock "pka_ick" [  21.284210] Disabling unused clock "ssi_ssr_fck" [  21.288879] Disabling unused clock "hdq_fck" [  21.293212] Disabling unused clock "mcbsp_fck" [  21.297698] Disabling unused clock "mcbsp_fck" [  21.302185] Disabling unused clock "mspro_fck" [  21.306671] Disabling unused clock "gpt11_fck" [  21.311187] Disabling unused clock "gpt10_fck" [  21.315643] Disabling unused clock "dpll4_m6x2_ck" [  21.320526] Disabling unused clock "dpll3_m3x2_ck" [  21.325378] Disabling unused clock "sys_clkout1" [  21.330047] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 1 [  21.342468] registered taskstats version 1 [  21.348236] fbcvt: 1024x768@60: CVT Name - .786M3-R [  21.379608] Console: switching to colour frame buffer device 128x48 [  21.400665] clock: clksel_round_rate_div: dpll4_m4_ck target_rate 48000000 [  21.407592] clock: new_div = 9, new_rate = 48000000 [  21.417175] rtc-ds1307 2-0068: setting system clock to 2009-09-27 16:42:23 UTC (1254069743) [  21.426086] Waiting for root device /dev/mmcblk0p2... [  21.448944] mmc0: new high speed SD card at address ddce [  21.455108] mmcblk0: mmc0:ddce SD02G 1.83 GiB [  21.460021]  mmcblk0: p1 p2 [   21.539916] EXT3-fs warning: maximal mount count reached, running e2fsck is recommended [  21.548187] kjournald starting. Commit interval 5 seconds [  21.556823] EXT3 FS on mmcblk0p2, internal journal [  21.561737] EXT3-fs: mounted filesystem with ordered data mode. [  21.567779] VFS: Mounted root (ext3 filesystem) on device 179:2. [  21.574066] Freeing init memory: 204K INIT: version 2.86 booting Please wait: booting...

I2C analysis
Using I2C tools you can analyze the I2C bus:

root@beagleboard:/bin# i2cdetect -l i2c-1  i2c             OMAP I2C adapter                        I2C adapter i2c-2  i2c             OMAP I2C adapter                        I2C adapter i2c-3  i2c             OMAP I2C adapter                        I2C adapter

Zippy Board uses i2c-2 for the RTC and EEPROM:

root@beagleboard:/bin# i2cdetect -y -r 2 0 1  2  3  4  5  6  7  8  9  a  b  c  d  e  f 00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --


 * EEPROM is at 0x50
 * RTC is at 0x68

=EEPROM=

AT24 EEPROM (AT24C01B) is used to identify Zippy board. See expansion board how this is done.

Using Linux i2cdump tool at bus 2 address 0x50 the content of this EEPROM is given:

root@beagleboard:~# i2cdump 2 0x50 b    0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f    0123456789abcdef 00: 00 01 00 01 01 00 00 00 ff ff ff ff ff ff ff ff   .?.??........... 10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ 80: 00 01 00 01 01 00 00 00 ff ff ff ff ff ff ff ff   .?.??........... 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................ f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff   ................