0

我正在尝试使用 IOIO-RTG 板通过 SPI 控制 MCP-4131 数字电位器。我是 SPI 新手,但我相信我已经遵循了 SPI 示例。我显然可以设置阻力,但 IOIO 之后仍然卡住。继续的唯一方法是断开并重新连接到板。我注意到 SPI 示例需要 MISO 和 MOSI 引脚,而电位器具有组合的 SDI/SDO 引脚。这种差异是我问题的根源吗?

IOIO RTG IOIOLIb 0326 应用固件 0506 引导加载程序固件 0402 硬件 Sprk 0020

我尝试实现异步事务以不等待响应,但最终结果是相同的。我已经从 Looper 类内部和外部调用了 highgear 函数,没有任何变化。

class Looper extends BaseIOIOLooper
 {
   SpiMaster spi;

   protected void setup() throws ConnectionLostException
   {
            int clkPin = 39;//left side = 36
            int misoPin = 38;//left side = 33, not expecting output
            int mosiPin = 38;//left side = 35


           spi = ioio_.openSpiMaster(new DigitalInput.Spec(misoPin,
           Mode.PULL_UP), new DigitalOutput.Spec(mosiPin),
            new DigitalOutput.Spec(clkPin),
            new DigitalOutput.Spec[] { new DigitalOutput.Spec(40), new DigitalOutput.Spec(37),  },
            new SpiMaster.Config(Rate.RATE_125k, true, true));
   }

   public void highgear()
        {
            byte[] request = new byte[] {0,0,0,0,0,5,5,5};
            byte[] response = new byte[4];
            try {
                SpiMaster.Result result = spi.writeReadAsync(0, request, request.length, 7, response, 0);                
            } catch (ConnectionLostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
}

预期的结果是 MCP 提供了所需的阻力,而 IOIO 将可用于进一步指挥。没有错误,因为板只是冻结在它的设置配置中。

4

1 回答 1

0

MCP-4131 的共享 SDO/SDI 引脚应该不是问题。

来自第 31 页的数据表:“8 引脚单电位器器件受引脚限制,因此 SDO 引脚与 SDI 引脚(SDI/SDO 引脚)复用。接收到地址/命令(前 6 位)后,如果已请求有效的读取命令,SDO 引脚开始将请求的读取数据驱动到 SDI/SDO 引脚。”

只要您只写入数字电位器,一切都应该与其他 SPI 设备相同。

您是否尝试过使用其他 SPI 设备或什至没有连接您的代码?

于 2019-12-19T13:38:47.833 回答