I suggest you break out as many pins as possible for equivalence to the XBee pin out. If XBee offers pins that the BLE112 does not (or vice versa) then break out pins that are 'semantically equivalent', making sure the I/O direction matches
. For example: the BLE112 has a connected
output pin, XBee has an associated
output pin, I would call these 'semantically equivalent'.
A key point behind my above suggestion is that you do not need to worry about firmware support for all these pins. They may or may not become supported in future firmware but if you do not break them out in the initial hardware revisions, supporting new features in the future will becomes expensive for both the manufacturer AND the customer who would then have 'unsupported hardware'.
That's my general suggetion but I do have a couple of specific requests:
1) RTS and CTS
2) Sleep pinRTS and CTS
Hardware flow control (via RTS and CTS) don't seem to be widely used in the Arduino world but they are invaluable to many applications. A UART without hardware flow control is immediately extra work for the engineer: If I want to create a robust design (which I always do
), I will have search through the datasheets and make sure my host adheres to the timing requirements and buffering abilities of the BLE112. Given that BLE is target towards low-power applications, simply 'slowing things down' is not acceptable; I want my host to wake up, burst data to the BLE112 as quickly as possible and then go back to sleep. RTS/CTS allows the host to spend the shortest amount of time possible communicating with the BLE112. This is also a reason why higher baud rate support
would be useful.Sleep pin
BLE's selling point is its low-power performance, as is 802.15.4 (XBee). XBee allows pin 9 to be configured to hibernate mode: low = XBee awake; high = 1 uA sleep mode. This allows the host to put the radio to sleep when not needed (e.g. between transmissions) and significantly reduce power consumption. I do not know if the BLE112 also offers sleep via an external input (and of same polarity) or only via serial command, but an an external input (on pin 9) sleep far more versatile and easier to use. You can create the same thing with a P-channel FET
: source = pin 1; drain = BLE112 VDD; gate = pin 9 (sleep). Add a 1M pull-down resistor on pin 9 to ensure that the BLE112 is fully powered when pin 9 is floating/unused.
This is quite a long post, I hope it is useful. Let me know your thoughts.