How is output drive capacity set on the BL600 digital output pins?
The BL6x0 can drive external circuits from its SIO pins when they are configured as digital outputs (DIO) using the function, GpioSetFunc(nSigNum,nFunction,nSubFunc). Starting with firmware v1.5.65.0, the BL6x0 module can output any permutation of the following three states depending on the logic output state of the DIO pin (logic 0 or 1):
Standard Output Drive
High Output Drive (a maximum of three pins can be configured as high drive outputs)
Hi-Z / High Impedance / Disconnect
In the BL6x0 Extension Functionality manual(s) the section for nFunction==Digital_Out can be confusing but what follows expands and further explains how to configure a pin for Digital_Out w/ standard or high drive capability:
Combination of nSubFunc bits 0,1,2,3
nSubFunc Output *
0000 (BL6x0 Extension Functionality manual lists this as ‘0’)
Initial output LOW (==0)
0001 (BL6x0 Extension Functionality manual lists this as ‘1’)
Initial output HIGH (== 1)
0010 (BL6x0 Extension Functionality manual lists this as ‘2’) **
Output is PWM (see GpioConfigPwm() for setup and operation details)
0011 (BL6x0 Extension Functionality manual lists this as ‘3’) **
Output is Frequency (GpioWrite(x) sets output frequency; where x= 0 to 4000000, GpioWrite(0) switches frequency output OFF)
All other values
Reserved for Future Use
* Only one of the nSubFunc outputs, defined above, may be active on a single DIO pin
** Output drive capacity settings for bits 4, 5, and 6 are not valid (== 000) when nSubFunc output is PWM or Frequency
Combination of nSubFunc bits 4, 5, 6
Output Drive when DIO == 0
Output Drive when DIO == 1
000
Standard 0.5mA output drive
Standard 0.5mA output drive
001
High 5.0mA output drive
Standard 0.5mA output drive
010
Standard 0.5mA output drive
High 5.0mA output drive
011
High 5.0mA output drive
High 5.0mA output drive
100
Hi-Z / Disconnect
Standard 0.5mA output drive
101
Hi-Z / Disconnect
High 5.0mA output drive
110
Standard 0.5mA output drive
Hi-Z / Disconnect
111
High 5.0mA output drive
Hi-Z / Disconnect
Example 1:
The following will set up SIO_1 as a Digital_Out, initially LOW, with logic output 0 == Hi-Z (disconnect) and logic output 1 == High Drive: rc=GpioSetFunc(1,2,0x50); where 0x50 == 1010000 or…bits 3 2 1 0 == 0 0 0 0 (output initially LOW), bits 4 5 6 == 1 0 1 (0==Hi-Z / 1==High Drive)
Example 2:
The following will set up SIO_13 as a Digital_Out, initially HIGH, with logic output 0 == High Drive and logic output 1 == Standard Drive: rc=GpioSetFunc(13,2,0x11); where 0x11 == 0010001 or…bits 3 2 1 0 == 0 0 0 1 (output initially HIGH), bits 4 5 6 == 0 0 1 (0==High Drive / 1==Standard Drive)