Versión TL; DR: si intenta hacer esto solo para un chip y solo para usted (es decir, no es un producto), probablemente no valga la pena, ya que tendrá que gastar al menos $ 50 para un programador.
El CC2541 es una combinación de una radio BLE y 8051 con 256K o 128K de flash y 8K de RAM. Tiene 23 pines GPIO, algunos de los cuales se pueden volver a utilizar como I²C, SPI, UART y la interfaz de programación
El CC2541 proviene de TI con firmware compatible con HCI (interfaz de controlador de host), que se encuentra en una interfaz de nivel inferior que los comandos AT. Algunos proveedores, como HMSoft, tomaron el CC2541, lo empaquetaron en una placa y proporcionaron una interfaz de comando AT en la parte superior de la pila de TI. Ese es el HM-10 en tu escudo. El HM = 10 se puede comprar por separado, por ejemplo, aquí .
Sí, puede poner el código de la aplicación en un CC2541 y usar todas sus capacidades de E / S para su propio uso. Se puede volver a programar usando dos de los pines GPIO usando un programador de TI llamado CC Debugger, que cuesta $ 50 .
El gotcha es toda la documentación de TI que se supone que está utilizando IAR Embedded Workshop para 8051, que cuesta casi $ 3000. (IAR tiene una versión de evaluación gratuita que es válida solo por 30 días). No sé qué tan difícil sería usar uno de los compiladores 8051 gratuitos que hay por ahí.
No he usado el HM-10. En su lugar, he usado Silicon Labs (anteriormente Bluegiga) BLE113 , que es otro módulo pequeño con un CC2541 empaquetado dentro de una lata de blindaje más algunos condensadores y una antena y cuesta lo mismo que el HM-10 ($ 12).
La ventaja del BLE113 (además del hecho de que está blindado y con certificación FCC) es que en lugar de programar el 8051 en C, han proporcionado un lenguaje llamado BGScript, que es una sintaxis de tipo BÁSICO. una aplicación BLE en unas pocas docenas de líneas de código.
Aquí está el código BGScript completo, para un termómetro inalámbrico BLE que envía la temperatura a un host una vez por segundo:
dim tmp(5)
dim celsius
dim offset
dim addr(6)
#init gap mod, bonding and start freerunning times on system boot
event system_boot(major ,minor ,patch ,build ,ll_version ,protocol_version ,hw )
#Get local BT address
call system_address_get( )(addr(0:6))
# Write BT address to DI service serial number string
call attributes_write(xgatt_dis_2a25,0,6,addr(0:5))
#Set device to advertisement mode and allow undirected connections
call gap_set_mode(gap_general_discoverable,gap_undirected_connectable)
#Allow pairing
call sm_set_bondable_mode(1)
#set timer to periodically create an interrupt with interval of 1s
call hardware_set_soft_timer(32768,0,0)
end
#timer expired
event hardware_soft_timer(handle)
#Request for ADC reading
call hardware_adc_read(14,3,0)
end
#ADC measurement ready
event hardware_adc_result(input,value)
offset=-1600
# ADC value is 12 MSB
celsius = value / 16
# Calculate temperature
# ADC*V_ref/ADC_max / T_coeff + offset
celsius = (10*celsius*1150/2047) * 10/45 + offset
#set flags
tmp(0:1)=0
#set as float
tmp(1:4)=float(celsius, -1)
#write the temperature information to the GATT database
call attributes_write(xgatt_htm_2a1c,0,5,tmp(0:5))
end
event connection_disconnected(handle,result)
#in case if disconnect, return to advertisement mode
call gap_set_mode(gap_general_discoverable,gap_undirected_connectable)
end
(También hay un archivo XML, gatt.xml que contiene todo el servicio GATT y los UUID característicos, etc.)
BGScript tiene acceso a todos los periféricos del chip, como los pines GPIO, I²C, SPI y UART, y en el ejemplo anterior, el ADC. No tiene que comprar un entorno de desarrollo 8051 porque le dan uno gratis para BGScript. Sin embargo, todavía tienes que comprar el programador de $ 50 TI.