Estoy tratando de controlar un potenciómetro digital AD5206 en una PocketBeagle (Beaglebone Black más pequeño esencialmente). Tengo una entrada en mi árbol de dispositivos para spidev
, y sé que los pines SPI funcionan porque puedo hablar con un chip diferente en el bus (un MCP3208). Probé la línea CS del bote para asegurarme de que se seleccionara durante la escritura, y así fue. Sin embargo, estoy midiendo resistencias aleatorias en la salida del potenciómetro (al medir la resistencia entre DP0_B y AVCC).
Aquí está la parte relevante del esquema:
Yelcódigorelevantequelocontrola(estafunciónsellamacadadossegundosenmiarchivoprincipal):
intDigitalPotentiometer::setResistance(unsignedintchannel,unsignedintresistance){//Createthe11-bitwordunsignedintdata[]={channel,resistance};//SendthedataovertheSPIinterfacestructspi_ioc_transfertr={tx_buf:(unsignedlong)data,rx_buf:(unsignedlong)NULL,len:2,speed_hz:10000,delay_usecs:0,bits_per_word:0};intretval=ioctl(this->_fd,SPI_IOC_MESSAGE(1),&tr);//Expectedwipersettlingtimeis2usforthe10Kvariant,waitsomeextrausleep(5);returnretval;}
Yelarchivodelárboldedispositivos:
/dts-v1/;/plugin/;/{compatible="ti,am335x-pocketbeagle";
part-number = "mm-cape";
version = "00A0";
fragment@0 {
target = <&ocp>;
__overlay__ {
P1_08_pinmux { status = "disabled"; }; /* SCLK - spi0_sclk - P1_08 */
P1_10_pinmux { status = "disabled"; }; /* MISO - spi0_d0 - P1_10 */
P1_12_pinmux { status = "disabled"; }; /* MOSI - spi0_d1 - P1_12 */
P1_35_pinmux { status = "disabled"; }; /* CS0 - lcd_pclk - P1_35 */
P2_02_pinmux { status = "disabled"; }; /* CS1 - gpmc_a11 - P2_02 */
P1_06_pinmux { status = "disabled"; }; /* CS2 - spi0_cs0 - P1_06 */
P2_19_pinmux { status = "disabled"; }; /* CS3 - gpmc_ad11 - P2_19 */
P2_07_pinmux { status = "disabled"; }; /* CS4 - gpmc_wpn - P2_07 */
};
};
fragment@1 {
target = <&ocp>;
__overlay__ {
cape-universal { status = "disabled"; };
};
};
fragment@2 {
target = <&ocp>;
__overlay__ {
cape-universal@1 {
compatible = "gpio-of-helper";
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <>;
};
};
};
fragment@3 {
target = <&am33xx_pinmux>;
__overlay__ {
spi0_pins: spi0_pins {
pinctrl-single,pins = <
0x150 0x30 /* SCLK - spi0_sclk (MODE0 | INPUT | PULLUP) */
0x154 0x30 /* MISO - spi0_d0 (MODE0 | INPUT | PULLUP) */
0x158 0x10 /* MOSI - spi0_d1 (MODE0 | OUTPUT | PULLUP) */
0x0e8 0x17 /* CS0 - lcd_pclk (MODE7 | OUTPUT | PULLUP) */
0x06c 0x17 /* CS1 - gpmc_a11 (MODE7 | OUTPUT | PULLUP) */
0x15c 0x17 /* CS2 - spi0_cs0 (MODE7 | OUTPUT | PULLUP) */
0x02c 0x17 /* CS3 - gpmc_ad11 (MODE7 | OUTPUT | PULLUP) */
0x074 0x17 /* CS4 - gpmc_wpn (MODE7 | OUTPUT | PULLUP) */
>;
};
};
};
fragment@4 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins>;
cs-gpios = <&gpio2 24 0>,
<&gpio1 27 0>,
<&gpio0 5 0>,
<&gpio0 27 0>,
<&gpio0 31 0>;
channel@0 {
status = "disabled";
};
channel@1 {
status = "disabled";
};
adc0: mcp320x@0 {
compatible = "microchip,mcp3208";
reg = <0>;
spi-max-frequency = <1000000>;
};
adc1: mcp320x@1 {
compatible = "microchip,mcp3208";
reg = <1>;
spi-max-frequency = <1000000>;
};
pot0: spidev@2 {
compatible = "spidev";
reg = <2>;
spi-max-frequency = <1000000>;
};
pot1: spidev@3 {
compatible = "spidev";
reg = <3>;
spi-max-frequency = <1000000>;
};
pot2: spidev@4 {
compatible = "spidev";
reg = <4>;
spi-max-frequency = <1000000>;
};
};
};
};