This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AFE7950EVM:帮助通过 AFE7950EVM 上的 FTDI 芯片拆裂 LMK04828

Guru**** 2386620 points
Other Parts Discussed in Thread: LMK04828, AFE7950EVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1135389/afe7950evm-help-bit-banging-lmk04828-via-ftdi-chip-on-afe7950evm

器件型号:AFE7950EVM
主题中讨论的其他器件:LMK04828

您好!  

我尝试通过 FDTI 端口直接在 AFE7950EVM 上配置 LMK04828、绕过 Latte。  

这是我使用的 C#代码。 我构建了'POWERDOWN'命令、希望看到对电流消耗的一些影响、以指示 LMK04828正在接收命令、但没有变化。  

请提供任何帮助。 我也可以提供任何其他信息。

谢谢

Khusro

using System;
using FTD2XX_NET;

namespace ConsoleApp
{
    public class Program
    {
        public static int MAX_BYTES = 1024;
        public static FTDI.FT_STATUS ftStatus;
        public static FTDI ftdiHandle;
        public static UInt32 numBytesToWrite; 
        public static UInt32 numBytesWritten; 
        public static byte[] dataToSendBuffer = new byte[MAX_BYTES];
        public static UInt32 LMK04828_DEV_INDEX = 1;

        static void Main(string[] args)
        {
            ftdiHandle = new FTDI();
            ftStatus = ftdiHandle.OpenByIndex(LMK04828_DEV_INDEX);
            ftStatus |= ftdiHandle.InTransferSize(4096); //Set USB req transfer size
            ftStatus |= ftdiHandle.SetCharacters(0, false, 0, false); //Disable event and error characters
            ftStatus |= ftdiHandle.SetTimeouts(5000, 5000); //Set the read and write timeouts
            ftStatus |= ftdiHandle.SetLatency(16); // Set the latency timer
            ftStatus |= ftdiHandle.SetFlowControl(FTDI.FT_FLOW_CONTROL.FT_FLOW_NONE, 0x11, 0x13);
            ftStatus |= ftdiHandle.SetBaudRate(62500); //bit (or byte???) rate is x16 this value = 1M 
            if (ftStatus != FTDI.FT_STATUS.FT_OK)
            {
                Console.WriteLine("ftStatus not ok %d\n", ftStatus); //check for error
                Console.WriteLine("Press Return to Exit\n");
                Console.Read();
                return;
            }

            uint i = 0;
            //----------------------------------SDIO SCK CSn SDO--------------------------------------       
            dataToSendBuffer[i++] = 0xAF;    //  1   0   1   0   1   1   1   1      cs hi, start clock
            dataToSendBuffer[i++] = 0xEF;    //  1   1   1   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0xAF;    //  1   0   1   0   1   1   1   1      cs hi
            dataToSendBuffer[i++] = 0xEF;    //  1   1   1   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x8F;    //  1   0   0   0   1   1   1   1      cl lo
            dataToSendBuffer[i++] = 0xCF;    //  1   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs lo, R/W = 0 (write)
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs lo, W1 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, W0 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A12 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A11 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A10 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A9 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A8 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A7 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A6 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A5 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A4 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A3 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A2 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x8F;    //  1   0   0   0   1   1   1   1      cs low, A1 = 1
            dataToSendBuffer[i++] = 0xCF;    //  1   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, A0 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D7 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D6 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D5 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D4 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D3 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D2 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x0F;    //  0   0   0   0   1   1   1   1      cs low, D1 = 0
            dataToSendBuffer[i++] = 0x4F;    //  0   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0x8F;    //  1   0   0   0   1   1   1   1      cs low, D0 = 1
            dataToSendBuffer[i++] = 0xCF;    //  1   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0xCF;    //  1   1   0   0   1   1   1   1      cs lo, clk hi
            dataToSendBuffer[i++] = 0xCF;    //  1   1   0   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0xEF;    //  1   1   1   0   1   1   1   1      cs hi, clk hi
            dataToSendBuffer[i++] = 0xEF;    //  1   1   1   0   1   1   1   1
            //----------------------------------SDIO SCK CSn SDO--------------------------------------
            dataToSendBuffer[i++] = 0xEF;    //  1   1   1   0   1   1   1   1      cs hi, clk hi
            dataToSendBuffer[i++] = 0xEF;    //  1   1   1   0   1   1   1   1
            numBytesToWrite = i;

            // enter asynchronous bit-bang mode
            Byte Mask = 0xFF; // all output (output (1) and input (0))
            Byte Mode = 0x01; // 0x01 = asynchronous bit-bang
            ftStatus = ftdiHandle.SetBitMode(Mask, Mode);
            ftStatus = ftdiHandle.Write(dataToSendBuffer, numBytesToWrite, ref numBytesWritten);
            if ((ftStatus == FTDI.FT_STATUS.FT_OK) && (numBytesToWrite == numBytesWritten))
                Console.WriteLine("FT_Write successful\n");

            ftStatus = ftdiHandle.Close();

            Console.Write("Done, press any key to quit...");
            Console.ReadKey();
            return;
        }
    }
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Khusro、

    在 您共享的代码中的第42、43行、CSn 为低电平、SCK 在 SDIO 设置为1的情况下从0切换为1。 这 将被注册为这个 SPI 事务中的第一个位。 由于 SDIO 为高电平、它将是一 个读取事务而不是写入。  

    我们 尚未使用 C#连接 FTDI 端口。 因此、我无法评论您的代码的精度。 调试这种情况的最佳方法是使用示波 器探测 LMK SPI 线路、以验证其是否按预期工作。  

    此致、

    Vijay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。 这适用于写入。