From 3c6068328fa6fff25ca92e55403c29ed1a08385a Mon Sep 17 00:00:00 2001 From: Jonathan Brandenburg Date: Sun, 29 Apr 2018 11:48:01 -0500 Subject: [PATCH] Create sample code probing for existence of AX5043 --- probeTxRx/Makefile | 21 +++++++++ probeTxRx/probeTxRx | Bin 0 -> 9064 bytes probeTxRx/probeTxRx.c | 55 +++++++++++++++++++++ probeTxRx/probeTxRx.o | Bin 0 -> 1840 bytes probeTxRx/spi/ax5043spi.c | 97 ++++++++++++++++++++++++++++++++++++++ probeTxRx/spi/ax5043spi.h | 17 +++++++ probeTxRx/spi/ax5043spi.o | Bin 0 -> 3068 bytes 7 files changed, 190 insertions(+) create mode 100644 probeTxRx/Makefile create mode 100755 probeTxRx/probeTxRx create mode 100644 probeTxRx/probeTxRx.c create mode 100644 probeTxRx/probeTxRx.o create mode 100644 probeTxRx/spi/ax5043spi.c create mode 100644 probeTxRx/spi/ax5043spi.h create mode 100644 probeTxRx/spi/ax5043spi.o diff --git a/probeTxRx/Makefile b/probeTxRx/Makefile new file mode 100644 index 00000000..e013769b --- /dev/null +++ b/probeTxRx/Makefile @@ -0,0 +1,21 @@ +all: probeTxRx + +rebuild: clean +rebuild: all + +clean: + rm -f probeTxRx + rm -f probeTxRx.o + rm -f spi/ax5043spi.o + +probeTxRx: probeTxRx.o +probeTxRx: spi/ax5043spi.o + gcc -Wall -Wextra -o probeTxRx -lwiringPi probeTxRx.o spi/ax5043spi.o + +probeTxRx.o: probeTxRx.c +probeTxRx.o: spi/ax5043spi.h + gcc -Wall -Wextra -c probeTxRx.c + +spi/ax5043spi.o: spi/ax5043spi.c +spi/ax5043spi.o: spi/ax5043spi.h + gcc -Wall -Wextra -c -o spi/ax5043spi.o spi/ax5043spi.c diff --git a/probeTxRx/probeTxRx b/probeTxRx/probeTxRx new file mode 100755 index 0000000000000000000000000000000000000000..447edb2dbb5d6675ab3110753617324c862cfdbd GIT binary patch literal 9064 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 +#include +#include +#include + +#include "spi/ax5043spi.h" + +#define AX5043_PWRMODE (0x002) +#define AX5043_PWRSTATE_POWERDOWN (0x000) +#define AX5043_SILICONREVISION (0x000) +#define AX5043_SCRATCH (0x001) +#define SILICONREV1 (0x51) + +int main() { + setSpiChannel(SPI_CHANNEL); + setSpiSpeed(SPI_SPEED); + initializeSpi(); + + printf("INFO: Resetting AX5043\n"); + + uint8_t i; + + // Initialize Interface + // Reset Device + ax5043WriteReg(AX5043_PWRMODE, 0x80); + ax5043WriteReg(AX5043_PWRMODE, AX5043_PWRSTATE_POWERDOWN); + + // Wait some time for regulator startup + usleep(10000); + + // Check Scratch + i = ax5043ReadReg(AX5043_SILICONREVISION); + i = ax5043ReadReg(AX5043_SILICONREVISION); + + if (i != SILICONREV1) { + printf("ERROR: Unexpected hardware revision: %d\n", (int)i); + exit(EXIT_FAILURE); + } + + ax5043WriteReg(AX5043_SCRATCH, 0x55); + + if (ax5043ReadReg(AX5043_SCRATCH) != 0x55) { + printf("ERROR: Unable to communicate with the AX5043\n"); + exit(EXIT_FAILURE); + } + + ax5043WriteReg(AX5043_SCRATCH, 0xAA); + if (ax5043ReadReg(AX5043_SCRATCH) != 0xAA) { + printf("ERROR: Unable to communicate with the AX5043\n"); + exit(EXIT_FAILURE); + } + + printf("INFO: Successfully initialized the AX5043\n"); + exit(EXIT_SUCCESS); +} diff --git a/probeTxRx/probeTxRx.o b/probeTxRx/probeTxRx.o new file mode 100644 index 0000000000000000000000000000000000000000..785fcd50193b67d4834c47f779c1703cce2fdf9f GIT binary patch literal 1840 zcma)6Jxmlq6n=Zh;fbgxLPWXf#(-i7>mGk9v5+8w5mXk5Bw9FkH+mC~z0K~NoHkNe z*w|Sbr8X9p7M2zk7M7MO!CT~I~6ZyR#p?L4w3k! zs_VUAuY5?^=hospWnWpFg}GHcLJP&o%*uy*YOkUC&SPI4YovbjxG#zO7GnCRf6+fx z`rep68$avRdU!pV!vLLlC#TUR`q}emE{vKE54e=VyH3H4eX=AI=l4xscH#&?x$xdUhu`iJ|_BS7l4h_8w zS~S%J-#6;n`kLHS1xVsw)RNE?rC3eD_Dz`-WHxaltp9A}qEDy(TN)J#lF%IEY1pkY z?YOlK&qx1XZS<@|njjJ%i1AY~J`v-WV*E;six~G}96Z00=a*_u%_=~55xN;HGT{Qw z+?*%IOU!k7S+O~f^CJ8i2NZx;l>x9C4d!KENbc|(Pz}nQdn)U2R-~lo3s+tTUK2Fh z;k#z>^65UZJJ1Pt0?<%o@gi)(T>vK)(l?Q91DGbnOTDUanXnz;K4AyILqgp5h!Azp z39;V`Rez=GZ&dv~A=cLkasM~Pe<)5PmB1g1w8B<}8HHd4w-+VLBTB!HB^~*^Y)M{| zU=^8UVC91VEWc7G^c`{+Yi>nyYx4Yje;`@mCRk(6jK!q%MZPL|fXDc6JAg_&R$~f> zFs8ZFrl-FP6I;Qq#>I{$Fq4M!G&~3H9^!m!f1 +#include +#include +#include + +//#include "dummyspi.h" +//#warning "For production builds, must not include dummyspi.h" +#include +#include + +int spiChannel = -1; +int spiSpeed = -1; + +void setSpiChannel(int newSpiChannel) { + spiChannel = newSpiChannel; +} + +void setSpiSpeed(int newSpiSpeed) { + spiSpeed = newSpiSpeed; +} + +void initializeSpi() { + printf("INFO: Initializing SPI\n"); + + if (spiChannel < 0) { + fprintf(stderr, "ERROR: invalid SPI channel %d\n", spiChannel); + exit(EXIT_FAILURE); + } + if (spiSpeed < 0) { + fprintf(stderr, "ERROR: invalid SPI speed %d\n", spiSpeed); + exit(EXIT_FAILURE); + } + + + int fd; + + wiringPiSetup(); + + fd = wiringPiSPISetup(spiChannel, spiSpeed); + + if (fd < 0) { + fprintf(stderr, "ERROR: Cannot open SPI bus with error %d, %s\n", + errno, strerror(errno)); + exit(EXIT_FAILURE); + } + + printf("INFO: Finished initializing SPI\n"); +} + +void ax5043WriteReg(uint16_t reg, uint8_t val) { + uint8_t buf[3]; + int result; + + if (spiChannel < 0) { + fprintf(stderr, "ERROR: invalid SPI channel %d\n", spiChannel); + exit(EXIT_FAILURE); + } + + buf[0] = (unsigned char)(0x00f0 | ((reg & 0xf00) >> 8)); + buf[1] = (reg & 0xff); + buf[2] = val & 0xff; + + result = wiringPiSPIDataRW(spiChannel, buf, sizeof(buf)); + if (result < 0) { + fprintf(stderr, "Failed to write the register with result %d and error %s\n", + result, strerror(result)); + exit(EXIT_FAILURE); + } +} + +uint8_t ax5043ReadReg(uint16_t reg) { + uint8_t buf[3]; + int result; + + if (spiChannel < 0) { + fprintf(stderr, "ERROR: invalid SPI channel %d\n", spiChannel); + exit(EXIT_FAILURE); + } + + buf[0] = (unsigned char)(0x0070 | ((reg & 0xf00) >> 8)); + buf[1] = (reg & 0xff); + buf[2] = 0x0000; + + result = wiringPiSPIDataRW(spiChannel, buf, sizeof(buf)); + if (result < 0) { + fprintf(stderr, "Failed to read register with result = %d and error %s\n", + result, strerror(errno)); + exit(EXIT_FAILURE); + } + + //printf("DEBUG: read value: %d\n", (int)buf[2]); + return (buf[2] & 0xff); +} diff --git a/probeTxRx/spi/ax5043spi.h b/probeTxRx/spi/ax5043spi.h new file mode 100644 index 00000000..a39b6d4c --- /dev/null +++ b/probeTxRx/spi/ax5043spi.h @@ -0,0 +1,17 @@ +// Copyright (c) 2018 Brandenburg Tech, LLC + +#ifndef AX5043SPI_H_ +#define AX5043SPI_H_ + +#include + +#define SPI_CHANNEL (0) +#define SPI_SPEED (32000000) + +void setSpiChannel(int newSpiChannel); +void setSpiSpeed(int newSpiSpeed); +void initializeSpi(); +void ax5043WriteReg(uint16_t reg, uint8_t val); +uint8_t ax5043ReadReg(uint16_t reg); + +#endif /* AX5043SPI_H_ */ diff --git a/probeTxRx/spi/ax5043spi.o b/probeTxRx/spi/ax5043spi.o new file mode 100644 index 0000000000000000000000000000000000000000..9024bcc7f5a92847040362923db75da459ace852 GIT binary patch literal 3068 zcmb7GPfQ$D82@H>!EK9iN~zSc)~TftQ`pX0s7Tb5K&gbb;DRYho3yj+l%2TDZe|`9 z4T(g1ATb^cH=_ZQ9-78P4yNItNn<>C@IYb@9z1lR+h{aVZ=S^8H}l>yUD4=AhTr%1 z_ulu-djoHuK0Bmo8Y$7JgSIWA)b1eC&>cVrHPIeQtaept_5F>e^>Z6Z+EZ;Yma9p# ztxD!QRic#&t-rUCSpE3^p{?T;F8jav<||!4HGw|~{@-Z1`sdcx&%c<<;9mm&_-2ym z);+dqsd`uX#{zsuT)~_i(@+a z)wx&fL&rWQIp@?;utze{`&dNhHDn#f8n9k3)=NmA+GmICk!RPmKC)phe)(fCZu#qg z#9rVeo<%%5W|YK?S}-H#*1&x`Gg65`Z#74%cjVsHygp|e^SUYhJN14$bFnhey;AYb z&mP2IzE?Sdhjril^+5|bInMe%=&k0(YBMnCAAPpyBOBn{RQ*Qhgd=pTo7cshbZV>3 zN;lf7?fT#6!E;Dr4tit`JcFA%^vyl1GoX6?M)vweq}Mg9!|zYcJlgAHW_*MDESv9c z{!_o0@h10MkevV4@1y8}kgr zwihybwm(}GpfoHuulNJ*?OM;a@;jHkv_s*Ufq_1wBWwBPoMXAh$@Gb|*_G)%=9Qhy zvAmsoVK(z@=rx`*GtZknnUmC?Ml+UeS+!OWPf5PPAzIwbu9n?FsE* zETtW4d^-AtL^34mNzm_Gp*Q>;e<(^6$4^w^lpvg$h{OrsmWXIUytC%fg18y6x&Bhb zuBlMs)KJIY5Y%6(C58O?S`#7v^@z><#h5AxjN6<9~#`KsoZj0ISwly{!Ixb(v&2~$di=`<`I3<^S z;RSacN*;>b-vz$JS$jH4FlY%YdqE~-aZ@?YXEnAzoOA4PqB88%L86Zs+lX#3rij+1 z{k^n*V0<#1TMCDu1@lQgMPx`c84aRAM(~_v1kVH``18ORK1>BhtY2h2jP<2oFk(M* z(w>*NAn{uu^WJ3yuYoh3Izn`c5$jGcB7TVxalRA0PMPsAkzmC7a}w8poPUQA`8w_h z^K~+!uNN7?JI08-Nk--c2E2^S%gDSEDeb>GBdi=ycp(;)=Gn!xu;&D&^LRCs&iOv2 zy;5jQm1bsa7cqR_?ev-RuXXvtntGkm{n>MAO9;=&%?jJcYxvKCHVES)b*uS*#d+*g z3EyEBv`4$}oWjF0iGSp-ppboB&v|gsQE4lRRVeINqWF%%!G4vurWBdToGd0D*6|7g z;k-5#gh%o9LT5MUvwVjDe`l0%jGumq%AagdT8Ny(@+uxI#YaC7&O5FQpvq%Zd*g5~ o^2Xrczppr2!Txk0&nepCB0j6@@F`Jzd*O)Yt)b9TNkEnN7n+r{9RL6T literal 0 HcmV?d00001