anchor.diff:  
   send_request(Chip, Type, Op, Reg, Value) ->
       Addr = Chip - 1,
  -    Request = request(Type, Op, Addr, Reg, Value),
  +    Encoded = encode_request(Reg, Value),
  +    Request = request(Type, Op, Addr, Reg, Encoded),
       Response = grisp_spi:send_recv(spi2, ?SPI_MODE, Request),
  -    decode_response(Addr, Reg, bit_size(Value), Response).
  +    decode_response(Op, Addr, Reg, bit_size(Encoded), Response).
   
   request(Type, Op, Addr, Reg, Value) ->
       Req =
  
positive.code:         OvrCurr:1,
          OvlDf:1,
          GLOBLF:1,
          RegResp:Len/bitstring,
          Addr:2,
          ThrErr:1
      >> = Data,
      #{
          % faults => #{
          %     short_to_vdd => boolean(SHTVDD),
          %     above_vdd => boolean(AbvVDD),
          %     open_wire => boolean(OWOffF),
          %     current_limit => boolean(OvrCurr),
          %     overload => boolean(OvlDf),
          %     global => boolean(GLOBLF)
          % },
          % termal_shutdown => boolean(ThrErr),
          'SHTVDD' => boolean(SHTVDD),
          'AbvVDD' => boolean(AbvVDD),
          'OWOffF' => boolean(OWOffF),
          'OvrCurr' => boolean(OvrCurr),
          'OvlDf' => boolean(OvlDf),
          'GLOBLF' => boolean(GLOBLF),
          'ThrErr' => boolean(ThrErr),
          resp => decode_registers(Reg, RegResp)
      }.
  
  decode_registers(StartReg, Response) ->
  
negative.code: crc5(<<>>, R) ->
      R.
  
  encode_request(_Reg, Value) when is_binary(Value) ->
      Value;
  encode_request(Reg, Value) ->
      reg(encode, Reg, Value).
  
  decode_response(Op, Addr, Reg, Len, Response) ->
      <<_:2, Data:(Len + 9)/bitstring, CRC:5>> = Response,
      ?assertEqual(crc5(Data), CRC),
      <<
  