Beispiel #1
0
    public static void spidump(int max_bytes, int num_packets)
    {
        // Get the size of timing information for each transaction of size
        // max_bytes

        int timing_size = BeagleApi.bg_bit_timing_size(
            BeagleProtocol.BG_PROTOCOL_SPI, max_bytes);

        byte[] data_mosi = new byte[max_bytes];
        byte[] data_miso = new byte[max_bytes];
        uint[] timing    = new uint[timing_size];

        // Get the current sampling rate
        int samplerate_khz = BeagleApi.bg_samplerate(beagle, 0);

        int i;

        // Start the capture
        if (BeagleApi.bg_enable(beagle, BeagleProtocol.BG_PROTOCOL_SPI) !=
            (int)BeagleStatus.BG_OK)
        {
            Console.Write("error: could not enable SPI capture; exiting...\n");
            Environment.Exit(1);
        }

        Console.Write("index,time(ns),SPI,status,mosi0/miso0 ... " +
                      "mosiN/misoN\n");
        Console.Out.Flush();

        // Capture and print information for each transaction
        for (i = 0; i < num_packets || num_packets == 0; ++i)
        {
            uint  status          = 0;
            ulong time_sop        = 0;
            ulong time_sop_ns     = 0;
            ulong time_duration   = 0;
            uint  time_dataoffset = 0;
            int   n = 0;

            // Read transaction with bit timing data
            int count = BeagleApi.bg_spi_read_bit_timing(beagle, ref status,
                                                         ref time_sop, ref time_duration,
                                                         ref time_dataoffset,
                                                         max_bytes, data_mosi,
                                                         max_bytes, data_miso,
                                                         timing_size, timing);

            // Translate timestamp to ns
            time_sop_ns = TIMESTAMP_TO_NS(time_sop, samplerate_khz);

            Console.Write("{0:d},{1:d},SPI,(", i, time_sop_ns);

            if (count < 0)
            {
                Console.Write("error={0:d},", count);
            }

            print_general_status(status);
            print_spi_status(status);
            Console.Write(")");

            // Check for errors
            if (count <= 0)
            {
                Console.Write("\n");
                Console.Out.Flush();

                if (count < 0)
                {
                    break;
                }

                // If zero data captured, continue
                continue;
            }

            // Display the data
            for (n = 0; n < count; ++n)
            {
                if (n != 0)
                {
                    Console.Write(", ");
                }
                if ((n & 0xf) == 0)
                {
                    Console.Write("\n    ");
                }

                Console.Write("{0:x2}/{1:x2}", data_mosi[n], data_miso[n]);
            }

            Console.Write("\n");
            Console.Out.Flush();
        }

        // Stop the capture
        BeagleApi.bg_disable(beagle);
    }