In fact, it’s 2 PCB, one module from Ubiquisys connected with a B2B (board to board) connector to the NEC platform that is there for powering, ethernet, usb, at24 Eeprom.
Some info about the cpu, before Broadcom buys Percello, it used to be tagged as PRC6000.
cat /proc/cpuinfo
system type : Percello PRC6000
processor : 0
cpu model : MIPS 24Kc V8.1
BogoMIPS : 408.78
wait instruction : yes
microsecond timers : yes
tlb_entries : 32
extra interrupt vector : yes
hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x07a0, 0x0e28, 0x07e8]
ASEs implemented : mips16
shadow register sets : 2
core : 0
VCED exceptions : not available
VCEI exceptions : not available
As seen in the previous version, there is a A and B version of the File Systems. The boot contain a bootlader different from u-boot. It’s a custom Percello made.
Partitiomns are signed using an RSA algorithm. Each partiton is signed and a signature as well as a publick key is given. The bootloader is self verified
The Percello seems to be able to use an external i2c eeprom that is not populated. In the init script, “at24=at24c02..” is passed to a kernel helper called “dev_helper” which will load in this case the EEPROM. The funny part is that the EEPROM is configured at address 0×50 + A2 A1 A0. In this case A2..A0 are all wired to GND which would give this EEPROM the address 0×50. However, the script seems to be using 0×57… The script checks if the file /sys/class/i2c-adapter/i2c-1/1-0057/eeprom exist, if it does, it copies it and calls ee2ini which will convert it into an .ini file, using ipeeprom.xml as a field descriptor. Otherwise, an ipeeprom_default.bin is used.
# Read IP EEPROM, if present
EESPEC="at24=24c02,1,0x57,256,8,0"
echo $EESPEC >/sys/kernel/ubiquisys/dev_helper
EEPROM="/sys/class/i2c-adapter/i2c-1/1-0057/eeprom"
if [ -e $EEPROM ]; then
cp $EEPROM /tmp/ipeeprom.bin
if ! ee2ini /etc/ipeeprom.xml /tmp/ipeeprom.bin /etc/ipeeprom.ini 2>/dev/null; then
echo "No valid data in IP EEPROM, setting to DHCP"
ee2ini /etc/ipeeprom.xml /etc/eeprom_default.bin >/etc/ipeeprom.ini
fi
rm /tmp/ipeeprom.bin
else
ee2ini /etc/ipeeprom.xml /etc/eeprom_default.bin /etc/ipeeprom.ini
fi
As seen on the picture, the 3 chips is not populated:
U18: AT24C02
R129: 10k Pullup resistor
C87: 100nf
The eeprom is only 256 bytes wide. However, the IP configurations would use less than 128 bytes. the rest could be used for some key ?
FTDI has a UMFT201XB-01 Module which is an I2C Slave to USB converter.
The module is part of the FT-X device series. Thanks to Richard Meadows who modified a FT_PROG compatible tool written my Mark Lord that lets us reconfigure the device to a specific i2c addres. We need to configure it to receive data on address 0×57 (dec 87) in order to let it transfert to our /dev/ttyUSB0 all the data received on that channel on the USB port. Here is a dump of once programmed
This cheap sniffer would let me analyze later on the trafic. It has a fancy features that automatically identifies the SDA and SCL bus of the i2c and show the datas on the bus, as well as the timing.
Here is a picture of the final test prototype. We can see the Femtocell connected with wrapping copper cable to the I2C module (white). and the Sniffer (red) on the path
In this video, on the right side, the terminal is a root shell on the femtocell. on the bottom, we have on /dev/ttyUSB1 the FTDI module connected to the I2C bus of the femto. And finally, on top left, the Open Bench Logic Sniffer. The video shows that at first, the file 1-0057/eeprom does not exist. After sending the at24=.. string to the dev_helper, something happen on the I2C bus (the sniffer is in red while waiting to be triggered). Now, the file 1-0057/eeprom exist. Next step, we write a “ABCDEF..” pattern to the /dev/ttyUSB1 device, which is the i2c to USB converter. this one will keep this string in it’s FIFO. When on the Femto console, we do a cat 1-0057/eeprom, the string that was passed to the /dev/ttyUSB is replied. We see on the sniffer that the data were sent at that moment trought the I2C bus on the addres 0×57. Therefor, the AT24C02 has been emulated
"<?xml version="1.0" encoding="UTF-8"?>
<EEPROMFieldDefinitions>
<SchemaVersion>0.0.2</SchemaVersion>
<SchemaDate>Mon May 9 12:00:00 2011</SchemaDate>
<EEPROMField>
<Name>DHCPEnabled</Name>
<Tag>1</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>1</Max>
<Modifiable>1</Modifiable>
<Info>Configures whether the ZAP IP address is obtained by DHCP or not</Info>
<Default>1</Default>
</EEPROMField>
<EEPROMField>
<Name>StaticIPAddress</Name>
<Tag>2</Tag>
<Type>string</Type>
<Size>15</Size>
<Modifiable>1</Modifiable>
<Info>ZAP static IP address (Only used if DHCP disabled)</Info>
<Default>192.168.1.120</Default>
</EEPROMField>
<EEPROMField>
<Name>StaticNetmask</Name>
<Tag>3</Tag>
<Type>string</Type>
<Size>15</Size>
<Modifiable>1</Modifiable>
<Info>ZAP static netmask (Only used if DHCP disabled)</Info>
<Default>255.255.0.0</Default>
</EEPROMField>
<EEPROMField>
<Name>GatewayAddress</Name>
<Tag>4</Tag>
<Type>string</Type>
<Size>15</Size>
<Modifiable>1</Modifiable>
<Info>Gateway IP address (Only used if DHCP disabled)</Info>
<Default>192.168.1.1</Default>
</EEPROMField>
<EEPROMField>
<Name>PrimaryDNSAddress</Name>
<Tag>5</Tag>
<Type>string</Type>
<Size>15</Size>
<Modifiable>1</Modifiable>
<Info>Primary DNS server IP address (Mandatory if DHCP disabled)</Info>
<Default>0.0.0.0</Default>
</EEPROMField>
<EEPROMField>
<Name>SecondaryDNSAddress</Name>
<Tag>6</Tag>
<Type>string</Type>
<Size>15</Size>
<Modifiable>1</Modifiable>
<Info>Secondary DNS server IP address (Mandatory if DHCP disabled)</Info>
<Default>0.0.0.0</Default>
</EEPROMField>
<EEPROMField>
<Name>VLANEnabled</Name>
<Tag>7</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>1</Max>
<Modifiable>1</Modifiable>
<Info>Configures whether VLAN tagging is to be used (Only used if DHCP disabled)</Info>
<Default>0</Default>
</EEPROMField>
<EEPROMField>
<Name>VLANID</Name>
<Tag>8</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>4094</Max>
<Modifiable>1</Modifiable>
<Info>The ID of the VLAN in the tagging (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>0</Default>
</EEPROMField>
<EEPROMField>
<Name>Conversational</Name>
<Tag>9</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for conversational data (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>5</Default>
</EEPROMField>
<EEPROMField>
<Name>StreamingPS</Name>
<Tag>10</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for streaming PS data (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>4</Default>
</EEPROMField>
<EEPROMField>
<Name>InteractivePS_Priority1</Name>
<Tag>11</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for interactive PS data, priority 1 (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>3</Default>
</EEPROMField>
<EEPROMField>
<Name>InteractivePS_Priority2</Name>
<Tag>12</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for interactive PS data, priority 2 (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>2</Default>
</EEPROMField>
<EEPROMField>
<Name>InteractivePS_Priority3</Name>
<Tag>13</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for interactive PS data, priority 3 (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>0</Default>
</EEPROMField>
<EEPROMField>
<Name>BackgroundPS</Name>
<Tag>14</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for background PS data (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>1</Default>
</EEPROMField>
<EEPROMField>
<Name>Signalling</Name>
<Tag>15</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for signalling data to the core network (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>3</Default>
</EEPROMField>
<EEPROMField>
<Name>OAMP</Name>
<Tag>16</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for OAMP/TR069 data (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>0</Default>
</EEPROMField>
<EEPROMField>
<Name>IPT</Name>
<Tag>17</Tag>
<Type>unsigned</Type>
<Min>0</Min>
<Max>7</Max>
<Modifiable>1</Modifiable>
<Info>Class of service for IP timing data (Only used if DHCP disabled and VLAN enabled)</Info>
<Default>2</Default>
</EEPROMField>
<Digest>7a38eee56bb9218a797deeecac54db37382e8de2</Digest>
</EEPROMFieldDefinitions>