Este final de semana resolvi mexer com o osmocombb. Eu tenho dois celulares que utilizam o processador calypso suportado pelo osmocombb: o C115 e o W220. O celular C115 possui suporte completo incluindo a parte dos transceptores RF, ja’ o W220 ainda nao possui a parte de RF, mas consegue rodar os exemplos basicos na highram:
$ ./osmocon -p /dev/ttyUSB0 -m romload ../../target/firmware/board/chimei_w220/hello_world.highram.bin
O W220 utiliza o transceptor RF Si4210 da Silicon Labs que ainda não possui driver, portanto terei que criar um driver para que o W220 possa funcionar com o osmocombb.
Entao, para esquentar as turbinas, resolvi fazer um teste basico e teoricamente simples: acender os LEDs do W220. Apos analisar o esquematico, a primeira coisa que descobri foi que os LEDs nao sao controlados diretamente pelo processador calypso, mas sim atraves de um expandor de I/O PCA9537 ligado ao processador via barramento I2C.
Apos varias tentativas sem sucesso resolvi soldar dois fios (no SCL e SDA) do PCA9537 para analisar o que estava errado. Para minha surpresa o bit mais significativo do endereco do expansor de I/O (0x49) nao aparecia no barramento. Nao demorou muito para que eu encontrasse a causa do problema, o autor do driver I2C para o Calypso (Harald Welte) se confundiu na hora de mascarar os bits de endereco. Então submeti um patch para resolver o problema.
Assim finalmente tudo funcionou como o esperado:
Este foi o codigo usado para acender todos os LEDs:
#define PCA9537_ADDR 0x49 int rc = 0; const uint8_t data1[1] = {0x00}; const uint8_t data2[1] = {0x00}; rc = i2c_write(PCA9537_ADDR, 3, 1, data1, 1); if(rc) puts("i2c 1 fail\n"); rc = i2c_write(PCA9537_ADDR, 1, 1, data2, 1); if(rc) puts("i2c 2 fail\n");
Boa noite Alan. Com o Osmocom é possivel bootar um Linux nos dispositivos,ou só ‘brincar’ com o processador e seus periféricos no sistema original da motorola? Abraços!
Oi Angelo,
Por enquanto o único smartphone que tem suporte a Linux e OsmocomBB é o Sciphone G2, porém a parte do baseband dele não está funcional ainda.
Para os celulares mais simples (feature phone) existe o porte o RTOS NuttX. Abraços!
Agradeço muito a resposta. Só abusando mais um pouquinho (hehe),como você descobre os valores hexagonais dos endereços dos periféricos? eles estão no datasheet do processador ou do periférico em si? Grato mais uma vez!
Sem problema Angelo 🙂
Você encontra os valores no datasheet, só precisa converter para o endereço I2C certo. Eu comentei sobre isso há algum tempo atrás neste post: https://acassis.wordpress.com/2009/11/18/how-to-find-the-i2c-device-address/
Espero que ajude. Um abraço!
Ajudou mesmo! Obrigado! Um grande abraço!