       ).then(=>
         return @_wrbb._lock(lock)
       ).then(=>
+        return @_wrbb._send("G #{@_dir}#{path}\r") if @_binaryMode
         return @_wrbb._send("F #{@_dir}#{path}\r")
       ).then(=>
         return @_wrbb._wait("\r\nWaiting").timeout(CMD_TIMEOUT_MS)

        )
        return @_wrbb._send("\r")
      ).then(=>
        return @_wrbb._wait("\r\n").timeout(CMD_TIMEOUT_MS)
      ).then(=>
        return @_wrbb._wait("\r\n").timeout(READ1K_TIMEOUT_MS * ((length + 1024) / 1024))
      ).then((readdata) =>
        src = new Uint8Array(readdata)
        for i in [0...result.byteLength] by 1
          byte = (HEX2BIN[src[i*2+0]] << 4) + (HEX2BIN[src[i*2+1]])
          return Promise.reject("Receive data error at byte ##{i}") if isNaN(byte)
          result[i] = byte
        return result.buffer unless options.encoding?   # Last PromiseValue (ArrayBuffer)
        return ab2str(result.buffer, options.encoding)  # Last PromiseValue (string)
      ).finally(=>

  @private
  @method
    Receive data
  @param {string/ArrayBuffer/number} expect
    Wait data or number of bytes
  @return {Promise}
    Promise object
  @return {ArrayBuffer} return.PromiseValue
